Have the integrated assembler give an error if $1 is used as an identifier in

an expression.  Currently this bug causes the line to be ignored in a
release build and an assert in a debug build.

rdar://13062484


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173195 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Kevin Enderby 2013-01-22 21:09:20 +00:00
parent bf6a77b987
commit 5de048ec30
2 changed files with 12 additions and 2 deletions

View File

@ -734,7 +734,9 @@ bool AsmParser::ParseBracketExpr(const MCExpr *&Res, SMLoc &EndLoc) {
/// primaryexpr ::= '.' /// primaryexpr ::= '.'
/// primaryexpr ::= ~,+,- primaryexpr /// primaryexpr ::= ~,+,- primaryexpr
bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) { bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
switch (Lexer.getKind()) { SMLoc FirstTokenLoc = getLexer().getLoc();
AsmToken::TokenKind FirstTokenKind = Lexer.getKind();
switch (FirstTokenKind) {
default: default:
return TokError("unknown token in expression"); return TokError("unknown token in expression");
// If we have an error assume that we've already handled it. // If we have an error assume that we've already handled it.
@ -750,8 +752,11 @@ bool AsmParser::ParsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) {
case AsmToken::String: case AsmToken::String:
case AsmToken::Identifier: { case AsmToken::Identifier: {
StringRef Identifier; StringRef Identifier;
if (ParseIdentifier(Identifier)) if (ParseIdentifier(Identifier)) {
if (FirstTokenKind == AsmToken::Dollar)
return Error(FirstTokenLoc, "invalid token in expression");
return true; return true;
}
EndLoc = SMLoc::getFromPointer(Identifier.end()); EndLoc = SMLoc::getFromPointer(Identifier.end());

View File

@ -0,0 +1,5 @@
// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s 2> %t.err > %t
// RUN: FileCheck --check-prefix=CHECK-ERROR < %t.err %s
.long $1
// CHECK-ERROR: 4:7: error: invalid token in expression