|
@@ -0,0 +1,49 @@
|
|
|
+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.
|
|
|
+}
|