range checking code generation error

Peter N Lewis peter at stairways.com.au
Sun Jul 10 05:25:55 CEST 2005


The following code works correctly if --no-range-checking, but fails 
with range checking enabled (as it is by default).

% gp --no-range-checking peterY.pas
% ./peterY
OK
% gp peterY.pas
% ./peterY
failed

Looking at the assembly, it seems erroneously pass a local variable 
address (temporary?) to the var parameter.

Thanks,
    Peter.


program peterX;

   type
     SInt32                              = Integer attribute( size = 32 );
     UInt32                              = Cardinal attribute( size = 32 );

   procedure Doit( var x: SInt32 );
   begin
     x := 5;
   end;

var
   y: UInt32;
begin
	y := 1;
   Doit( SInt32(y) );
   if y = 5 then begin
	  WriteLn( 'OK' );
   end else begin
	  WriteLn( 'failed' );
   end;
end.

-- 
<http://www.stairways.com/>  <http://download.stairways.com/>




More information about the Gpc mailing list