[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
This commit is contained in:
Eric Botcazou 2018-10-09 15:06:11 +00:00 committed by Pierre-Marie de Rodat
parent c14bd5028a
commit 0444d0671d
6 changed files with 52 additions and 2 deletions

View File

@ -1,3 +1,10 @@
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

View File

@ -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

View File

@ -1,3 +1,8 @@
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.

View File

@ -0,0 +1,9 @@
-- { dg-do compile }
-- { dg-options "-O -gnatn" }
with Inline14_Pkg; use Inline14_Pkg;
procedure Inline14 is
begin
Proc;
end;

View File

@ -0,0 +1,16 @@
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;

View File

@ -0,0 +1,6 @@
package Inline14_Pkg is
procedure Proc;
pragma Inline (Proc);
end Inline14_Pkg;