AsmParser: Reject alloca with function type

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229363 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer 2015-02-16 08:38:03 +00:00
parent d99cd97f85
commit b3dd3c7ac3
4 changed files with 15 additions and 6 deletions

View File

@ -5109,16 +5109,16 @@ bool LLParser::ParseCall(Instruction *&Inst, PerFunctionState &PFS,
/// ::= 'alloca' 'inalloca'? Type (',' TypeAndValue)? (',' 'align' i32)?
int LLParser::ParseAlloc(Instruction *&Inst, PerFunctionState &PFS) {
Value *Size = nullptr;
LocTy SizeLoc;
LocTy SizeLoc, TyLoc;
unsigned Alignment = 0;
Type *Ty = nullptr;
bool IsInAlloca = EatIfPresent(lltok::kw_inalloca);
if (ParseType(Ty)) return true;
if (ParseType(Ty, TyLoc)) return true;
if (!PointerType::isValidElementType(Ty))
return TokError("pointer to this type is invalid");
if (Ty->isFunctionTy() || !PointerType::isValidElementType(Ty))
return Error(TyLoc, "invalid type for alloca");
bool AteExtraComma = false;
if (EatIfPresent(lltok::comma)) {

View File

@ -0,0 +1,9 @@
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
; CHECK: invalid type for alloca
define void @test() {
entry:
alloca i32 (i32)
ret void
}

View File

@ -1,6 +1,6 @@
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
; CHECK: pointer to this type is invalid
; CHECK: invalid type for alloca
define void @test() {
entry:

View File

@ -1,5 +1,5 @@
; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s
; CHECK: Cannot allocate unsized type
; CHECK: invalid type for alloca
; PR2113
define void @test() {