[Ada] Fix assertion failure on pragma Compile_Time_Error in generic unit
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 14 Nov 2018 11:41:53 +0000 (11:41 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Nov 2018 11:41:53 +0000 (11:41 +0000)
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

gcc/ada/ChangeLog
gcc/ada/sem_prag.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/compile_time_error1.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/compile_time_error1.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/compile_time_error1_pkg.ads [new file with mode: 0644]

index d4dcd8c41d6aa6e77a5e7287328e01e5e45f0618..82329ac9a2398ea6f9e1acf87e797ed846ea0381 100644 (file)
@@ -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
index a96d148ecbbc08f188b6f9c9ce9ff6c31d16ed2b..cda8629de68c6b04d4ee99f6d811b2011d6d5715 100644 (file)
@@ -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 :=
index c4d7657d7d1e0a981b6cdc655b89ecd87db58534..00ad237ac25608fd9ff2f89a758d981406c2f2bb 100644 (file)
@@ -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 (file)
index 0000000..db55f58
--- /dev/null
@@ -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 (file)
index 0000000..f4f8333
--- /dev/null
@@ -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 (file)
index 0000000..9223857
--- /dev/null
@@ -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;