[Ada] Crash on inherited private operation in child package

2019-12-13  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch7.adb (Analyze_Package_Body_Helper): Do not call
	Declare_Inherited_Private_Subprograms on s child body: the
	required operations have already been created when analyzing the
	corresponding package declaration. This prevents a redeclaration
	of inehrited operation, and a crash when inserting the new
	operation in the current scope.

From-SVN: r279349
This commit is contained in:
Ed Schonberg 2019-12-13 09:04:06 +00:00 committed by Pierre-Marie de Rodat
parent 0a8ff576db
commit 7f8ad8f001
2 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,12 @@
2019-12-13 Ed Schonberg <schonberg@adacore.com>
* sem_ch7.adb (Analyze_Package_Body_Helper): Do not call
Declare_Inherited_Private_Subprograms on s child body: the
required operations have already been created when analyzing the
corresponding package declaration. This prevents a redeclaration
of inehrited operation, and a crash when inserting the new
operation in the current scope.
2019-12-13 Yannick Moy <moy@adacore.com>
* sem_prag.adb (Analyze_Depends_In_Decl_Part,

View File

@ -925,9 +925,12 @@ package body Sem_Ch7 is
-- This is a nested package, so it may be necessary to declare certain
-- inherited subprograms that are not yet visible because the parent
-- type's subprograms are now visible.
-- Note that for child units these operations were generated when
-- analyzing the package specification.
if Ekind (Scope (Spec_Id)) = E_Package
and then Scope (Spec_Id) /= Standard_Standard
and then not Is_Child_Unit (Spec_Id)
then
Declare_Inherited_Private_Subprograms (Spec_Id);
end if;