[LLVMdev] Catching C++ exceptions, cleaning up, rethrowing
Paul J. Lucas
paul at lucasmail.org
Wed Apr 11 08:41:17 PDT 2012
On Apr 8, 2012, at 10:40 PM, Bill Wendling wrote:
> On Apr 8, 2012, at 8:47 AM, Paul J. Lucas wrote:
>
>> But I assume [the personality function] works only for a *nix/g++ system. My code also needs to work when compiled on Windows using Visual Studio and I'm guessing that it needs a different personality function. Where do I get that?
>
> That's not something I'm familiar with. You may be able to use the same personality function, but I know that Windows also uses SEH for its exception handling scheme. This is not supported by LLVM.
>
> My suggestion is to use clang to compile a program with exceptions on your Windows box and then use the personality function that it generates.
Assuming I do that and it works, wouldn't IR code generated on Windows then be incompatible with IR-code-compiled-to-machine-code on *nix (because it would use the wrong personality function)?
Doing all the grunt work of emitting landingpads, resumes, having to get the right personality function, etc., seems a lot more work that my original proposal of catching C++ exceptions in my C thunk functions and calling a linked-list of destructors to run myself. This also has the benefit of not having to deal with platform-specific personality functions.
I realize I'm a newb and there may be something subtle I'm not getting, but I have to ask: why is doing the work in IR "better"?
- Paul
More information about the llvm-dev
mailing list