mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-02 16:36:40 +00:00
[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:
parent
595bf62c6c
commit
3bc0a0e24a
@ -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
@ -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: ^
|
||||
|
||||
|
170
test/MC/ARM/directive_parsing.s
Normal file
170
test/MC/ARM/directive_parsing.s
Normal 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
|
Loading…
Reference in New Issue
Block a user