[llvm] r276748 - [ARM] Improve error messages for .arch_extension directive

Oliver Stannard via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 26 07:24:44 PDT 2016


Author: olista01
Date: Tue Jul 26 09:24:43 2016
New Revision: 276748

URL: http://llvm.org/viewvc/llvm-project?rev=276748&view=rev
Log:
[ARM] Improve error messages for .arch_extension directive

- More informative message when extension name is not an identifier token.
- Stop parsing directive if extension is unknown (avoid duplicate error
  messages).
- Report unsupported extensions with a source location, rather than
  report_fatal_error.

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


Added:
    llvm/trunk/test/MC/ARM/directive-arch_extension-unsupported.s
Modified:
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=276748&r1=276747&r2=276748&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Tue Jul 26 09:24:43 2016
@@ -10505,7 +10505,7 @@ bool ARMAsmParser::parseDirectiveArchExt
   MCAsmParser &Parser = getParser();
 
   if (getLexer().isNot(AsmToken::Identifier)) {
-    Error(getLexer().getLoc(), "unexpected token");
+    Error(getLexer().getLoc(), "expected architecture extension name");
     Parser.eatToEndOfStatement();
     return false;
   }
@@ -10520,15 +10520,19 @@ bool ARMAsmParser::parseDirectiveArchExt
     Name = Name.substr(2);
   }
   unsigned FeatureKind = ARM::parseArchExt(Name);
-  if (FeatureKind == ARM::AEK_INVALID)
+  if (FeatureKind == ARM::AEK_INVALID) {
     Error(ExtLoc, "unknown architectural extension: " + Name);
+    return false;
+  }
 
   for (const auto &Extension : Extensions) {
     if (Extension.Kind != FeatureKind)
       continue;
 
-    if (Extension.Features.none())
-      report_fatal_error("unsupported architectural extension: " + Name);
+    if (Extension.Features.none()) {
+      Error(ExtLoc, "unsupported architectural extension: " + Name);
+      return false;
+    }
 
     if ((getAvailableFeatures() & Extension.ArchCheck) != Extension.ArchCheck) {
       Error(ExtLoc, "architectural extension '" + Name + "' is not "

Added: llvm/trunk/test/MC/ARM/directive-arch_extension-unsupported.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/directive-arch_extension-unsupported.s?rev=276748&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/directive-arch_extension-unsupported.s (added)
+++ llvm/trunk/test/MC/ARM/directive-arch_extension-unsupported.s Tue Jul 26 09:24:43 2016
@@ -0,0 +1,25 @@
+@ RUN: not llvm-mc -triple armv7--none-eabi -filetype asm -o /dev/null 2>&1 %s | FileCheck %s
+
+	.arch_extension os
+CHECK: error: unsupported architectural extension: os
+
+	.arch_extension iwmmxt
+CHECK: error: unsupported architectural extension: iwmmxt
+
+	.arch_extension iwmmxt2
+CHECK: error: unsupported architectural extension: iwmmxt2
+
+	.arch_extension maverick
+CHECK: error: unsupported architectural extension: maverick
+
+	.arch_extension xscale
+CHECK: error: unsupported architectural extension: xscale
+
+	.arch_extension invalid_extension_name
+CHECK: error: unknown architectural extension: invalid_extension_name
+
+	.arch_extension 42
+CHECK: error: expected architecture extension name
+
+	.arch_extension
+CHECK: error: expected architecture extension name




More information about the llvm-commits mailing list