<div dir="ltr">Idle question:<div><br></div><div>Would it be reasonable to require the location in the parsers rather than an optional? Make users that don't want a location to think about it and explicitly pass an unknown location?</div><div><br></div><div>-eric<br><br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 16, 2015 at 8:25 AM Oliver Stannard via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: olista01<br>
Date: Mon Nov 16 10:22:47 2015<br>
New Revision: 253219<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253219&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253219&view=rev</a><br>
Log:<br>
[ARM,AArch64] Store source location for values in assembly files<br>
<br>
The MCValue class can store a SMLoc to allow better error messages to be<br>
emitted if an error is detected after parsing. The ARM and AArch64 assembly<br>
parsers were not setting this, so error messages did not have source<br>
information.<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D14645" rel="noreferrer" target="_blank">http://reviews.llvm.org/D14645</a><br>
<br>
<br>
Added:<br>
    llvm/trunk/test/MC/AArch64/error-location.s<br>
    llvm/trunk/test/MC/ARM/error-location.s<br>
Modified:<br>
    llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp<br>
    llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp<br>
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp<br>
    llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp?rev=253219&r1=253218&r2=253219&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp?rev=253219&r1=253218&r2=253219&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp Mon Nov 16 10:22:47 2015<br>
@@ -4131,7 +4131,7 @@ bool AArch64AsmParser::parseDirectiveWor<br>
       if (getParser().parseExpression(Value))<br>
         return true;<br>
<br>
-      getParser().getStreamer().EmitValue(Value, Size);<br>
+      getParser().getStreamer().EmitValue(Value, Size, L);<br>
<br>
       if (getLexer().is(AsmToken::EndOfStatement))<br>
         break;<br>
<br>
Modified: llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp?rev=253219&r1=253218&r2=253219&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp?rev=253219&r1=253218&r2=253219&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp (original)<br>
+++ llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64ELFStreamer.cpp Mon Nov 16 10:22:47 2015<br>
@@ -130,7 +130,7 @@ public:<br>
   /// if necessary.<br>
   void EmitValueImpl(const MCExpr *Value, unsigned Size, SMLoc Loc) override {<br>
     EmitDataMappingSymbol();<br>
-    MCELFStreamer::EmitValueImpl(Value, Size);<br>
+    MCELFStreamer::EmitValueImpl(Value, Size, Loc);<br>
   }<br>
<br>
 private:<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=253219&r1=253218&r2=253219&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=253219&r1=253218&r2=253219&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Mon Nov 16 10:22:47 2015<br>
@@ -8801,7 +8801,7 @@ bool ARMAsmParser::parseLiteralValues(un<br>
         return false;<br>
       }<br>
<br>
-      getParser().getStreamer().EmitValue(Value, Size);<br>
+      getParser().getStreamer().EmitValue(Value, Size, L);<br>
<br>
       if (getLexer().is(AsmToken::EndOfStatement))<br>
         break;<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp?rev=253219&r1=253218&r2=253219&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp?rev=253219&r1=253218&r2=253219&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp Mon Nov 16 10:22:47 2015<br>
@@ -513,7 +513,7 @@ public:<br>
         getContext().reportFatalError(Loc, "relocated expression must be 32-bit");<br>
<br>
     EmitDataMappingSymbol();<br>
-    MCELFStreamer::EmitValueImpl(Value, Size);<br>
+    MCELFStreamer::EmitValueImpl(Value, Size, Loc);<br>
   }<br>
<br>
   void EmitAssemblerFlag(MCAssemblerFlag Flag) override {<br>
<br>
Added: llvm/trunk/test/MC/AArch64/error-location.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/error-location.s?rev=253219&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/error-location.s?rev=253219&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/MC/AArch64/error-location.s (added)<br>
+++ llvm/trunk/test/MC/AArch64/error-location.s Mon Nov 16 10:22:47 2015<br>
@@ -0,0 +1,5 @@<br>
+// RUN: not llvm-mc -triple aarch64--none-eabi -filetype obj < %s -o /dev/null 2>&1 | FileCheck %s<br>
+<br>
+  .text<br>
+// CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: symbol 'undef' can not be undefined in a subtraction expression<br>
+  .word (0-undef)<br>
<br>
Added: llvm/trunk/test/MC/ARM/error-location.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/error-location.s?rev=253219&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/error-location.s?rev=253219&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/MC/ARM/error-location.s (added)<br>
+++ llvm/trunk/test/MC/ARM/error-location.s Mon Nov 16 10:22:47 2015<br>
@@ -0,0 +1,5 @@<br>
+@ RUN: not llvm-mc -triple armv7a--none-eabi -filetype obj < %s -o /dev/null 2>&1 | FileCheck %s<br>
+<br>
+  .text<br>
+@ CHECK: :[[@LINE+1]]:{{[0-9]+}}: error: symbol 'undef' can not be undefined in a subtraction expression<br>
+  .word (0-undef)<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div>