No to je trochu popletene:
LLVM (ve všech kompilátorech na světě nezavisle na výrobci) nedokáže zachytit HW exception na stejné úrovni kde vznikne (mohl bych spekulovat o stack frame atd. ale to nevim) a ta vyjimka probubla to vyssi vrstvy kde uz zachytitelna je. To je popsane a zname chovani LLVM.
V podstate se clovek muze potkat realne se 2 typy HW vyjimek, a to FPU a AV. FPU jsou maskovane, takze zbyva AV.
Takze kdyz pises " vyhodí exceptions a na LLVM ne" tak to neni pravda. Jen tu HW (opakuji HW, tj. AV) nechytnes v tom bloku.
S tim finally co tam pise si nejsem tak jist.
No ono to podle mě souvisí s tím jak se Delphi snaží sjednotit chování nativního Delphi(win32/64) a Delphi->LLVM kompilátoru (ios, android, linux)
jestli to dobře chápu, tak win32/64 a LLVM kompilátory mají jiné chování co se týká exceptions
(což se přiznám jsem vůbec nezaznamenal - jestli to embt někde inzeruje)
problém je podle mě mnohem složitější, jak je popsáno zde:
https://dalijap.blogspot.com/2018/10/catch-me-if-you-can.html
https://dalijap.blogspot.com/2023/12/catch-me-if-you-can-part-ii.html
zjednodušeně řečeno, následující kód s win kompilátorem vyhodí exceptions a na LLVM ne:
type
TFoo = class(TObject)
public
procedure Foo; virtual;
end;
procedure TFoo.Foo;
begin
end;
var
Foo: TFoo;
begin
Foo := nil;
try
// calling a virtual method on nil reference raises an Access Violation exception
Foo.Foo;
except
Log.d('CAUGHT');
end;
end;