From 4fefc13b5e804509691cb6e0641b1790352c3293 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 26 Jan 2014 22:29:50 +0000 Subject: [PATCH] ARM: improve diagnostics for .word directive If a complex expression was passed to the .word directive and the first part of the directive failed to parse, a secondary diagnostic would be produced that would clutter the error diagnostics. Improve the diagnostics by consuming the remainder of the statement. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200160 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 4 +++- test/MC/ARM/directive-word-diagnostics.s | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 test/MC/ARM/directive-word-diagnostics.s diff --git a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 06f2b4ef2ef..4577fdee37e 100644 --- a/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -8093,8 +8093,10 @@ bool ARMAsmParser::parseDirectiveWord(unsigned Size, SMLoc L) { if (getLexer().isNot(AsmToken::EndOfStatement)) { for (;;) { const MCExpr *Value; - if (getParser().parseExpression(Value)) + if (getParser().parseExpression(Value)) { + Parser.eatToEndOfStatement(); return false; + } getParser().getStreamer().EmitValue(Value, Size); diff --git a/test/MC/ARM/directive-word-diagnostics.s b/test/MC/ARM/directive-word-diagnostics.s new file mode 100644 index 00000000000..e68595b7787 --- /dev/null +++ b/test/MC/ARM/directive-word-diagnostics.s @@ -0,0 +1,12 @@ +@ RUN: not llvm-mc -triple armv7-eabi -filetype asm -o /dev/null 2>&1 %s \ +@ RUN: | FileCheck %s + + .cpu armv7 + + .type double_diagnostics,%function +double_diagnostics: + .word invalid(invalid) + 32 + +@ CHECK: error: invalid variant 'invalid' +@ CHECK-NOT: error: unexpected token at start of statement +