The insertion point for the loads is right before the llvm.eh.exception
authorBill Wendling <isanbard@gmail.com>
Sun, 4 Sep 2011 09:02:18 +0000 (09:02 +0000)
committerBill Wendling <isanbard@gmail.com>
Sun, 4 Sep 2011 09:02:18 +0000 (09:02 +0000)
call. The call may be in the same BB as the landingpad instruction. If that's
the case, then inserting the loads after the landingpad inst, but before the
extractvalues, causes undefined behavior.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139088 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/AutoUpgrade.cpp

index a7f5888ea5dc835090d9e3718a3df02253cbb63d..572018105aa09c402f6137c7313423af3af381a8 100644 (file)
@@ -487,7 +487,7 @@ void llvm::UpgradeExceptionHandling(Module *M) {
     std::pair<Value*,Value*> ExnSelSlots = FnToLPadSlotMap[Parent->getParent()];
 
     IRBuilder<> Builder(Context);
-    Builder.SetInsertPoint(Parent, Parent->getFirstInsertionPt());
+    Builder.SetInsertPoint(Parent, Exn);
     LoadInst *LPExn = Builder.CreateLoad(ExnSelSlots.first, "exn.load");
     LoadInst *LPSel = Builder.CreateLoad(ExnSelSlots.second, "sel.load");