[vmkit-commits] [vmkit] r58328 - /vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Oct 28 05:31:41 PDT 2008


Author: geoffray
Date: Tue Oct 28 07:31:40 2008
New Revision: 58328

URL: http://llvm.org/viewvc/llvm-project?rev=58328&view=rev
Log:
And ending ATHROW may as well be an invoke when the function is
'synchronized'.



Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp?rev=58328&r1=58327&r2=58328&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaJIT.cpp Tue Oct 28 07:31:40 2008
@@ -855,9 +855,17 @@
   pred_iterator PE = pred_end(endBlock);
   if (PI == PE && returnType != Type::VoidTy) {
     Instruction* I = currentBlock->getTerminator();
-    assert(isa<UnreachableInst>(I) && "non terminator before buggy return");
-    I->eraseFromParent();
-    BranchInst::Create(endBlock, currentBlock);
+    
+    assert((isa<UnreachableInst>(I) || isa<InvokeInst>(I)) && 
+           "Malformed end Java block");
+    
+    if (isa<UnreachableInst>(I)) {
+      I->eraseFromParent();
+      BranchInst::Create(endBlock, currentBlock);
+    } else if (InvokeInst* II = dyn_cast<InvokeInst>(I)) {
+      II->setNormalDest(endBlock);
+    }
+
     endNode->addIncoming(Constant::getNullValue(returnType),
                          currentBlock);
   }





More information about the vmkit-commits mailing list