mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
Fix error in tablegen when either operand of !if is an empty list.
!if([Something], []) would error with "No type for list". llvm-svn: 210572
This commit is contained in:
parent
56f9d2e5d3
commit
a3dd1c8170
@ -787,7 +787,7 @@ Init *TGParser::ParseIDValue(Record *CurRec,
|
|||||||
///
|
///
|
||||||
/// Operation ::= XOperator ['<' Type '>'] '(' Args ')'
|
/// Operation ::= XOperator ['<' Type '>'] '(' Args ')'
|
||||||
///
|
///
|
||||||
Init *TGParser::ParseOperation(Record *CurRec) {
|
Init *TGParser::ParseOperation(Record *CurRec, RecTy *ItemType) {
|
||||||
switch (Lex.getCode()) {
|
switch (Lex.getCode()) {
|
||||||
default:
|
default:
|
||||||
TokError("unknown operation");
|
TokError("unknown operation");
|
||||||
@ -1026,8 +1026,9 @@ Init *TGParser::ParseOperation(Record *CurRec) {
|
|||||||
}
|
}
|
||||||
Lex.Lex(); // eat the ','
|
Lex.Lex(); // eat the ','
|
||||||
|
|
||||||
Init *MHS = ParseValue(CurRec);
|
Init *MHS = ParseValue(CurRec, ItemType);
|
||||||
if (!MHS) return nullptr;
|
if (!MHS)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
if (Lex.getCode() != tgtok::comma) {
|
if (Lex.getCode() != tgtok::comma) {
|
||||||
TokError("expected ',' in ternary operator");
|
TokError("expected ',' in ternary operator");
|
||||||
@ -1035,8 +1036,9 @@ Init *TGParser::ParseOperation(Record *CurRec) {
|
|||||||
}
|
}
|
||||||
Lex.Lex(); // eat the ','
|
Lex.Lex(); // eat the ','
|
||||||
|
|
||||||
Init *RHS = ParseValue(CurRec);
|
Init *RHS = ParseValue(CurRec, ItemType);
|
||||||
if (!RHS) return nullptr;
|
if (!RHS)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
if (Lex.getCode() != tgtok::r_paren) {
|
if (Lex.getCode() != tgtok::r_paren) {
|
||||||
TokError("expected ')' in binary operator");
|
TokError("expected ')' in binary operator");
|
||||||
@ -1446,7 +1448,7 @@ Init *TGParser::ParseSimpleValue(Record *CurRec, RecTy *ItemType,
|
|||||||
case tgtok::XIf:
|
case tgtok::XIf:
|
||||||
case tgtok::XForEach:
|
case tgtok::XForEach:
|
||||||
case tgtok::XSubst: { // Value ::= !ternop '(' Value ',' Value ',' Value ')'
|
case tgtok::XSubst: { // Value ::= !ternop '(' Value ',' Value ',' Value ')'
|
||||||
return ParseOperation(CurRec);
|
return ParseOperation(CurRec, ItemType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ private: // Parser methods.
|
|||||||
std::vector<unsigned> ParseRangeList();
|
std::vector<unsigned> ParseRangeList();
|
||||||
bool ParseRangePiece(std::vector<unsigned> &Ranges);
|
bool ParseRangePiece(std::vector<unsigned> &Ranges);
|
||||||
RecTy *ParseType();
|
RecTy *ParseType();
|
||||||
Init *ParseOperation(Record *CurRec);
|
Init *ParseOperation(Record *CurRec, RecTy *ItemType);
|
||||||
RecTy *ParseOperatorType();
|
RecTy *ParseOperatorType();
|
||||||
Init *ParseObjectName(MultiClass *CurMultiClass);
|
Init *ParseObjectName(MultiClass *CurMultiClass);
|
||||||
Record *ParseClassID();
|
Record *ParseClassID();
|
||||||
|
7
test/TableGen/if-empty-list-arg.td
Normal file
7
test/TableGen/if-empty-list-arg.td
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
// RUN: llvm-tblgen %s
|
||||||
|
// XFAIL: vg_leak
|
||||||
|
|
||||||
|
class C<bit cond> {
|
||||||
|
list<int> X = !if(cond, [1, 2, 3], []);
|
||||||
|
list<int> Y = !if(cond, [], [4, 5, 6]);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user