Tighten the verifier check for catchblock.
authorDavid Majnemer <david.majnemer@gmail.com>
Fri, 10 Jul 2015 07:01:07 +0000 (07:01 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Fri, 10 Jul 2015 07:01:07 +0000 (07:01 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241891 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/Verifier.cpp
test/Feature/exception.ll

index 6def326a618fe2cb4955100fd3d23a056dc4da68..c85be99bc240174dd49fcb5708ac2914537ba996 100644 (file)
@@ -2861,9 +2861,10 @@ void Verifier::visitCatchBlockInst(CatchBlockInst &CBI) {
 
   BasicBlock *UnwindDest = CBI.getUnwindDest();
   Instruction *I = UnwindDest->getFirstNonPHI();
-  Assert(I->isEHBlock() && !isa<LandingPadInst>(I),
-         "CatchBlockInst must unwind to an EH block which is not a landingpad.",
-         &CBI);
+  Assert(
+      isa<CatchBlockInst>(I) || isa<CatchEndBlockInst>(I),
+      "CatchBlockInst must unwind to a CatchBlockInst or a CatchEndBlockInst.",
+      &CBI);
 
   visitTerminatorInst(CBI);
 }
index 3fd3e087acfc99d96fe1836d7ee56b0ec17d9453..3befbcd24309f0d407bae37c2c8e6f6f78d4026e 100644 (file)
@@ -58,18 +58,18 @@ bb:
 
 define i8 @catchblock() personality i32 (...)* @__gxx_personality_v0 {
 entry:
-  %cbv = catchblock i8 [i7 4] to label %bb unwind label %bb2
+  br label %bb2
 bb:
   ret i8 %cbv
 bb2:
-  ret i8 42
+  %cbv = catchblock i8 [i7 4] to label %bb unwind label %bb2
 }
 
 define void @terminateblock0() personality i32 (...)* @__gxx_personality_v0 {
 entry:
-  terminateblock [i7 4] unwind label %bb
+  br label %bb
 bb:
-  ret void
+  terminateblock [i7 4] unwind label %bb
 }
 
 define void @terminateblock1() personality i32 (...)* @__gxx_personality_v0 {
@@ -85,9 +85,9 @@ entry:
 
 define void @catchendblock0() personality i32 (...)* @__gxx_personality_v0 {
 entry:
-  catchendblock unwind label %bb
+  br label %bb
 bb:
-  ret void
+  catchendblock unwind label %bb
 }
 
 define void @catchendblock1() personality i32 (...)* @__gxx_personality_v0 {