[LLVMdev] C++ Exception Handling Problem

Argiris Kirtzidis akyrtzi at gmail.com
Tue Mar 10 08:37:45 PDT 2009


Hi,

Nyx wrote:
> Hello,
>
> I'm in the process of creating a JIT and I've run into a problem with
> exception handling. The situation I'm in is that my program will JIT
> functions, which will call native C++ functions (part of the run-time
> support). These native functions can throw exceptions. However, I don't
> actually want to handle these exceptions in the JITted functions. There are
> already try/catch blocks in place in the C++ function that calls the JITted
> functions. 
>
> The problem I run into is that when exceptions are thrown, they aren't
> caught anywhere. My program crashes with an error message: "terminate called
> after throwing an instance of 'RunError'". Where RunError is the exception
> type. Hence, the exceptions aren't getting caught where they should be.
>
> What I'd like to know is how I can fix this situation, so that if my C++
> runtime support functions throw an exception, it can unwind the JITted
> functions properly, and these functions can ensure that the proper native
> C++ catch block receives the exception. I looked at the LLVM docs, but I'm
> still puzzled.
>   

I'm under the impression that the JIT doesn't handle exceptions by default.
Try including,

#include "llvm/Target/TargetOptions.h"

and before creating the JIT do,

llvm::ExceptionHandling = true;

I hope this helps.

-Argiris



More information about the llvm-dev mailing list