When compiling h.ads, the global variable Global and function Subroutine should
be eliminated.  They are not, because they have TREE_PUBLIC set (corresponds to
Is_Public in the Ada f-e) even though they are internal to the body of the
generic package G. This seems to be because G is instantiated in a package
spec.
The result is that Global and Subroutine are marked as external symbols.

Reproduce as follows: gcc -S -O1 h.ads -o - | grep h__gi__
There should be no output.

-- testcase --
generic package G is
   pragma Elaborate_Body;
end;
package body G is
   Global : Integer;
   procedure Subroutine is begin null; end;
end;
with G;
package H is
   package GI is new G;
end;


-- 
           Summary: Globals and functions private to generic body exported
                    when instantiated in a spec
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: baldrick at gcc dot gnu dot org
 GCC build triplet: x86_64-linux-gnu
  GCC host triplet: x86_64-linux-gnu
GCC target triplet: x86_64-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37796

Reply via email to