[lld] 11b7625 - [lld/mac] Implement basic typo correction for flags

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 24 08:34:07 PST 2020


Author: Nico Weber
Date: 2020-11-24T11:33:39-05:00
New Revision: 11b76258331659daa57e15fe86c1f1234267a78d

URL: https://github.com/llvm/llvm-project/commit/11b76258331659daa57e15fe86c1f1234267a78d
DIFF: https://github.com/llvm/llvm-project/commit/11b76258331659daa57e15fe86c1f1234267a78d.diff

LOG: [lld/mac] Implement basic typo correction for flags

Also use "unknown flag 'flag'" instead of "unknown flag: flag" for
consistency with the other ports.

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

Added: 
    lld/test/MachO/driver.test

Modified: 
    lld/COFF/DriverUtils.cpp
    lld/ELF/DriverUtils.cpp
    lld/MachO/DriverUtils.cpp
    lld/test/MachO/color-diagnostics.test
    lld/test/MachO/silent-ignore.test

Removed: 
    


################################################################################
diff  --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp
index 7de73f2cfe49..f289e66dc6d5 100644
--- a/lld/COFF/DriverUtils.cpp
+++ b/lld/COFF/DriverUtils.cpp
@@ -852,7 +852,7 @@ opt::InputArgList ArgParser::parse(ArrayRef<const char *> argv) {
 
   handleColorDiagnostics(args);
 
-  for (auto *arg : args.filtered(OPT_UNKNOWN)) {
+  for (opt::Arg *arg : args.filtered(OPT_UNKNOWN)) {
     std::string nearest;
     if (optTable.findNearest(arg->getAsString(args), nearest) > 1)
       warn("ignoring unknown argument '" + arg->getAsString(args) + "'");

diff  --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp
index 03173565e578..8ce9853c57af 100644
--- a/lld/ELF/DriverUtils.cpp
+++ b/lld/ELF/DriverUtils.cpp
@@ -133,7 +133,7 @@ opt::InputArgList ELFOptTable::parse(ArrayRef<const char *> argv) {
   if (missingCount)
     error(Twine(args.getArgString(missingIndex)) + ": missing argument");
 
-  for (auto *arg : args.filtered(OPT_UNKNOWN)) {
+  for (opt::Arg *arg : args.filtered(OPT_UNKNOWN)) {
     std::string nearest;
     if (findNearest(arg->getAsString(args), nearest) > 1)
       error("unknown argument '" + arg->getAsString(args) + "'");

diff  --git a/lld/MachO/DriverUtils.cpp b/lld/MachO/DriverUtils.cpp
index 3899348666b4..0322c20fcb69 100644
--- a/lld/MachO/DriverUtils.cpp
+++ b/lld/MachO/DriverUtils.cpp
@@ -75,8 +75,14 @@ opt::InputArgList MachOOptTable::parse(ArrayRef<const char *> argv) {
 
   handleColorDiagnostics(args);
 
-  for (opt::Arg *arg : args.filtered(OPT_UNKNOWN))
-    error("unknown argument: " + arg->getSpelling());
+  for (opt::Arg *arg : args.filtered(OPT_UNKNOWN)) {
+    std::string nearest;
+    if (findNearest(arg->getAsString(args), nearest) > 1)
+      error("unknown argument '" + arg->getAsString(args) + "'");
+    else
+      error("unknown argument '" + arg->getAsString(args) +
+            "', did you mean '" + nearest + "'");
+  }
   return args;
 }
 

diff  --git a/lld/test/MachO/color-diagnostics.test b/lld/test/MachO/color-diagnostics.test
index 3bf757b7b715..b3c496f3b32d 100644
--- a/lld/test/MachO/color-diagnostics.test
+++ b/lld/test/MachO/color-diagnostics.test
@@ -6,7 +6,7 @@
 # RUN: not %lld -xyz --color-diagnostics=always /nosuchfile 2>&1 \
 # RUN:   | FileCheck -check-prefix=COLOR %s
 
-# COLOR: {{lld: .\[0;31merror: .\[0munknown argument: -xyz}}
+# COLOR: {{lld: .\[0;31merror: .\[0munknown argument '-xyz'}}
 # COLOR: {{lld: .\[0;31merror: .\[0mcannot open /nosuchfile}}
 
 # RUN: not %lld --color-diagnostics=foobar 2>&1 | FileCheck -check-prefix=ERR %s

diff  --git a/lld/test/MachO/driver.test b/lld/test/MachO/driver.test
new file mode 100644
index 000000000000..229ec3ef6963
--- /dev/null
+++ b/lld/test/MachO/driver.test
@@ -0,0 +1,5 @@
+# RUN: not %lld ---help 2>&1 | FileCheck -check-prefix=SPELLHELP %s
+
+SPELLHELP: error: unknown argument '---help', did you mean '--help'
+# FIXME: This should say "no input files" instead
+SPELLHELP: error: undefined symbol: _main

diff  --git a/lld/test/MachO/silent-ignore.test b/lld/test/MachO/silent-ignore.test
index cac66606b0bf..2d1174835728 100644
--- a/lld/test/MachO/silent-ignore.test
+++ b/lld/test/MachO/silent-ignore.test
@@ -9,4 +9,4 @@ RUN:   -objc_abi_version 2 \
 RUN:   -ios_simulator_version_min 9.0.0 \
 RUN:   -sdk_version 13.2
 RUN: not %lld -v --not-an-ignored-argument 2>&1 | FileCheck %s
-CHECK: error: unknown argument: --not-an-ignored-argument
+CHECK: error: unknown argument '--not-an-ignored-argument'


        


More information about the llvm-commits mailing list