diff options
author | Olivier Hainque <hainque@adacore.com> | 2013-01-06 12:28:58 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2013-01-06 12:28:58 +0000 |
commit | bd95368b59b752fab5d2a192f3506eeff6697bd7 (patch) | |
tree | 2d64b18f1ebad87954e69ec71a06bef9b16fe446 /gcc/testsuite | |
parent | a43abae8d3f70c6bb13382a4d3793e0073842674 (diff) | |
download | gcc-bd95368b59b752fab5d2a192f3506eeff6697bd7.tar.gz |
decl.c (gnat_to_gnu_field): Emit a specialized diagnostic for component size mismatch wrt volatile requirements.
* gcc-interface/decl.c (gnat_to_gnu_field): Emit a specialized
diagnostic for component size mismatch wrt volatile requirements.
Add a gcc_unreachable() at the end of the checks for size. Split
the check on volatile for positions into one check on atomic and
a subsequent one on volatile.
From-SVN: r194946
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/specs/clause_on_volatile.ads | 85 |
2 files changed, 89 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1c91f462e37..42cb2965f04 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-01-06 Olivier Hainque <hainque@adacore.com> + + * gnat.dg/specs/clause_on_volatile.ads: New test. + 2013-01-06 Eric Botcazou <ebotcazou@adacore.com> * gnat.dg/alignment10.adb: New test. diff --git a/gcc/testsuite/gnat.dg/specs/clause_on_volatile.ads b/gcc/testsuite/gnat.dg/specs/clause_on_volatile.ads new file mode 100644 index 00000000000..4a046c15cba --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/clause_on_volatile.ads @@ -0,0 +1,85 @@ +-- { dg-do compile } + +package Clause_On_Volatile is + + type U8 is mod 2 ** 8; + + type Word is record + A, B : U8; + end record; + For Word'Alignment use 4; + + type Vword is new Word; + For Vword'Alignment use 4; + pragma Volatile (Vword); + + type Aword is new Word; + For Aword'Alignment use 4; + pragma Atomic (Aword); + + type R1 is record + W : Word; + end record; + for R1 use record + W at 0 range 0 .. 15; -- OK, packing regular + end record; + + type A1 is record + AW : Aword; + end record; + For A1'Alignment use 4; + for A1 use record + AW at 0 range 0 .. 15; -- { dg-error "must be natural size" } + end record; + + type A2 is record + B : U8; + AW : Aword; + end record; + For A2'Alignment use 4; + for A2 use record + B at 0 range 0 .. 7; + AW at 1 range 0 .. 31; -- { dg-error "must be multiple" } + end record; + + type A3 is record + B : U8; + AW : Aword; + end record; + For A3'Alignment use 4; + for A3 use record + B at 0 range 0 .. 7; + AW at 1 range 0 .. 15; -- { dg-error "must be (multiple|natural size)" } + end record; + + -- + + type V1 is record + VW : Vword; + end record; + For V1'Alignment use 4; + for V1 use record + VW at 0 range 0 .. 15; -- { dg-error "must be natural size" } + end record; + + type V2 is record + B : U8; + VW : Vword; + end record; + For V2'Alignment use 4; + for V2 use record + B at 0 range 0 .. 7; + VW at 1 range 0 .. 31; -- { dg-error "must be multiple" } + end record; + + type V3 is record + B : U8; + VW : Vword; + end record; + For V3'Alignment use 4; + for V3 use record + B at 0 range 0 .. 7; + VW at 1 range 0 .. 15; -- { dg-error "must be (multiple|natural size)" } + end record; + +end Clause_On_Volatile; |