This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug ada/19409] ACATS c460010 - valgrind detects wrong code
- From: "baldrick at free dot fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Jan 2005 12:15:27 -0000
- Subject: [Bug ada/19409] ACATS c460010 - valgrind detects wrong code
- References: <20050112224926.19409.baldrick@free.fr>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From baldrick at free dot fr 2005-01-20 12:15 -------
Here is a simpler example:
with Ada.Text_IO; use Ada.Text_IO;
procedure T is
type Index_Type is range 0 .. 4; -- does not fail if lower bound is 1
type Unconstrained_Array_Type is array (Index_Type range <>) of Integer;
subtype Array_Type is Unconstrained_Array_Type (2..4);
Target : array (1 .. 1) of Array_Type;
procedure Check (Index : Index_Type; Value : Integer) is
begin
if Target (1) (Index) /= Value then
Put_Line ("Expected " & Integer'Image (Value) & ", found " &
Integer'Image (Target (1) (Index)));
end if;
end Check;
begin
Target := (1 => (1 => 20, 2 => 30, 3 => 40)); -- the assignment requires
sliding
Check (2, 20);
Check (3, 30);
Check (4, 40);
end;
> gnatmake -s -g t
...
> ./t
Expected 20, found 30
Expected 30, found 40
Expected 40, found 134596128
This seems to be a front-end problem. In the dump t.adb.t02.original the
assignment is:
A15b[1]{lb: 1 sz: 12}[1]{lb: 2 sz: 4} = 20;
A15b[1]{lb: 1 sz: 12}[2]{lb: 2 sz: 4} = 30;
A15b[1]{lb: 1 sz: 12}[3]{lb: 2 sz: 4} = 40;
For the first assignment, notice the lower bound of 2, but the assignment to
element 1. All the assignments are off by one index.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19409