[llvm-commits] [llvm] r125595 - in /llvm/trunk: lib/MC/MCParser/AsmParser.cpp test/MC/AsmParser/exprs.s test/MC/AsmParser/paren.s

Roman Divacky rdivacky at freebsd.org
Tue Feb 15 12:43:39 PST 2011


Author: rdivacky
Date: Tue Feb 15 14:43:39 2011
New Revision: 125595

URL: http://llvm.org/viewvc/llvm-project?rev=125595&view=rev
Log:
Add support for parsing [expr].

This is submitted by Joerg Sonnenberger and fixes his PR8685.


Added:
    llvm/trunk/test/MC/AsmParser/paren.s
Modified:
    llvm/trunk/lib/MC/MCParser/AsmParser.cpp
    llvm/trunk/test/MC/AsmParser/exprs.s

Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=125595&r1=125594&r2=125595&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Tue Feb 15 14:43:39 2011
@@ -173,6 +173,7 @@
   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 @@
   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 @@
   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))

Modified: llvm/trunk/test/MC/AsmParser/exprs.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/exprs.s?rev=125595&r1=125594&r2=125595&view=diff
==============================================================================
--- llvm/trunk/test/MC/AsmParser/exprs.s (original)
+++ llvm/trunk/test/MC/AsmParser/exprs.s Tue Feb 15 14:43:39 2011
@@ -35,6 +35,8 @@
         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

Added: llvm/trunk/test/MC/AsmParser/paren.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/paren.s?rev=125595&view=auto
==============================================================================
--- llvm/trunk/test/MC/AsmParser/paren.s (added)
+++ llvm/trunk/test/MC/AsmParser/paren.s Tue Feb 15 14:43:39 2011
@@ -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]





More information about the llvm-commits mailing list