ada/9519: gnat-3.2: clash of assembler symbols for overloaded names

oliver.kellogg@sysde.eads.net oliver.kellogg@sysde.eads.net
Fri Jan 31 12:26:00 GMT 2003


>Number:         9519
>Category:       ada
>Synopsis:       gnat-3.2: clash of assembler symbols for overloaded names
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 31 10:46:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Oliver Kellogg
>Release:        gcc-3.2 and 3.2.1
>Organization:
>Environment:
RedHat Linux 8.0 (i686)
>Description:
This is a regression.
With gnat-3.13p, correct assembler names are generated:

$ nm ovrlod.o
00000418 T ovrlod__subprog
00000850 T ovrlod__subprog__2
00000000 t ovrlod__subprog__io__get.0
000000fc t ovrlod__subprog__io__get__2.1
00000534 t ovrlod__subprog__io__get__2.7
00000634 t ovrlod__subprog__io__get__3.10
000001fc t ovrlod__subprog__io__get__3.4
00000434 t ovrlod__subprog__io__get.6
00000368 t ovrlod__subprog__io__put.2
00000390 t ovrlod__subprog__io__put__2.3
000007c8 t ovrlod__subprog__io__put__2.9
000007f4 t ovrlod__subprog__io__put__3.11
000003bc t ovrlod__subprog__io__put__3.5
000007a0 t ovrlod__subprog__io__put.8

gnat-3.2 and 3.2.1 generate assembler names
that are liable to clash:

$ gcc -c ovrlod.adb
/tmp/ccBg9i2E.s: Assembler messages:
/tmp/ccBg9i2E.s:422: Error: symbol `ovrlod__subprog__io__get__2' is already defined
/tmp/ccBg9i2E.s:497: Error: symbol `ovrlod__subprog__io__get__3' is already defined
/tmp/ccBg9i2E.s:610: Error: symbol `ovrlod__subprog__io__put__2' is already defined
/tmp/ccBg9i2E.s:629: Error: symbol `ovrlod__subprog__io__put__3' is already defined
>How-To-Repeat:
Compile the body of this package:

-- file: ovrlod.ads
package Ovrlod is

   procedure Subprog;
   function Subprog return String;

end Ovrlod;


-- file: ovrlod.adb
with Text_IO;

package body Ovrlod is

   procedure Subprog is
      package Io is new Text_Io.Integer_Io (Integer);
   begin
      null;
   end Subprog;

   function Subprog return String is
      package Io is new Text_Io.Integer_Io (Integer);
   begin
      return "";
   end Subprog;

end Ovrlod;

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-bugs mailing list