[ARM][MC] Cleanup ARM Target Assembly Parser

Summary:
Correctly parse end-of-statement tokens and handle preprocessor
end-of-line comments in ARM assembly processor.

Reviewers: rnk, majnemer

Subscribers: aemerson, rengolin, llvm-commits

Differential Revision: https://reviews.llvm.org/D26152

llvm-svn: 285830
This commit is contained in:
Nirav Dave 2016-11-02 16:22:51 +00:00
parent 595bf62c6c
commit 3bc0a0e24a
4 changed files with 536 additions and 542 deletions

View File

@ -80,10 +80,31 @@ public:
const AsmToken &Lex() { return getParser().Lex(); }
const AsmToken &getTok() { return getParser().getTok(); }
bool parseToken(AsmToken::TokenKind T, const Twine &Msg) {
bool parseToken(AsmToken::TokenKind T,
const Twine &Msg = "unexpected token") {
return getParser().parseToken(T, Msg);
}
bool parseMany(std::function<bool()> parseOne, bool hasComma = true) {
return getParser().parseMany(parseOne, hasComma);
}
bool parseOptionalToken(AsmToken::TokenKind T) {
return getParser().parseOptionalToken(T);
}
bool check(bool P, const llvm::Twine &Msg) {
return getParser().check(P, Msg);
}
bool check(bool P, SMLoc Loc, const llvm::Twine &Msg) {
return getParser().check(P, Loc, Msg);
}
bool addErrorSuffix(const Twine &Suffix) {
return getParser().addErrorSuffix(Suffix);
}
bool HasBracketExpressions() const { return BracketExpressionsSupported; }
/// @}

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@ no_suffix:
suffix:
bx lr
// CHECK-EABI: error: unexpected token in directive
// CHECK-EABI: error: unexpected token in '.thumb_func' directive
// CHECK-EABI: .thumb_func suffix
// CHECK-EABI: ^

View File

@ -0,0 +1,170 @@
// RUN: not llvm-mc -triple armv7--none-eabi %s 2>&1 | FileCheck %s
// RUN: not llvm-mc -triple armv7--none-eabi %s 2>&1 | grep "error:" | count 33
// CHECK: [[@LINE+1]]:10: error: unexpected token
.word 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.word 0 # EOL COMMENT
// CHECK: [[@LINE+1]]:11: error: unexpected token
.short 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.short 0 # EOL COMMENT
// CHECK: [[@LINE+1]]:11: error: unexpected token
.hword 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.hword 0 # EOL COMMENT
.arch armv7-a
// CHECK: [[@LINE+1]]:9: error: unexpected token in directive
.thumb $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.thumb # EOL COMMENT
// CHECK: [[@LINE+1]]:7: error: unexpected token in directive
.arm $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.arm # EOL COMMENT
// CHECK: [[@LINE+1]]:14: error: unexpected token in '.thumb_func' directive
.thumb_func $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.thumb_func # EOL COMMENT
// CHECK: [[@LINE+1]]:11: error: unexpected token in directive
.code 16 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.code 16 # EOL COMMENTS
// CHECK: [[@LINE+1]]:18: error: unexpected token in directive
.syntax unified $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.syntax unified # EOL COMMENT
fred .req r5
// CHECK: [[@LINE+1]]:14: error: unexpected input in '.unreq' directive
.unreq fred $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.unreq fred # EOL COMMENTS
// CHECK: [[@LINE+1]]:18: error: unexpected token in '.fnstart' directive
.fnstart $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.fnstart # EOL COMMENT
// CHECK: [[@LINE+1]]:23: error: unexpected token in '.cantunwind' directive
.cantunwind $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.cantunwind # EOL COMMENT
// CHECK: [[@LINE+1]]:18: error: unexpected token in '.fnend' directive
.fnend $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.fnend # EOL COMMENT
.fnstart
// CHECK: [[@LINE+1]]:43: error: unexpected token in '.personality' directive
.personality __gxx_personality_v0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.personality __gxx_personality_v0 # EOL COMMENET
// CHECK: [[@LINE+1]]:28: error: unexpected token
.setfp fp, sp, #0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.setfp fp, sp, #0 # EOL COMMENT
// CHECK: [[@LINE+1]]:17: error: unexpected token in '.pad' directive
.pad #0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.pad #0 # EOL COMMENT
// CHECK: [[@LINE+1]]:20: error: unexpected token in directive
.save {r0} $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.save {r0} # EOL COMMENT
// CHECK: [[@LINE+1]]:21: error: unexpected token in directive
.vsave {d0} $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.vsave {d0} # EOL COMMENT
// CHECK: [[@LINE+1]]:22: error: unexpected token in '.handlerdata' directive
.handlerdata $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.handlerdata # EOL COMMENT
.fnend
// CHECK: [[@LINE+1]]:9: error: unexpected token in directive
.ltorg $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.ltorg # EOL COMMENT
// CHECK: [[@LINE+1]]:8: error: unexpected token in directive
.pool $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.pool # EOL COMMENT
// CHECK: [[@LINE+1]]:8: error: unexpected token in directive
.even $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.even # EOL COMMENT
.fnstart
// CHECK: [[@LINE+1]]:22: error: unexpected token in '.personalityindex' directive
.personalityindex 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.personalityindex 0 # EOL COMMENT
.fnend
.fnstart
// CHECK: [[@LINE+1]]:19: error: unexpected token
.unwind_raw 0, 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.unwind_raw 0, 0 # EOL COMMENT
// CHECK: [[@LINE+1]]:12: error: unexpected token in '.movsp' directive
.movsp r0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.movsp r1 # EOL COMMENT
.fnend
// CHECK: [[@LINE+1]]:21: error: unexpected token in '.arch_extension' directive
.arch_extension mp $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.arch_extension mp # EOL COMMENT
// CHECK: [[@LINE+1]]:21: error: unexpected token in '.arch_extension' directive
.arch_extension mp $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.arch_extension mp # EOL COMMENT
.type arm_func,%function
arm_func:
nop
// CHECK: [[@LINE+1]]:45: error: unexpected token
.thumb_set alias_arm_func, arm_func $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.thumb_set alias_arm_func, arm_func # EOL COMMENT
// CHECK: [[@LINE+1]]:23: error: unexpected token in '.eabi_attribute' directive
.eabi_attribute 0, 0 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.eabi_attribute 0, 0 # EOL COMMENT
.arm
// CHECK: [[@LINE+1]]:10: error: unexpected token
.inst 2 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.inst 2 # EOL COMMENT
.thumb
// CHECK: [[@LINE+1]]:12: error: unexpected token
.inst.n 2 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.inst.n 2 # EOL COMMENT
// CHECK: [[@LINE+1]]:12: error: unexpected token
.inst.w 4 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.inst.w 4 # EOL COMMENT
// CHECK: [[@LINE+1]]:21: error: unexpected token
.object_arch armv7 $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.object_arch armv7 # EOL COMMENT
// CHECK: [[@LINE+1]]:23: error: unexpected token in '.tlsdescseq' directive
.tlsdescseq variable $
// CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error:
.tlsdescseq variable # EOL COMMENT