r261014 - in /trunk/gcc/ada: ChangeLog sem_res.adb

pmderodat@gcc.gnu.org pmderodat@gcc.gnu.org
Thu May 31 10:47:00 GMT 2018


Author: pmderodat
Date: Thu May 31 10:47:29 2018
New Revision: 261014

URL: https://gcc.gnu.org/viewcvs?rev=261014&root=gcc&view=rev
Log:
[Ada] Static predicate check on characters of a string literal

This patch implements the rule given in R< 4.2 (11): if the component type of
a string literal is a character type with a static predicate, that predicate
must be applied to each character in the string.

Compiling the example below must yield:

   gcc -c -gnata main.adb

  main.adb:4:23: warning: static expression fails static predicate check on "C"
  main.adb:4:23: warning: expression is no longer considered static
  main.adb:4:24: warning: static expression fails static predicate check on "C"
  main.adb:4:24: warning: expression is no longer considered static
  main.adb:4:25: warning: static expression fails static predicate check on "C"
  main.adb:4:25: warning: expression is no longer considered static

Execution must yield:

  raised SYSTEM.ASSERTIONS.ASSERT_FAILURE :
                                        Static_Predicate failed at main.adb:4
----

procedure Main is
   subtype C is Character with Static_Predicate => C in 'A' | 'B' | 'C';
   type S is array (Positive range <>) of C;
   X : constant S := "abc";
begin
   null;
end;

2018-05-31  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_res.adb (Resolve_String_Literal): If the type is a string type
	whose component subtype has a static predicate, ensure that the
	predicate is applied to each character by expanding the string into the
	equivalent aggregate. This is also done if the component subtype is
	constrained.

Modified:
    trunk/gcc/ada/ChangeLog
    trunk/gcc/ada/sem_res.adb



More information about the Gcc-cvs mailing list