diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index aafd68e9c38..3ef51e69ab7 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -3059,9 +3059,8 @@ bool AsmParser::parseDirectiveReloc(SMLoc DirectiveLoc) { return Error(ExprLoc, "expression must be relocatable"); } - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in .reloc directive")) - return true; + if (parseEOL()) + return true; const MCTargetAsmParser &MCT = getTargetParser(); const MCSubtargetInfo &STI = MCT.getSTI(); @@ -3513,11 +3512,7 @@ bool AsmParser::parseDirectiveLine() { (void)LineNumber; // FIXME: Do something with the .line. } - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '.line' directive")) - return true; - - return false; + return parseEOL(); } /// parseDirectiveLoc @@ -4355,8 +4350,7 @@ bool AsmParser::parseDirectiveCFIReturnColumn(SMLoc DirectiveLoc) { /// parseDirectiveCFISignalFrame /// ::= .cfi_signal_frame bool AsmParser::parseDirectiveCFISignalFrame() { - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '.cfi_signal_frame'")) + if (parseEOL()) return true; getStreamer().emitCFISignalFrame(); @@ -4667,15 +4661,14 @@ bool AsmParser::parseDirectiveEndMacro(StringRef Directive) { } /// parseDirectivePurgeMacro -/// ::= .purgem +/// ::= .purgem name bool AsmParser::parseDirectivePurgeMacro(SMLoc DirectiveLoc) { StringRef Name; SMLoc Loc; if (parseTokenLoc(Loc) || check(parseIdentifier(Name), Loc, "expected identifier in '.purgem' directive") || - parseToken(AsmToken::EndOfStatement, - "unexpected token in '.purgem' directive")) + parseEOL()) return true; if (!getContext().lookupMacro(Name)) @@ -4695,9 +4688,7 @@ bool AsmParser::parseDirectiveBundleAlignMode() { SMLoc ExprLoc = getLexer().getLoc(); int64_t AlignSizePow2; if (checkForValidSection() || parseAbsoluteExpression(AlignSizePow2) || - parseToken(AsmToken::EndOfStatement, "unexpected token after expression " - "in '.bundle_align_mode' " - "directive") || + parseEOL() || check(AlignSizePow2 < 0 || AlignSizePow2 > 30, ExprLoc, "invalid bundle alignment size (expected between 0 and 30)")) return true; @@ -4722,9 +4713,7 @@ bool AsmParser::parseDirectiveBundleLock() { if (!parseOptionalToken(AsmToken::EndOfStatement)) { if (check(parseIdentifier(Option), Loc, kInvalidOptionError) || - check(Option != "align_to_end", Loc, kInvalidOptionError) || - parseToken(AsmToken::EndOfStatement, - "unexpected token after '.bundle_lock' directive option")) + check(Option != "align_to_end", Loc, kInvalidOptionError) || parseEOL()) return true; AlignToEnd = true; } @@ -4799,11 +4788,7 @@ bool AsmParser::parseDirectiveDCB(StringRef IDVal, unsigned Size) { getStreamer().emitValue(Value, Size, ExprLoc); } - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '" + Twine(IDVal) + "' directive")) - return true; - - return false; + return parseEOL(); } /// parseDirectiveRealDCB @@ -4824,11 +4809,7 @@ bool AsmParser::parseDirectiveRealDCB(StringRef IDVal, const fltSemantics &Seman return true; APInt AsInt; - if (parseRealValue(Semantics, AsInt)) - return true; - - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '" + Twine(IDVal) + "' directive")) + if (parseRealValue(Semantics, AsInt) || parseEOL()) return true; for (uint64_t i = 0, e = NumValues; i != e; ++i) @@ -4843,7 +4824,8 @@ bool AsmParser::parseDirectiveRealDCB(StringRef IDVal, const fltSemantics &Seman bool AsmParser::parseDirectiveDS(StringRef IDVal, unsigned Size) { SMLoc NumValuesLoc = Lexer.getLoc(); int64_t NumValues; - if (checkForValidSection() || parseAbsoluteExpression(NumValues)) + if (checkForValidSection() || parseAbsoluteExpression(NumValues) || + parseEOL()) return true; if (NumValues < 0) { @@ -4851,10 +4833,6 @@ bool AsmParser::parseDirectiveDS(StringRef IDVal, unsigned Size) { return false; } - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '" + Twine(IDVal) + "' directive")) - return true; - for (uint64_t i = 0, e = NumValues; i != e; ++i) getStreamer().emitFill(Size, 0); @@ -5271,8 +5249,7 @@ bool AsmParser::parseDirectiveElse(SMLoc DirectiveLoc) { /// parseDirectiveEnd /// ::= .end bool AsmParser::parseDirectiveEnd(SMLoc DirectiveLoc) { - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '.end' directive")) + if (parseEOL()) return true; while (Lexer.isNot(AsmToken::Eof)) @@ -5325,8 +5302,7 @@ bool AsmParser::parseDirectiveWarning(SMLoc L) { Message = getTok().getStringContents(); Lex(); - if (parseToken(AsmToken::EndOfStatement, - "expected end of statement in '.warning' directive")) + if (parseEOL()) return true; } @@ -5598,9 +5574,7 @@ bool AsmParser::parseDirectiveRept(SMLoc DirectiveLoc, StringRef Dir) { return Error(CountLoc, "unexpected token in '" + Dir + "' directive"); } - if (check(Count < 0, CountLoc, "Count is negative") || - parseToken(AsmToken::EndOfStatement, - "unexpected token in '" + Dir + "' directive")) + if (check(Count < 0, CountLoc, "Count is negative") || parseEOL()) return true; // Lex the rept definition. @@ -5630,8 +5604,7 @@ bool AsmParser::parseDirectiveIrp(SMLoc DirectiveLoc) { if (check(parseIdentifier(Parameter.Name), "expected identifier in '.irp' directive") || parseToken(AsmToken::Comma, "expected comma in '.irp' directive") || - parseMacroArguments(nullptr, A) || - parseToken(AsmToken::EndOfStatement, "expected End of Statement")) + parseMacroArguments(nullptr, A) || parseEOL()) return true; // Lex the irp definition. @@ -5670,9 +5643,7 @@ bool AsmParser::parseDirectiveIrpc(SMLoc DirectiveLoc) { if (A.size() != 1 || A.front().size() != 1) return TokError("unexpected token in '.irpc' directive"); - - // Eat the end of statement. - if (parseToken(AsmToken::EndOfStatement, "expected end of statement")) + if (parseEOL()) return true; // Lex the irpc definition. @@ -5751,7 +5722,7 @@ bool AsmParser::parseDirectivePrint(SMLoc DirectiveLoc) { Lex(); if (StrTok.isNot(AsmToken::String) || StrTok.getString().front() != '"') return Error(DirectiveLoc, "expected double quoted string after .print"); - if (parseToken(AsmToken::EndOfStatement, "expected end of statement")) + if (parseEOL()) return true; llvm::outs() << StrTok.getStringContents() << '\n'; return false; @@ -5828,8 +5799,7 @@ bool AsmParser::parseDirectivePseudoProbe() { InlineStack.push_back(Site); } - if (parseToken(AsmToken::EndOfStatement, - "unexpected token in '.pseudoprobe' directive")) + if (parseEOL()) return true; getStreamer().emitPseudoProbe(Guid, Index, Type, Attr, InlineStack); diff --git a/test/MC/AsmParser/AArch64/directive-parse-err.s b/test/MC/AsmParser/AArch64/directive-parse-err.s index ca806f36ff9..5496da52fa9 100644 --- a/test/MC/AsmParser/AArch64/directive-parse-err.s +++ b/test/MC/AsmParser/AArch64/directive-parse-err.s @@ -149,13 +149,13 @@ .p2alignl 0 $ // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: .p2alignl 0 // EOL COMMENT - // CHECK: [[@LINE+1]]:8: error: unexpected token in '.line' directive + // CHECK: [[#@LINE+1]]:8: error: expected newline .line $ // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: .line // EOL COMMENT - // CHECK: [[@LINE+1]]:10: error: unexpected token in '.line' directive + // CHECK: [[#@LINE+1]]:10: error: expected newline .line 0 $ - // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: + // CHECK-NOT: [[#@LINE+1]]:{{[0-9]+}}: error: .line 0 // EOL COMMENT .file 1 "hello" @@ -175,9 +175,9 @@ // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: .cv_loc 1 1 // EOL COMMENT - // CHECK: [[@LINE+1]]:28: error: unexpected token after '.bundle_lock' directive option + // CHECK: [[#@LINE+1]]:28: error: expected newline .bundle_lock align_to_end $ - // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: + // CHECK-NOT: [[#@LINE+1]]:{{[0-9]+}}: error: .bundle_lock align_to_end // EOL COMMENT // CHECK: [[@LINE+1]]:11: error: invalid token in expression in directive @@ -237,9 +237,9 @@ .warning $ // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: .warning // EOL COMMENT - // CHECK: [[@LINE+1]]:21: error: expected end of statement in '.warning' directive + // CHECK: [[#@LINE+1]]:21: error: expected newline .warning "warning" $ - // CHECK-NOT: [[@LINE+1]]:{{[0-9]+}}: error: + // CHECK-NOT: [[#@LINE+1]]:{{[0-9]+}}: error: .warning "warning" // EOL COMMENT diff --git a/test/MC/AsmParser/directive_dcb.s b/test/MC/AsmParser/directive_dcb.s index 4445ccc76b4..b569cab22dd 100644 --- a/test/MC/AsmParser/directive_dcb.s +++ b/test/MC/AsmParser/directive_dcb.s @@ -1,5 +1,5 @@ -# RUN: not llvm-mc -triple i386-unknown-unknown %s | FileCheck %s -# RUN: not llvm-mc -triple i386-unknown-unknown %s 2>&1 > /dev/null| FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=i386 %s | FileCheck %s +# RUN: not llvm-mc -triple=i386 --defsym ERR=1 %s 2>&1 > /dev/null | FileCheck %s --check-prefix=ERR # CHECK: TEST0: # CHECK: .byte 1 @@ -42,18 +42,16 @@ TEST5: TEST6: .dcb.d 5, .232 -# CHECK-ERROR: error: .dcb.x not currently supported for this target -TEST7: - .dcb.x 3, 1.2e3 +.ifdef ERR +# ERR: :[[#@LINE+1]]:8: error: .dcb.x not currently supported for this target +.dcb.x 3, 1.2e3 -# CHECK-ERROR: warning: '.dcb' directive with negative repeat count has no effect -TEST8: - .dcb -1, 2 +# ERR: :[[#@LINE+1]]:6: warning: '.dcb' directive with negative repeat count has no effect +.dcb -1, 2 -# CHECK-ERROR: error: unexpected token in '.dcb' directive -TEST9: - .dcb 1 2 +# ERR: :[[#@LINE+1]]:8: error: unexpected token in '.dcb' directive +.dcb 1 2 -# CHECK-ERROR: error: unexpected token in '.dcb' directive -TEST10: - .dcb 1, 2 3 +# ERR: :[[#@LINE+1]]:11: error: expected newline +.dcb 1, 2 3 +.endif diff --git a/test/MC/AsmParser/directive_ds.s b/test/MC/AsmParser/directive_ds.s index ba61fbaa387..ea66f019e53 100644 --- a/test/MC/AsmParser/directive_ds.s +++ b/test/MC/AsmParser/directive_ds.s @@ -53,6 +53,6 @@ TEST7: TEST8: .ds -1 -# CHECK-ERROR: error: unexpected token in '.ds' directive +# CHECK-ERROR: :[[#@LINE+2]]:9: error: expected newline TEST9: - .ds 1 2 + .ds 1 2 diff --git a/test/MC/AsmParser/directive_print.s b/test/MC/AsmParser/directive_print.s index 9d228440885..463a05ff70a 100644 --- a/test/MC/AsmParser/directive_print.s +++ b/test/MC/AsmParser/directive_print.s @@ -1,5 +1,5 @@ -# RUN: not llvm-mc -triple i386-linux-gnu %s 2> %t.err | FileCheck %s -# RUN: FileCheck < %t.err %s --check-prefix=CHECK-ERR +# RUN: llvm-mc -triple i386 %s | FileCheck %s +# RUN: not llvm-mc -triple i386 --defsym ERR=1 %s 2>&1 | FileCheck %s --check-prefix=ERR T1: # CHECK: e @@ -7,12 +7,12 @@ T1: .print "e" .print "2.718281828459045235" -T2: -# CHECK-ERR: expected double quoted string after .print +.ifdef ERR +# CHECK-ERR: :[[#@LINE+2]]:8: expected double quoted string after .print .altmacro .print .noaltmacro -T3: -# CHECK-ERR: expected end of statement +# ERR: :[[#@LINE+1]]:12: error: expected newline .print "a" "misplaced-string" +.endif diff --git a/test/MC/AsmParser/directive_rept-diagnostics.s b/test/MC/AsmParser/directive_rept-diagnostics.s index cbef1586900..40c355514a0 100644 --- a/test/MC/AsmParser/directive_rept-diagnostics.s +++ b/test/MC/AsmParser/directive_rept-diagnostics.s @@ -35,7 +35,7 @@ negative: trailer: .rep 0 trailer -# CHECK: error: unexpected token in '.rep' directive +# CHECK: :[[#@LINE-2]]:9: error: expected newline # CHECK: .rep 0 trailer # CHECK: ^