aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2019-08-19 08:37:28 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-19 08:37:28 +0000
commit8fafa0b42000f5fa0284f8e3308f233a41843461 (patch)
treece45a4edde11db39c89e24ba0f81d0fe935e479e /gcc
parentbfa6962fc25e2e24b3a5299095e933f9b57bb6e0 (diff)
downloadgcc-8fafa0b42000f5fa0284f8e3308f233a41843461.zip
gcc-8fafa0b42000f5fa0284f8e3308f233a41843461.tar.gz
gcc-8fafa0b42000f5fa0284f8e3308f233a41843461.tar.bz2
[Ada] Fix bogus compilation error with Elaborate_Body and -gnatN
This fixes a bogus compilation error when a unit with SPARK_Mode containing a pragma Elaborate_Body is with-ed by a generic unit containing an inlined subprogram, and front-end inlining is enabled. 2019-08-19 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_prag.adb (Is_Before_First_Decl): Deal with rewritten pragmas. gcc/testsuite/ * gnat.dg/elab8.adb, gnat.dg/elab8_gen.adb, gnat.dg/elab8_gen.ads, gnat.dg/elab8_pkg.adb, gnat.dg/elab8_pkg.ads: New testcase. From-SVN: r274664
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/sem_prag.adb5
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gnat.dg/elab8.adb12
-rw-r--r--gcc/testsuite/gnat.dg/elab8_gen.adb12
-rw-r--r--gcc/testsuite/gnat.dg/elab8_gen.ads8
-rw-r--r--gcc/testsuite/gnat.dg/elab8_pkg.adb5
-rw-r--r--gcc/testsuite/gnat.dg/elab8_pkg.ads5
8 files changed, 56 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 84c2239..f01e411 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * sem_prag.adb (Is_Before_First_Decl): Deal with rewritten
+ pragmas.
+
2019-08-19 Bob Duff <duff@adacore.com>
* sem_warn.adb (Warn_On_Unreferenced_Entity): Suppress warning
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 035b0ee..993a419d 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -7146,10 +7146,11 @@ package body Sem_Prag is
Item : Node_Id := First (Decls);
begin
- -- Only other pragmas can come before this pragma
+ -- Only other pragmas can come before this pragma, but they might
+ -- have been rewritten so check the original node.
loop
- if No (Item) or else Nkind (Item) /= N_Pragma then
+ if No (Item) or else Nkind (Original_Node (Item)) /= N_Pragma then
return False;
elsif Item = Pragma_Node then
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5bafa9d..f20c466 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2019-08-19 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/elab8.adb, gnat.dg/elab8_gen.adb,
+ gnat.dg/elab8_gen.ads, gnat.dg/elab8_pkg.adb,
+ gnat.dg/elab8_pkg.ads: New testcase.
+
2019-08-19 Bob Duff <duff@adacore.com>
* gnat.dg/warn29.adb, gnat.dg/warn29.ads: New testcase.
diff --git a/gcc/testsuite/gnat.dg/elab8.adb b/gcc/testsuite/gnat.dg/elab8.adb
new file mode 100644
index 0000000..a54ba9d
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/elab8.adb
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+-- { dg-options "-gnatN" }
+
+with Elab8_Gen;
+
+procedure Elab8 is
+
+ package My_G is new Elab8_Gen (Integer);
+
+begin
+ My_G.Compare (0, 1);
+end;
diff --git a/gcc/testsuite/gnat.dg/elab8_gen.adb b/gcc/testsuite/gnat.dg/elab8_gen.adb
new file mode 100644
index 0000000..fbb09b9
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/elab8_gen.adb
@@ -0,0 +1,12 @@
+with Elab8_Pkg;
+
+package body Elab8_Gen is
+
+ procedure Compare (Arg1, Arg2 : T) is
+ begin
+ if Arg1 = Arg2 then
+ raise Program_Error;
+ end if;
+ end;
+
+end Elab8_Gen;
diff --git a/gcc/testsuite/gnat.dg/elab8_gen.ads b/gcc/testsuite/gnat.dg/elab8_gen.ads
new file mode 100644
index 0000000..8125407
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/elab8_gen.ads
@@ -0,0 +1,8 @@
+generic
+ type T is private;
+package Elab8_Gen is
+
+ procedure Compare (Arg1, Arg2 : T);
+ pragma Inline (Compare);
+
+end Elab8_Gen;
diff --git a/gcc/testsuite/gnat.dg/elab8_pkg.adb b/gcc/testsuite/gnat.dg/elab8_pkg.adb
new file mode 100644
index 0000000..451d4e4
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/elab8_pkg.adb
@@ -0,0 +1,5 @@
+package body Elab8_Pkg is
+
+ procedure Dummy is null;
+
+end Elab8_Pkg;
diff --git a/gcc/testsuite/gnat.dg/elab8_pkg.ads b/gcc/testsuite/gnat.dg/elab8_pkg.ads
new file mode 100644
index 0000000..8bf4603
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/elab8_pkg.ads
@@ -0,0 +1,5 @@
+package Elab8_Pkg with SPARK_Mode is
+
+ pragma Elaborate_Body;
+
+end Elab8_Pkg;