Check that the operand of the GEP is not the GEP itself. This occurred during an...
authorBill Wendling <isanbard@gmail.com>
Wed, 17 Oct 2012 23:54:19 +0000 (23:54 +0000)
committerBill Wendling <isanbard@gmail.com>
Wed, 17 Oct 2012 23:54:19 +0000 (23:54 +0000)
llvm-svn: 166157

llvm/lib/VMCore/Verifier.cpp

index fd629b4..88ad5b1 100644 (file)
@@ -1371,9 +1371,11 @@ void Verifier::visitGetElementPtrInst(GetElementPtrInst &GEP) {
   Type *TargetTy = GEP.getPointerOperandType()->getScalarType();
 
   Assert1(isa<PointerType>(TargetTy),
-    "GEP base pointer is not a vector or a vector of pointers", &GEP);
+          "GEP base pointer is not a vector or a vector of pointers", &GEP);
   Assert1(cast<PointerType>(TargetTy)->getElementType()->isSized(),
           "GEP into unsized type!", &GEP);
+  Assert1(GEP.getPointerOperand() != &GEP,
+          "GEP is using the result as the pointer operand!", &GEP);
 
   SmallVector<Value*, 16> Idxs(GEP.idx_begin(), GEP.idx_end());
   Type *ElTy =