mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-14 09:38:40 +00:00
Reject PR3281:accepted03.ll with:
llvm-as: accepted03.ll:1:35: invalid unresolved type up reference declare void @r({ \7, opaque, \10 } %su) ^ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61725 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
68afdc3ab0
commit
dfd19ddcfa
@ -1075,15 +1075,17 @@ bool LLParser::ParseParameterList(SmallVectorImpl<ParamInfo> &ArgList,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// ParseArgumentList
|
/// ParseArgumentList - Parse the argument list for a function type or function
|
||||||
|
/// prototype. If 'inType' is true then we are parsing a FunctionType.
|
||||||
/// ::= '(' ArgTypeListI ')'
|
/// ::= '(' ArgTypeListI ')'
|
||||||
/// ArgTypeListI
|
/// ArgTypeListI
|
||||||
/// ::= /*empty*/
|
/// ::= /*empty*/
|
||||||
/// ::= '...'
|
/// ::= '...'
|
||||||
/// ::= ArgTypeList ',' '...'
|
/// ::= ArgTypeList ',' '...'
|
||||||
/// ::= ArgType (',' ArgType)*
|
/// ::= ArgType (',' ArgType)*
|
||||||
|
///
|
||||||
bool LLParser::ParseArgumentList(std::vector<ArgInfo> &ArgList,
|
bool LLParser::ParseArgumentList(std::vector<ArgInfo> &ArgList,
|
||||||
bool &isVarArg) {
|
bool &isVarArg, bool inType) {
|
||||||
isVarArg = false;
|
isVarArg = false;
|
||||||
assert(Lex.getKind() == lltok::lparen);
|
assert(Lex.getKind() == lltok::lparen);
|
||||||
Lex.Lex(); // eat the (.
|
Lex.Lex(); // eat the (.
|
||||||
@ -1099,7 +1101,10 @@ bool LLParser::ParseArgumentList(std::vector<ArgInfo> &ArgList,
|
|||||||
unsigned Attrs;
|
unsigned Attrs;
|
||||||
std::string Name;
|
std::string Name;
|
||||||
|
|
||||||
if (ParseTypeRec(ArgTy) ||
|
// If we're parsing a type, use ParseTypeRec, because we allow recursive
|
||||||
|
// types (such as a function returning a pointer to itself). If parsing a
|
||||||
|
// function prototype, we require fully resolved types.
|
||||||
|
if ((inType ? ParseTypeRec(ArgTy) : ParseType(ArgTy)) ||
|
||||||
ParseOptionalAttrs(Attrs, 0)) return true;
|
ParseOptionalAttrs(Attrs, 0)) return true;
|
||||||
|
|
||||||
if (Lex.getKind() == lltok::LocalVar ||
|
if (Lex.getKind() == lltok::LocalVar ||
|
||||||
@ -1154,7 +1159,7 @@ bool LLParser::ParseFunctionType(PATypeHolder &Result) {
|
|||||||
std::vector<ArgInfo> ArgList;
|
std::vector<ArgInfo> ArgList;
|
||||||
bool isVarArg;
|
bool isVarArg;
|
||||||
unsigned Attrs;
|
unsigned Attrs;
|
||||||
if (ParseArgumentList(ArgList, isVarArg) ||
|
if (ParseArgumentList(ArgList, isVarArg, true) ||
|
||||||
// FIXME: Allow, but ignore attributes on function types!
|
// FIXME: Allow, but ignore attributes on function types!
|
||||||
// FIXME: Remove in LLVM 3.0
|
// FIXME: Remove in LLVM 3.0
|
||||||
ParseOptionalAttrs(Attrs, 2))
|
ParseOptionalAttrs(Attrs, 2))
|
||||||
@ -2087,7 +2092,7 @@ bool LLParser::ParseFunctionHeader(Function *&Fn, bool isDefine) {
|
|||||||
unsigned Alignment;
|
unsigned Alignment;
|
||||||
std::string GC;
|
std::string GC;
|
||||||
|
|
||||||
if (ParseArgumentList(ArgList, isVarArg) ||
|
if (ParseArgumentList(ArgList, isVarArg, false) ||
|
||||||
ParseOptionalAttrs(FuncAttrs, 2) ||
|
ParseOptionalAttrs(FuncAttrs, 2) ||
|
||||||
(EatIfPresent(lltok::kw_section) &&
|
(EatIfPresent(lltok::kw_section) &&
|
||||||
ParseStringConstant(Section)) ||
|
ParseStringConstant(Section)) ||
|
||||||
|
@ -232,7 +232,7 @@ namespace llvm {
|
|||||||
: Loc(L), Type(Ty), Attrs(Attr), Name(N) {}
|
: Loc(L), Type(Ty), Attrs(Attr), Name(N) {}
|
||||||
};
|
};
|
||||||
bool ParseArgumentList(std::vector<ArgInfo> &ArgList,
|
bool ParseArgumentList(std::vector<ArgInfo> &ArgList,
|
||||||
bool &isVarArg);
|
bool &isVarArg, bool inType);
|
||||||
bool ParseFunctionHeader(Function *&Fn, bool isDefine);
|
bool ParseFunctionHeader(Function *&Fn, bool isDefine);
|
||||||
bool ParseFunctionBody(Function &Fn);
|
bool ParseFunctionBody(Function &Fn);
|
||||||
bool ParseBasicBlock(PerFunctionState &PFS);
|
bool ParseBasicBlock(PerFunctionState &PFS);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user