I see this problem with mainline and with GNAT GPL 2007.
A pointer is not being default initialized to NULL in
Ada.Containers.Hashed_Maps.  This causes segmentation faults
on large programs.  On the small testcase (see end of message)
you need valgrind to see it, since almost always you get NULL
by accident.  This problem seems awfully similar to ACT bug
EA23-003.

Note that in Ada.Containers.Hashed_Maps.Insert.New_Node there is
         return new Node_Type'(Key     => Key,
                               Element => <>,
                               Next    => Next);
If I get rid of the <> then the problem goes away.

$ gnatmake -gnat05 p
gcc -c -gnat05 p.adb
gnatbind -x p.ali
gnatlink p.ali
$ valgrind --tool=memcheck ./p
...
==25467== Conditional jump or move depends on uninitialised value(s)
==25467==    at 0x804AA2F: _ada_p (in /home/duncan/Programming/Bugs/bug_103/p)
==25467==    by 0x80497F6: main (in /home/duncan/Programming/Bugs/bug_103/p)

Testcase:
--chop here--
with Ada.Containers.Hashed_Maps;
procedure P is
   function H (I : Integer) return Ada.Containers.Hash_Type is
   begin
      return Ada.Containers.Hash_Type'Mod (I);
   end;
   type Item_Pointer is access Boolean;
   package M is new Ada.Containers.Hashed_Maps (Integer, Item_Pointer, H, "=");
   Z : M.Map;
   Position : M.Cursor;
   Inserted : Boolean;
   Item : Item_Pointer;
begin
   M.Insert (Z, 2, Position, Inserted); -- default initialization for new item
   Item := M.Element (Position);
   if Item = null then -- Item contains a random value here
      Item := new Boolean;
   end if;
end;


-- 
           Summary: Default pointer initialization not occuring - due to the
                    use of <>
           Product: gcc
           Version: 4.3.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: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


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

Reply via email to