Implement CatchTargets.

Change-Id: Ia2c872f90ab2d7b5498ed6e57621c8250e9893b8
diff --git a/src/compiler_llvm/gbc_expander.cc b/src/compiler_llvm/gbc_expander.cc
index 471a125..dbedb27 100644
--- a/src/compiler_llvm/gbc_expander.cc
+++ b/src/compiler_llvm/gbc_expander.cc
@@ -455,7 +455,7 @@
     // Set insert point to current basic block.
     irb_.SetInsertPoint(bb_iter);
 
-    old_basic_block_ = bb_iter;
+    old_basic_block_ = bb_iter->getUniquePredecessor();
 
     // Rewrite the basic block
     RewriteBasicBlock(bb_iter);
@@ -3599,6 +3599,15 @@
                              irb_.getJIntTy());
     }
 
+    //==- Exception --------------------------------------------------------==//
+    case IntrinsicHelper::CatchTargets: {
+      llvm::SwitchInst* si = llvm::dyn_cast<llvm::SwitchInst>(call_inst.getNextNode());
+      CHECK(si != NULL);
+      irb_.CreateBr(si->getDefaultDest());
+      si->eraseFromParent();
+      return call_inst.getArgOperand(0);
+    }
+
     //==- Unknown Cases ----------------------------------------------------==//
     case IntrinsicHelper::MaxIntrinsicId:
     case IntrinsicHelper::UnknownId: