I have found the reason why upstream gnatlink appears to work where
Debian's gnatlink fails.

Consider this program:

with Ada.Text_IO;
procedure A is
   type String_Access is access String;
   G : constant String (3 .. 5) := "345";
   H : constant String_Access := new String'(G);
begin
   if G (1 .. 2) = "ab" then -- line 1
      Ada.Text_IO.Put_Line ("True");
   else
      Ada.Text_IO.Put_Line ("False");
   end if;

   if H.all (1 .. 2) = "ab" then -- line 2
      Ada.Text_IO.Put_Line ("True");
   else
      Ada.Text_IO.Put_Line ("False");
   end if;
end A;

If you compile normally, GNAT correctly warns that Constraint_Error will
be raised at run time at line 1 since the bounds of G are static (3..5)
and different from the ones in the "if" statement; and this is exactly
what happens if you run the program.

If you compile with -gnatpg, you get no warning and the program runs and
prints:

False
False

Well, gnatlink.adb contains such a construct at line 2195.  Upstream
compiles gnatlink.adb with -gnatpg and Debian compiles it without
-gnatpg, thereby forcing conformance with Ada semantics.  This explains
the difference in behavior.

-- 
Ludovic Brenta.


-- 
To UNSUBSCRIBE, email to debian-gcc-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/87tx88qphd....@ludovic-brenta.org

Reply via email to