From: Eric Botcazou Date: Tue, 9 Oct 2018 15:06:11 +0000 (+0000) Subject: [Ada] Internal error on inlined renaming of subprogram instance X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=0444d0671d2696d9a3eef8ce01fe77f82702c0e3;p=gcc.git [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 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 04b506e92a9..2c0bce6a54c 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2018-10-09 Eric Botcazou + + * 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 * exp_unst.adb (In_Synchronized_Call): Handle properly private diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index 8aebb0f1b68..6e9f5315733 100644 --- a/gcc/ada/sem_ch7.adb +++ b/gcc/ada/sem_ch7.adb @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f84ace89c0..87368c7301d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-10-09 Eric Botcazou + + * gnat.dg/inline14.adb, gnat.dg/inline14_pkg.adb, + gnat.dg/inline14_pkg.ads: New testcase. + 2018-10-09 Ed Schonberg * gnat.dg/warn18.adb: New testcase. diff --git a/gcc/testsuite/gnat.dg/inline14.adb b/gcc/testsuite/gnat.dg/inline14.adb new file mode 100644 index 00000000000..5bf9aa6e6fa --- /dev/null +++ b/gcc/testsuite/gnat.dg/inline14.adb @@ -0,0 +1,9 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatn" } + +with Inline14_Pkg; use Inline14_Pkg; + +procedure Inline14 is +begin + Proc; +end; diff --git a/gcc/testsuite/gnat.dg/inline14_pkg.adb b/gcc/testsuite/gnat.dg/inline14_pkg.adb new file mode 100644 index 00000000000..0b719280384 --- /dev/null +++ b/gcc/testsuite/gnat.dg/inline14_pkg.adb @@ -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; diff --git a/gcc/testsuite/gnat.dg/inline14_pkg.ads b/gcc/testsuite/gnat.dg/inline14_pkg.ads new file mode 100644 index 00000000000..d9c6dff76fd --- /dev/null +++ b/gcc/testsuite/gnat.dg/inline14_pkg.ads @@ -0,0 +1,6 @@ +package Inline14_Pkg is + + procedure Proc; + pragma Inline (Proc); + +end Inline14_Pkg;