[Ada] Crash on inherited private operation in child package
authorEd Schonberg <schonberg@adacore.com>
Fri, 13 Dec 2019 09:04:06 +0000 (09:04 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 13 Dec 2019 09:04:06 +0000 (09:04 +0000)
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

gcc/ada/ChangeLog
gcc/ada/sem_ch7.adb

index 598b20160854f10e3f06efd553c02263b2f63351..1da3ebc97ff4541f5fb8e049937abcc6b2906d56 100644 (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,
index 313cb4eaaa34cb8ea709010b38ee63a29bf166b1..6d9a1db5b7edb1275c81fa6f14210b7f945efdf2 100644 (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;