Commit 2a127979 by Eric Botcazou Committed by Pierre-Marie de Rodat

[Ada] Fix internal error on inlined subprogram instance

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
parent 16b9e3c3
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
......
......@@ -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.
......
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.
......
-- { dg-do compile }
-- { dg-options "-O -gnatn" }
with Generic_Inst11_Pkg;
procedure Generic_Inst11 is
begin
Generic_Inst11_Pkg.Proc;
end;
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;
package Generic_Inst11_Pkg is
procedure Proc with Inline;
end Generic_Inst11_Pkg;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment