[Bug ada/20593] New: Simple array of string access miscompiled on x86 and x86_64

laurent at guerby dot net gcc-bugzilla@gcc.gnu.org
Tue Mar 22 19:29:00 GMT 2005


On 4.1 and 4.0 the following program gets a segmentation fault on x86 (tested
with 4.1.0 20050318 ) and x86_64 (tested with 4.1.0 20050321 and 4.0.0 20050320).

$ cat z
with P1; use P1;
procedure PP is
   A : constant E := Get ("3");
begin
   if A /= Enum_3 then
      raise Program_Error;
   end if;
end PP;
package P1 is
   type E is (Enum_1,Enum_2,Enum_3);
   function Get (Y : in String) return E;
end P1;
package body P1 is
   type Ptr is access constant String;
   type T is array (E) of Ptr;
   X : constant T :=
     (Enum_1 => new String'("1"),
      Enum_2 => new String'("2"),
      Enum_3 => new String'("3"));

   function Get (Y : in String) return E is
   begin
      for I in X'Range loop
         if X (I).all = Y then
            return I;
         end if;
      end loop;
      return Enum_1;
   end Get;
end P1;

$ gnatchop z
$ gnatmake pp
$ ./pp
Segmentation fault
$

We expect no output.

gdb backtrace
Program received signal SIGSEGV, Segmentation fault.
0x000000000040239f in p1.get (y={P_ARRAY = 0x407f5c, P_BOUNDS = 0x407f54}) at
p1.adb:12
12               if X (I).all = Y then
Current language:  auto; currently minimal
(gdb) bt
#0  0x000000000040239f in p1.get (y={P_ARRAY = 0x407f5c, P_BOUNDS = 0x407f54})
at p1.adb:12
#1  0x00000000004025c3 in _ada_pp () at pp.adb:3
#2  0x0000000000401f4b in main (argc=1, argv=548682068712, envp=548682068728) at
b~pp.adb:114

Not investigated yet, found in my own test code. 

This code was working with 3.3.3 and probably all previously released versions
of GCC. This was already failing on 4.0.0 20041214 so it's not brand new.

-- 
           Summary: Simple array of string access miscompiled on x86 and
                    x86_64
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P2
         Component: ada
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: laurent at guerby dot net
                CC: gcc-bugs at gcc dot gnu dot org,kenner at vlsi1 dot
                    ultra dot nyu dot edu


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



More information about the Gcc-bugs mailing list