[Ada] Fix internal error on inlined subprogram instance
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 14 Aug 2019 09:51:39 +0000 (09:51 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Aug 2019 09:51:39 +0000 (09:51 +0000)
This fixes a long-standing oddity in the procedure analyzing the
instantiation of a generic subprogram, which would set the
Is_Generic_Instance flag on the enclosing package generated for the
instantiation but only to reset it a few lines below.  Now this flag is
relied upon by the machinery which computes the set of public entities
to be exposed by a package.

2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_ch12.adb (Analyze_Instance_And_Renamings): Do not reset
the Is_Generic_Instance flag previously set on the package
generated for the instantiation of a generic subprogram.

gcc/testsuite/

* gnat.dg/generic_inst11.adb, gnat.dg/generic_inst11_pkg.adb,
gnat.dg/generic_inst11_pkg.ads: New testcase.

From-SVN: r274457

gcc/ada/ChangeLog
gcc/ada/sem_ch12.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/generic_inst11.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/generic_inst11_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/generic_inst11_pkg.ads [new file with mode: 0644]

index 99b551f1d0cb4f8bb4fa6a0e55d079cf51e813e5..a36a83ab3d2910d3fb27dc1ed4c4bb937387bbce 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * sem_ch12.adb (Analyze_Instance_And_Renamings): Do not reset
+       the Is_Generic_Instance flag previously set on the package
+       generated for the instantiation of a generic subprogram.
+
 2019-08-14  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch4.adb (Expand_N_Quantified_Expression): Freeze
index f98f2fa49a7801027453baf69b7d1d82684e2fa1..5f290acbe32f610baf1cd2cd4fef50864fa7af88 100644 (file)
@@ -5264,10 +5264,6 @@ package body Sem_Ch12 is
 
          Analyze (Pack_Decl);
          Check_Formal_Packages (Pack_Id);
-         Set_Is_Generic_Instance (Pack_Id, False);
-
-         --  Why do we clear Is_Generic_Instance??? We set it 20 lines
-         --  above???
 
          --  Body of the enclosing package is supplied when instantiating the
          --  subprogram body, after semantic analysis is completed.
index 9923987ec42df71bbff52ec871583de09366f130..89a92fa258328afeb90f8a3e90704ca7eae1231b 100644 (file)
@@ -1,3 +1,8 @@
+2019-08-14  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/generic_inst11.adb, gnat.dg/generic_inst11_pkg.adb,
+       gnat.dg/generic_inst11_pkg.ads: New testcase.
+
 2019-08-14  Ed Schonberg  <schonberg@adacore.com>
 
        * gnat.dg/assert2.adb, gnat.dg/assert2.ads: New testcase.
diff --git a/gcc/testsuite/gnat.dg/generic_inst11.adb b/gcc/testsuite/gnat.dg/generic_inst11.adb
new file mode 100644 (file)
index 0000000..75c19a5
--- /dev/null
@@ -0,0 +1,9 @@
+--  { dg-do compile }
+--  { dg-options "-O -gnatn" }
+
+with Generic_Inst11_Pkg;
+
+procedure Generic_Inst11 is
+begin
+   Generic_Inst11_Pkg.Proc;
+end;
diff --git a/gcc/testsuite/gnat.dg/generic_inst11_pkg.adb b/gcc/testsuite/gnat.dg/generic_inst11_pkg.adb
new file mode 100644 (file)
index 0000000..b90f8bb
--- /dev/null
@@ -0,0 +1,21 @@
+with System;
+
+package body Generic_Inst11_Pkg is
+
+   Data : Integer;
+
+   generic
+      Reg_Address : System.Address;
+   procedure Inner_G with Inline;
+
+   procedure Inner_G is
+      Reg : Integer with Address => Reg_Address;
+   begin
+      null;
+   end;
+
+   procedure My_Inner_G is new Inner_G (Data'Address);
+
+   procedure Proc renames My_Inner_G;
+
+end Generic_Inst11_Pkg;
diff --git a/gcc/testsuite/gnat.dg/generic_inst11_pkg.ads b/gcc/testsuite/gnat.dg/generic_inst11_pkg.ads
new file mode 100644 (file)
index 0000000..07ee9f6
--- /dev/null
@@ -0,0 +1,5 @@
+package Generic_Inst11_Pkg is
+
+   procedure Proc with Inline;
+
+end Generic_Inst11_Pkg;