forked from OSchip/llvm-project
Add support for parsing [expr].
This is submitted by Joerg Sonnenberger and fixes his PR8685. llvm-svn: 125595
This commit is contained in:
parent
8003924d10
commit
4e0f4957bc
|
@ -173,6 +173,7 @@ private:
|
|||
bool ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc);
|
||||
bool ParseBinOpRHS(unsigned Precedence, const MCExpr *&Res, SMLoc &EndLoc);
|
||||
bool ParseParenExpr(const MCExpr *&Res, SMLoc &EndLoc);
|
||||
bool ParseBracketExpr(const MCExpr *&Res, SMLoc &EndLoc);
|
||||
|
||||
/// ParseIdentifier - Parse an identifier or string (as a quoted identifier)
|
||||
/// and set \arg Res to the identifier contents.
|
||||
|
@ -492,6 +493,20 @@ bool AsmParser::ParseParenExpr(const MCExpr *&Res, SMLoc &EndLoc) {
|
|||
return false;
|
||||
}
|
||||
|
||||
/// ParseBracketExpr - Parse a bracket expression and return it.
|
||||
/// NOTE: This assumes the leading '[' has already been consumed.
|
||||
///
|
||||
/// bracketexpr ::= expr]
|
||||
///
|
||||
bool AsmParser::ParseBracketExpr(const MCExpr *&Res, SMLoc &EndLoc) {
|
||||
if (ParseExpression(Res)) return true;
|
||||
if (Lexer.isNot(AsmToken::RBrac))
|
||||
return TokError("expected ']' in brackets expression");
|
||||
EndLoc = Lexer.getLoc();
|
||||
Lex();
|
||||
return false;
|
||||
}
|
||||
|
||||
/// ParsePrimaryExpr - Parse a primary expression and return it.
|
||||
/// primaryexpr ::= (parenexpr
|
||||
/// primaryexpr ::= symbol
|
||||
|
@ -587,6 +602,9 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
|
|||
case AsmToken::LParen:
|
||||
Lex(); // Eat the '('.
|
||||
return ParseParenExpr(Res, EndLoc);
|
||||
case AsmToken::LBrac:
|
||||
Lex(); // Eat the '['.
|
||||
return ParseBracketExpr(Res, EndLoc);
|
||||
case AsmToken::Minus:
|
||||
Lex(); // Eat the operator.
|
||||
if (ParsePrimaryExpr(Res, EndLoc))
|
||||
|
|
|
@ -35,6 +35,8 @@ k:
|
|||
check_expr 1 << 1, 2
|
||||
check_expr 2 >> 1, 1
|
||||
check_expr (~0 >> 1), -1
|
||||
check_expr [~0 >> 1], -1
|
||||
check_expr 4 * [4 + (3 + [2 * 2] + 1)], 48
|
||||
check_expr 3 - 2, 1
|
||||
check_expr 1 ^ 3, 2
|
||||
check_expr 1 && 2, 1
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// RUN: not llvm-mc -triple i386-unknown-unknown %s 2> %t1 > %t2
|
||||
// RUN: FileCheck < %t1 %s
|
||||
|
||||
// CHECK: error: expected ']' in brackets expression
|
||||
.size x, [.-x)
|
||||
|
||||
// CHECK: error: expected ')' in parentheses expression
|
||||
.size y, (.-y]
|
Loading…
Reference in New Issue