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

Jim Grosbach grosbach at apple.com
Tue Feb 15 18:02:10 PST 2011


Shouldn't something like this, at minimum, be predicated on a target enabling it? I doubt this is something all assembly variants want.

For example, on x86 does Intel vs ATT syntax change whether this is supported? What about other targets? Do they want this enabled at all? Square brackets often have special meaning (memory references being the most common) and this could very easily complicate that.

-Jim

On Feb 15, 2011, at 12:43 PM, Roman Divacky wrote:

> 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]
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list