mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 05:30:49 +00:00
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:
parent
d99cd97f85
commit
b3dd3c7ac3
@ -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)) {
|
||||
|
9
test/Assembler/alloca-invalid-type-2.ll
Normal file
9
test/Assembler/alloca-invalid-type-2.ll
Normal 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
|
||||
}
|
@ -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:
|
||||
|
@ -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() {
|
||||
|
Loading…
Reference in New Issue
Block a user