I’ve got a test case in my frontend which produces an unexpected result (libstdc++'s EH routines terminate the program after throwing). Reading the IR, I’ve been unable to determine the source of the problem.
When executing on Linux, there’s no problem. When using MCJIT on Windows x86 linking in MinGW 4.6.3 libstdc++'s EH routines, the program terminates when the exception is thrown. In both cases, __cxa_throw is invoked straight to a landing pad that catches the exact same RTTI that was used to throw it.
The reason I think this may be an LLVM bug is that I’ve reduced the test case a bit and removing some dead code causes the IR to pass. I’ve diffed the two IRs and the difference is about six lines that seem to be trivially obviously correct.
Any insight into this matter would be appreciated.
fail.llc (4.09 KB)
pass.llc (3.75 KB)