summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2018-11-14 11:41:53 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-11-14 11:41:53 +0000
commitbfb1147ca896f985a2268b7b6a0ba4b36394f8cc (patch)
tree805a003dcb59ae73a5739f8dce05a6af228c0cac
parentb7c34dff67750bf38d8b8d89ea44c01d8c7c5870 (diff)
downloadgcc-bfb1147ca896f985a2268b7b6a0ba4b36394f8cc.tar.gz
[Ada] Fix assertion failure on pragma Compile_Time_Error in generic unit
There is no point in validating 'Alignment or 'Size of an entity declared in a generic unit after the back-end has been run, since such an entity is not passed to the back-end, and this can even lead to an assertion failure. 2018-11-14 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't register a compile-time warning or error for 'Alignment or 'Size of an entity declared in a generic unit. gcc/testsuite/ * gnat.dg/compile_time_error1.adb, gnat.dg/compile_time_error1.ads, gnat.dg/compile_time_error1_pkg.ads: New testcase. From-SVN: r266127
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/sem_prag.adb1
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gnat.dg/compile_time_error1.adb7
-rw-r--r--gcc/testsuite/gnat.dg/compile_time_error1.ads13
-rw-r--r--gcc/testsuite/gnat.dg/compile_time_error1_pkg.ads11
6 files changed, 44 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index d4dcd8c41d6..82329ac9a23 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
+
+ * sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't
+ register a compile-time warning or error for 'Alignment or 'Size
+ of an entity declared in a generic unit.
+
2018-11-14 Justin Squirek <squirek@adacore.com>
* sem_ch8.adb (Use_One_Package): Add test for out-of-scope
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index a96d148ecbb..cda8629de68 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -7545,6 +7545,7 @@ package body Sem_Prag is
begin
if Nkind (N) = N_Attribute_Reference
and then Is_Entity_Name (Prefix (N))
+ and then not Is_Generic_Unit (Scope (Entity (Prefix (N))))
then
declare
Attr_Id : constant Attribute_Id :=
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c4d7657d7d1..00ad237ac25 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/compile_time_error1.adb,
+ gnat.dg/compile_time_error1.ads,
+ gnat.dg/compile_time_error1_pkg.ads: New testcase.
+
2018-11-14 Justin Squirek <squirek@adacore.com>
* gnat.dg/generic_pkg.adb: New testcase.
diff --git a/gcc/testsuite/gnat.dg/compile_time_error1.adb b/gcc/testsuite/gnat.dg/compile_time_error1.adb
new file mode 100644
index 00000000000..db55f587a2f
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/compile_time_error1.adb
@@ -0,0 +1,7 @@
+-- { dg-do compile }
+
+package body Compile_Time_Error1 is
+
+ procedure Dummy is null;
+
+end Compile_Time_Error1;
diff --git a/gcc/testsuite/gnat.dg/compile_time_error1.ads b/gcc/testsuite/gnat.dg/compile_time_error1.ads
new file mode 100644
index 00000000000..f4f83338b2f
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/compile_time_error1.ads
@@ -0,0 +1,13 @@
+with Compile_Time_Error1_Pkg;
+
+package Compile_Time_Error1 is
+
+ type Rec is record
+ I : Integer;
+ end record;
+
+ package Inst is new Compile_Time_Error1_Pkg (Rec);
+
+ procedure Dummy;
+
+end Compile_Time_Error1;
diff --git a/gcc/testsuite/gnat.dg/compile_time_error1_pkg.ads b/gcc/testsuite/gnat.dg/compile_time_error1_pkg.ads
new file mode 100644
index 00000000000..92238577246
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/compile_time_error1_pkg.ads
@@ -0,0 +1,11 @@
+generic
+
+ type T is private;
+
+package Compile_Time_Error1_Pkg is
+
+ pragma Compile_Time_Error (T'Size not in 8 | 16 | 32, "type too large");
+
+ Data : T;
+
+end Compile_Time_Error1_Pkg;