[Ada] Fix internal error on subprogram instantiation with -gnatzc
diff mbox series

Message ID 20190819083859.GA33389@adacore.com
State New
Headers show
  • [Ada] Fix internal error on subprogram instantiation with -gnatzc
Related show

Commit Message

Pierre-Marie de Rodat Aug. 19, 2019, 8:38 a.m. UTC
This fixes a fallout of the recent change keeping the
Is_Generic_Instance flag on the wrapper package built for the
instantiation of a generic subprogram.

There is no need to visit the Instance_Spec of an
N_Subprogram_Instantiation node anymore because the regular processing
for an N_Package_Declaration node now does the job for instantiations of
generic subprograms.

The following subprogram must compile again quietly with -gnatzc:

with Gen_Proc;

package RCI is
   pragma Remote_Call_Interface;

   procedure Inst_Proc is new Gen_Proc;

   procedure P (S : String);
end RCI;

procedure Gen_Proc (S : String);
pragma Remote_Call_Interface (Gen_Proc);

with Ada.Text_IO; use Ada.Text_IO;
procedure Gen_Proc (S : String) is
   Put_Line ("Gen_Proc called: " & S);
end Gen_Proc;

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>


	* exp_dist.adb (Build_Package_Stubs): Do not specifically visit
	the declarations of an N_Subprogram_Instantiation node.

diff mbox series

--- gcc/ada/exp_dist.adb
+++ gcc/ada/exp_dist.adb
@@ -963,10 +963,8 @@  package body Exp_Dist is
             when N_Package_Declaration =>
                --  Case of a nested package or package instantiation coming
-               --  from source. Note that the anonymous wrapper package for
-               --  subprogram instances is not flagged Is_Generic_Instance at
-               --  this point, so there is a distinct circuit to handle them
-               --  (see case N_Subprogram_Instantiation below).
+               --  from source, including the wrapper package for an instance
+               --  of a generic subprogram.
                   Pkg_Ent : constant Entity_Id :=
@@ -982,16 +980,6 @@  package body Exp_Dist is
                   end if;
-            when N_Subprogram_Instantiation =>
-               --  The subprogram declaration for an instance of a generic
-               --  subprogram is wrapped in a package that does not come from
-               --  source, so we need to explicitly traverse it here.
-               if Comes_From_Source (Decl) then
-                  Visit_Nested_Pkg (Instance_Spec (Decl));
-               end if;
             when others =>
          end case;