diff --git a/.gitattributes b/.gitattributes index 5b7002abe7..ecc136e575 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8308,6 +8308,7 @@ tests/webtbs/tw9076a.pp svneol=native#text/plain tests/webtbs/tw9085.pp svneol=native#text/plain tests/webtbs/tw9098.pp svneol=native#text/plain tests/webtbs/tw9107.pp svneol=native#text/plain +tests/webtbs/tw9128.pp svneol=native#text/plain tests/webtbs/ub1873.pp svneol=native#text/plain tests/webtbs/ub1883.pp svneol=native#text/plain tests/webtbs/uw0555.pp svneol=native#text/plain diff --git a/tests/webtbs/tw9128.pp b/tests/webtbs/tw9128.pp new file mode 100644 index 0000000000..3f19dff37b --- /dev/null +++ b/tests/webtbs/tw9128.pp @@ -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. +}