Commit 0444d067 by Eric Botcazou Committed by Pierre-Marie de Rodat

[Ada] Internal error on inlined renaming of subprogram instance

This fixes a recent regression introduced in the compiler for the
inlined renaming of a subprogram instantiated in a package body.  It was
wrongly clearing the Is_Public flag on the entity associated with the
body.

2018-10-09  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch7.adb (Has_Referencer): Add comment for the
	N_Freeze_Entity case.  Do not rely on
	Has_Referencer_Of_Non_Subprograms to clear the Is_Public flag on
	subprogram entities.

gcc/testsuite/

	* gnat.dg/inline14.adb, gnat.dg/inline14_pkg.adb,
	gnat.dg/inline14_pkg.ads: New testcase.

From-SVN: r264975
parent c14bd502
2018-10-09 Eric Botcazou <ebotcazou@adacore.com>
* sem_ch7.adb (Has_Referencer): Add comment for the
N_Freeze_Entity case. Do not rely on
Has_Referencer_Of_Non_Subprograms to clear the Is_Public flag on
subprogram entities.
2018-10-09 Ed Schonberg <schonberg@adacore.com>
* exp_unst.adb (In_Synchronized_Call): Handle properly private
......
......@@ -441,7 +441,13 @@ package body Sem_Ch7 is
Discard : Boolean;
pragma Unreferenced (Discard);
begin
-- Inspect the actions to find references to subprograms
-- Inspect the actions to find references to subprograms.
-- We assume that the actions do not contain other kinds
-- of references and, therefore, we do not stop the scan
-- or set Has_Referencer_Of_Non_Subprograms here. Doing
-- it would pessimize common cases for which the actions
-- contain the declaration of an init procedure, since
-- such a procedure is automatically marked inline.
Discard :=
Has_Referencer (Actions (Decl),
......@@ -470,7 +476,8 @@ package body Sem_Ch7 is
and then not Is_Exported (Decl_Id)
and then No (Interface_Name (Decl_Id))
and then
(not Has_Referencer_Of_Non_Subprograms
((Nkind (Decl) /= N_Subprogram_Declaration
and then not Has_Referencer_Of_Non_Subprograms)
or else (Nkind (Decl) = N_Subprogram_Declaration
and then not Subprogram_Table.Get (Decl_Id)))
then
......
2018-10-09 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/inline14.adb, gnat.dg/inline14_pkg.adb,
gnat.dg/inline14_pkg.ads: New testcase.
2018-10-09 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/warn18.adb: New testcase.
......
-- { dg-do compile }
-- { dg-options "-O -gnatn" }
with Inline14_Pkg; use Inline14_Pkg;
procedure Inline14 is
begin
Proc;
end;
package body Inline14_Pkg is
I : Integer;
generic procedure Inner;
procedure Inner is
begin
I := 0;
end;
procedure My_Inner is new Inner;
procedure Proc renames My_Inner;
end Inline14_Pkg;
package Inline14_Pkg is
procedure Proc;
pragma Inline (Proc);
end Inline14_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