This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug ada/19409] ACATS c460010 - valgrind detects wrong code


------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]