aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-structalias.c
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2018-05-31 10:47:29 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-05-31 10:47:29 +0000
commit2a35a4ca1429dca015b8c635dc607e8fb7963808 (patch)
tree1c11e3873c2bb91aa4ad11eeeb9622fb5974e14a /gcc/tree-ssa-structalias.c
parentd9898483059a497f1f632ab688bcef729e6cb6e0 (diff)
downloadgcc-2a35a4ca1429dca015b8c635dc607e8fb7963808.zip
gcc-2a35a4ca1429dca015b8c635dc607e8fb7963808.tar.gz
gcc-2a35a4ca1429dca015b8c635dc607e8fb7963808.tar.bz2
[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. From-SVN: r261014
Diffstat (limited to 'gcc/tree-ssa-structalias.c')
0 files changed, 0 insertions, 0 deletions