summaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorOlivier Hainque <hainque@adacore.com>2013-01-06 12:28:58 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2013-01-06 12:28:58 +0000
commitbd95368b59b752fab5d2a192f3506eeff6697bd7 (patch)
tree2d64b18f1ebad87954e69ec71a06bef9b16fe446 /gcc/testsuite
parenta43abae8d3f70c6bb13382a4d3793e0073842674 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/specs/clause_on_volatile.ads85
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;