[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:
parent
c14bd5028a
commit
0444d0671d
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
9
gcc/testsuite/gnat.dg/inline14.adb
Normal file
9
gcc/testsuite/gnat.dg/inline14.adb
Normal file
@ -0,0 +1,9 @@
|
||||
-- { dg-do compile }
|
||||
-- { dg-options "-O -gnatn" }
|
||||
|
||||
with Inline14_Pkg; use Inline14_Pkg;
|
||||
|
||||
procedure Inline14 is
|
||||
begin
|
||||
Proc;
|
||||
end;
|
16
gcc/testsuite/gnat.dg/inline14_pkg.adb
Normal file
16
gcc/testsuite/gnat.dg/inline14_pkg.adb
Normal 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;
|
6
gcc/testsuite/gnat.dg/inline14_pkg.ads
Normal file
6
gcc/testsuite/gnat.dg/inline14_pkg.ads
Normal file
@ -0,0 +1,6 @@
|
||||
package Inline14_Pkg is
|
||||
|
||||
procedure Proc;
|
||||
pragma Inline (Proc);
|
||||
|
||||
end Inline14_Pkg;
|
Loading…
x
Reference in New Issue
Block a user