diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp index 40563b536bd..d50da69529c 100644 --- a/lib/AsmParser/LLParser.cpp +++ b/lib/AsmParser/LLParser.cpp @@ -5458,6 +5458,8 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) { return true; Type *PtrTy = Ptr->getType(); + if (!isa(PtrTy)) + return Error(Loc, "pointer type is not valid"); if (VectorType *VT = dyn_cast(PtrTy)) PtrTy = VT->getElementType(); if (Ty != cast(PtrTy)->getElementType()) diff --git a/test/Assembler/getelementptr_invalid_ptr.ll b/test/Assembler/getelementptr_invalid_ptr.ll new file mode 100644 index 00000000000..8296dd37a0a --- /dev/null +++ b/test/Assembler/getelementptr_invalid_ptr.ll @@ -0,0 +1,11 @@ +; RUN: not llvm-as < %s >/dev/null 2> %t +; RUN: FileCheck %s < %t +; Test the case of an invalid pointer type on a GEP + +; CHECK: pointer type is not valid + +define i32* @foo(i32 %a) { + %gep = getelementptr i32, i32 %a, i32 1 + return i32* %gep +} +