mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 07:59:34 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			948 B
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			948 B
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
program BUGGY;
 | 
						|
 | 
						|
{$MODE delphi}
 | 
						|
 | 
						|
type
 | 
						|
  TImageFormat = (ifIndex8, ifA8R8G8B8);
 | 
						|
 | 
						|
  TImageData = packed record
 | 
						|
    Width: Integer;
 | 
						|
    Height: Integer;
 | 
						|
    Format: TImageFormat;
 | 
						|
    Size: Integer;
 | 
						|
    Bits: Pointer;
 | 
						|
    Palette: Pointer;
 | 
						|
  end;
 | 
						|
 | 
						|
  TDynArray = array of TImageData;
 | 
						|
 | 
						|
procedure ModImage(var Img: TImageData);
 | 
						|
begin
 | 
						|
  Img.Width := 128;
 | 
						|
  Img.Height := 128;
 | 
						|
end;
 | 
						|
 | 
						|
procedure ArrayStuff(const Arr: TDynArray);
 | 
						|
var
 | 
						|
  I: Integer;
 | 
						|
begin
 | 
						|
  for I := 0 to High(Arr) do
 | 
						|
    ModImage(Arr[I]);
 | 
						|
end;
 | 
						|
 | 
						|
var
 | 
						|
  MyArr: TDynArray;
 | 
						|
begin
 | 
						|
  SetLength(MyArr, 5);
 | 
						|
  ArrayStuff(MyArr);
 | 
						|
end.
 | 
						|
 | 
						|
{
 | 
						|
  bug-interror.pas(30,5) Fatal: Internal error 200106041
 | 
						|
  bug-interror.pas(30,5) Fatal: Compilation aborted
 | 
						|
  
 | 
						|
  Error is caused by const parameter in procedure ArrayStuff(const Arr: TDynArray);
 | 
						|
  Doesn't occur when array is var parameter.
 | 
						|
  Only crashed in $MODE DELPHI.
 | 
						|
  Delphi lets you change elements of array even though
 | 
						|
  array is passed as const parameter.
 | 
						|
}
 |