diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -2855,10 +2855,11 @@ AsmToken Buf[1]; Lexer.peekTokens(Buf, false); - if (Buf[0].isNot(AsmToken::Identifier)) + if (Buf[0].isNot(AsmToken::Identifier) && Buf[0].isNot(AsmToken::Integer)) return true; - // We have a '$' or '@' followed by an identifier, make sure they are adjacent. + // We have a '$' or '@' followed by an identifier or integer token, make + // sure they are adjacent. if (PrefixLoc.getPointer() + 1 != Buf[0].getLoc().getPointer()) return true; @@ -2866,7 +2867,7 @@ Lexer.Lex(); // Lexer's Lex guarantees consecutive token. // Construct the joined identifier and consume the token. Res = - StringRef(PrefixLoc.getPointer(), getTok().getIdentifier().size() + 1); + StringRef(PrefixLoc.getPointer(), getTok().getString().size() + 1); Lex(); // Parser Lex to maintain invariants. return false; } diff --git a/llvm/test/MC/ARM/arm-branches.s b/llvm/test/MC/ARM/arm-branches.s --- a/llvm/test/MC/ARM/arm-branches.s +++ b/llvm/test/MC/ARM/arm-branches.s @@ -19,17 +19,22 @@ @------------------------------------------------------------------------------ .global $foo + .global $4 b $foo bl $foo beq $foo blx $foo b $foo + 4 + bl $4 + beq $4 + 4 @ CHECK: b ($foo) @ encoding: [A,A,A,0xea] @ CHECK: bl ($foo) @ encoding: [A,A,A,0xeb] @ CHECK: beq ($foo) @ encoding: [A,A,A,0x0a] @ CHECK: blx ($foo) @ encoding: [A,A,A,0xfa] @ CHECK: b #($foo)+4 @ encoding: [A,A,A,0xea] +@ CHECK: bl ($4) @ encoding: [A,A,A,0xeb] +@ CHECK: beq #($4)+4 @ encoding: [A,A,A,0x0a] @------------------------------------------------------------------------------ @ Leading '$' should be allowed to introduce an expression diff --git a/llvm/test/MC/MachO/bad-dollar.s b/llvm/test/MC/MachO/bad-dollar.s deleted file mode 100644 --- a/llvm/test/MC/MachO/bad-dollar.s +++ /dev/null @@ -1,5 +0,0 @@ -// 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 diff --git a/llvm/test/MC/MachO/dollar-identifier.s b/llvm/test/MC/MachO/dollar-identifier.s new file mode 100644 --- /dev/null +++ b/llvm/test/MC/MachO/dollar-identifier.s @@ -0,0 +1,4 @@ +// RUN: llvm-mc -triple x86_64-apple-darwin10 %s | FileCheck %s + +.long $1 +// CHECK: .long ($1) diff --git a/llvm/test/MC/Mips/cpsetup-bad.s b/llvm/test/MC/Mips/cpsetup-bad.s --- a/llvm/test/MC/Mips/cpsetup-bad.s +++ b/llvm/test/MC/Mips/cpsetup-bad.s @@ -12,8 +12,6 @@ # ASM: :[[@LINE-1]]:23: error: expected save register or stack offset .cpsetup $31, $32, __cerror # ASM: :[[@LINE-1]]:23: error: invalid register - .cpsetup $25, $2, $3 -# ASM: :[[@LINE-1]]:27: error: expected expression .cpsetup $25, $2, 4 # ASM: :[[@LINE-1]]:28: error: expected symbol .cpsetup $25, $2, 4+65 diff --git a/llvm/test/MC/Mips/invalid-instructions-spellcheck.s b/llvm/test/MC/Mips/invalid-instructions-spellcheck.s --- a/llvm/test/MC/Mips/invalid-instructions-spellcheck.s +++ b/llvm/test/MC/Mips/invalid-instructions-spellcheck.s @@ -13,7 +13,7 @@ $2, $1, $25 -# ALL: error: unexpected token at start of statement +# ALL: error: unknown instruction # ALL-NEXT: $2, $1, $25 # ALL-NEXT: ^