Bug in AArch64 optimizer when compiling BGRABitmap with trunk compiler
Summary
I have discovered that compiling a simple program that uses BGRA bitmap will crash with the trunk AArch64 compiler and /O2 optimization on Darwin. This issue was introduced to trunk in commit c1d8e32e.
System Information
- Operating system: macOS / Darwin
- Processor architecture: AARCH64
- Compiler version: trunk
Steps to reproduce
- Download the attached project and build on macOS AArch64 with trunk compiler
- Note that the program will crash upon execution when compiled with /O2
Example Project
Here is the sample code (the attached file above includes all dependencies):
program project1;
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Classes, SysUtils, bgrabitmap, bgrasvg;
var
LBgraSvg: TBGRASVG;
LBgraBitmap: TBGRABitmap;
begin
Writeln('I was compiled with ', {$I %FPCVERSION%});
WriteLn('Program started');
LBgraSvg := TBGRASVG.Create;
try
WriteLn('Loading bitmap');
LBgraSvg.LoadFromFile('bgrabitmap.svg');
LBgraBitmap := TBGRABitmap.Create(64, 64);
try
Writeln('Stretch draw');
LBgraSvg.StretchDraw(LBgraBitmap.Canvas2D, 0, 0, 64, 64);
LBgraBitmap.SaveToFile('output.bmp');
Writeln('Saved output');
finally
LBgraBitmap.Free;
end;
finally
LBgraSvg.Free;
end;
WriteLn('Program ended');
end.
What is the current bug behavior?
When using the 3.2.3 compiler with either /O1 or /O2, the program works correctly.
When using the 3.3.1 compiler with /O1, the program works correctly, but with /O2 the program crashes.
What is the expected (correct) behavior?
The program must not crash due to a bug in the optimizer.
Relevant logs and/or screenshots
Here is a screen shot of the attached program compiled with 3.2.3 and 3.3.1. As you can see in 3.3.1 when /O2 incorrect code is generated and causes the program to crash.
Edited by foxpas