[llvm-dev] Propagation of foreign c++ exceptions (msvc, x64, llvm 3.7.1, MCJIT) through IR code

koffie drinker via llvm-dev llvm-dev at lists.llvm.org
Fri Jan 22 04:38:50 PST 2016


I remembered it working on an older prototype version that I used.
I've checked the old version (it also uses mcjit, llvm 3.5 or 3.6, x64) and
found the following:

try {
engine->runFunction(func, args);  *// exception is caught *
auto f = (double (*)())engine->getPointerToFunction(func);
auto d = f(); *// exception is not caught*
}
catch (const MyEx& e) {
std::cout << " eval exp handler " << std::endl;
}
catch (...) {
std::cout << " unknown exp handler " << std::endl;
}

If you use the runFunction(), the exception does not get lost.
If you cast it and run the func ptr, the exception gets thrown but the
exception is not caught.

For me I could make runFunction to work with my case, but whats the
difference?

On Thu, Jan 21, 2016 at 7:15 PM, Reid Kleckner <rnk at google.com> wrote:

> This sounds like https://llvm.org/bugs/show_bug.cgi?id=24233.
>
> On Thu, Jan 21, 2016 at 6:21 AM, koffie drinker via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
>
>> Hi all,
>>
>> I have the following code:
>>
>> [use llvm to generate ir_func() ]
>>
>> in side the ir_func() there's a call to a native cpp function that throws
>> an exception.
>> (Just imagine changing the fibonacci example and calling a native c++
>> func that throws inside the fibonacci body)
>>
>> I can't seem to catch "foreign" exception or any exception using the
>> following pseudo code:
>>
>> try {
>> // cast function ptr and execute
>>    ir_func();
>> } catch (const myEx&) {
>> } catch (...) {
>> }
>>
>> Looking at:
>> *LLVM_ENABLE_EH:BOOL*Build LLVM with exception-handling support. This is
>> necessary if you wish to link against LLVM libraries and make use of C++
>> exceptions in your own code that need to propagate through LLVM code.
>> Defaults to OFF.
>> It seems to be exactly what I require.
>>
>> I enabled LLVM_ENABLE_EH and LLVM_ENABLE_RTTI but it doesn't seems to
>> work.
>> I also tested it with /EHs /EHsc in msvc. It makes no difference
>>
>> I also looked at the ExceptionDemo.cpp, but it seems to be unsupported
>> under windows. Do I need to try catch and retrhow in my ir_func() ?
>>
>> Regards,
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160122/f47d4c8e/attachment.html>


More information about the llvm-dev mailing list