Check that catch clauses have pointer type.
authorDuncan Sands <baldrick@free.fr>
Tue, 27 Sep 2011 19:34:22 +0000 (19:34 +0000)
committerDuncan Sands <baldrick@free.fr>
Tue, 27 Sep 2011 19:34:22 +0000 (19:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140625 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Verifier.cpp

index 804d9c5d3b8aaa2027959add2653f5263e5920ec..9564b7d71f6a7e15f83050dbdd7f16a3ecbef4e6 100644 (file)
@@ -1455,9 +1455,14 @@ void Verifier::visitLandingPadInst(LandingPadInst &LPI) {
   for (unsigned i = 0, e = LPI.getNumClauses(); i < e; ++i) {
     Value *Clause = LPI.getClause(i);
     Assert1(isa<Constant>(Clause), "Clause is not constant!", &LPI);
-    if (LPI.isFilter(i))
+    if (LPI.isCatch(i)) {
+      Assert1(isa<PointerType>(Clause->getType()),
+              "Catch operand does not have pointer type!", &LPI);
+    } else {
+      Assert1(LPI.isFilter(i), "Clause is neither catch nor filter!", &LPI);
       Assert1(isa<ConstantArray>(Clause) || isa<ConstantAggregateZero>(Clause),
-              "Filter is not an array of constants!", &LPI);
+              "Filter operand is not an array of constants!", &LPI);
+    }
   }
 
   visitInstruction(LPI);