Das ist kein Codegenerierungsfehler, sondern ReturnAddr verläßt sich darauf, daß Abort einen Stackframe generiert, was in optimiertem Code nicht der Fall ist.
Die beste Alternative wäre vermutlich, wenn ReturnAddr anstelle von EBP auf ESP zugriffe:
Delphi-Quellcode:
procedure Abort;
function ReturnAddr: Pointer;
asm
MOV EAX,[ESP + 4]
end;
begin
raise EAbort.CreateRes(@SOperationAborted) at ReturnAddr;
end;