diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2018-10-09 15:06:11 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2018-10-09 15:06:11 +0000 |
commit | 0444d0671d2696d9a3eef8ce01fe77f82702c0e3 (patch) | |
tree | 9a1cd800843984fb0892e61eb573708d977d4639 /gcc | |
parent | c14bd5028a410a277b2e0ba8ffbfe8ee58e74d00 (diff) | |
download | gcc-0444d0671d2696d9a3eef8ce01fe77f82702c0e3.zip gcc-0444d0671d2696d9a3eef8ce01fe77f82702c0e3.tar.gz gcc-0444d0671d2696d9a3eef8ce01fe77f82702c0e3.tar.bz2 |
[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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/sem_ch7.adb | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/inline14.adb | 9 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/inline14_pkg.adb | 16 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/inline14_pkg.ads | 6 |
6 files changed, 52 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 04b506e..2c0bce6 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -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 diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb index 8aebb0f..6e9f531 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 8f84ace..87368c7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. diff --git a/gcc/testsuite/gnat.dg/inline14.adb b/gcc/testsuite/gnat.dg/inline14.adb new file mode 100644 index 0000000..5bf9aa6 --- /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 0000000..0b71928 --- /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 0000000..d9c6dff --- /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; |