forked from OSchip/llvm-project
Fix a crash in the LL parser where it failed to validate that the pointer operand of a GEP was valid.
This manifested as an assertion failure in +Asserts builds, and a hard crash in -Asserts builds. Found by fuzzing the LL parser. llvm-svn: 230934
This commit is contained in:
parent
7797c726b9
commit
91bdf07650
|
@ -5458,6 +5458,8 @@ int LLParser::ParseGetElementPtr(Instruction *&Inst, PerFunctionState &PFS) {
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
Type *PtrTy = Ptr->getType();
|
Type *PtrTy = Ptr->getType();
|
||||||
|
if (!isa<SequentialType>(PtrTy))
|
||||||
|
return Error(Loc, "pointer type is not valid");
|
||||||
if (VectorType *VT = dyn_cast<VectorType>(PtrTy))
|
if (VectorType *VT = dyn_cast<VectorType>(PtrTy))
|
||||||
PtrTy = VT->getElementType();
|
PtrTy = VT->getElementType();
|
||||||
if (Ty != cast<SequentialType>(PtrTy)->getElementType())
|
if (Ty != cast<SequentialType>(PtrTy)->getElementType())
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue