Skip to content

Commit 54743d5

Browse files
committedMay 7, 2019
Add typo correction for command-line flags to ELF and COFF lld drivers
For lld-link, unknown '/'-style flags are treated as filenames on POSIX systems, so only '-'-style flags get typo correction for now. This matches clang-cl. PR37006. Differential Revision: https://reviews.llvm.org/D61443 llvm-svn: 360145
1 parent b4f028f commit 54743d5

File tree

8 files changed

+34
-11
lines changed

8 files changed

+34
-11
lines changed
 

‎lld/COFF/DriverUtils.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -858,8 +858,14 @@ opt::InputArgList ArgParser::parse(ArrayRef<const char *> Argv) {
858858

859859
handleColorDiagnostics(Args);
860860

861-
for (auto *Arg : Args.filtered(OPT_UNKNOWN))
862-
warn("ignoring unknown argument: " + Arg->getSpelling());
861+
for (auto *Arg : Args.filtered(OPT_UNKNOWN)) {
862+
std::string Nearest;
863+
if (Table.findNearest(Arg->getAsString(Args), Nearest) > 1)
864+
warn("ignoring unknown argument '" + Arg->getSpelling() + "'");
865+
else
866+
warn("ignoring unknown argument '" + Arg->getSpelling() +
867+
"', did you mean '" + Nearest + "'");
868+
}
863869

864870
if (Args.hasArg(OPT_lib))
865871
warn("ignoring /lib since it's not the first argument");

‎lld/ELF/DriverUtils.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,14 @@ opt::InputArgList ELFOptTable::parse(ArrayRef<const char *> Argv) {
132132
if (MissingCount)
133133
error(Twine(Args.getArgString(MissingIndex)) + ": missing argument");
134134

135-
for (auto *Arg : Args.filtered(OPT_UNKNOWN))
136-
error("unknown argument: " + Arg->getSpelling());
135+
for (auto *Arg : Args.filtered(OPT_UNKNOWN)) {
136+
std::string Nearest;
137+
if (findNearest(Arg->getAsString(Args), Nearest) > 1)
138+
error("unknown argument '" + Arg->getSpelling() + "'");
139+
else
140+
error("unknown argument '" + Arg->getSpelling() + "', did you mean '" +
141+
Nearest + "'");
142+
}
137143
return Args;
138144
}
139145

‎lld/test/COFF/color-diagnostics.test

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# RUN: not lld-link -xyz --color-diagnostics=always /nosuchfile 2>&1 \
77
# RUN: | FileCheck -check-prefix=COLOR %s
88

9-
# COLOR: {{lld-link: .\[0;1;35mwarning: .\[0mignoring unknown argument: -xyz}}
9+
# COLOR: {{lld-link: .\[0;1;35mwarning: .\[0mignoring unknown argument '-xyz'}}
1010
# COLOR: {{lld-link: .\[0;1;31merror: .\[0mcould not open /nosuchfile}}
1111

1212
# RUN: not lld-link /nosuchfile 2>&1 | FileCheck -check-prefix=NOCOLOR %s

‎lld/test/COFF/driver.test

+8
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,11 @@ LIBBAD: ignoring /lib since it's not the first argument
1919
# RUN: yaml2obj < %p/Inputs/hello32.yaml > %t.obj
2020
# RUN: not lld-link /out:/ %t.obj 2>&1 | FileCheck -check-prefix=DIR %s
2121
DIR: cannot open output file
22+
23+
# RUN: not lld-link -version 2>&1 | FileCheck -check-prefix=SPELLVERSION %s
24+
SPELLVERSION: ignoring unknown argument '-version', did you mean '--version'
25+
SPELLVERSION: no input files
26+
27+
# RUN: not lld-link -nodefaultlibs 2>&1 | FileCheck -check-prefix=SPELLNODEFAULTLIB %s
28+
SPELLNODEFAULTLIB: ignoring unknown argument '-nodefaultlibs', did you mean '-nodefaultlib'
29+
SPELLNODEFAULTLIB: no input files

‎lld/test/COFF/wx.s

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
# RUN: lld-link /out:%t.exe /entry:main -notarealoption /WX /WX:NO %t.obj 2>&1 | \
99
# RUN: FileCheck -check-prefix=WARNING %s
1010

11-
# ERROR: error: ignoring unknown argument: -notarealoption
12-
# WARNING: warning: ignoring unknown argument: -notarealoption
11+
# ERROR: error: ignoring unknown argument '-notarealoption'
12+
# WARNING: warning: ignoring unknown argument '-notarealoption'
1313

1414
.text
1515
.global main

‎lld/test/ELF/basic.s

+1-1
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ _start:
234234
# NO_O_VAL: -o: missing argument
235235

236236
# RUN: not ld.lld --foo 2>&1 | FileCheck --check-prefix=UNKNOWN %s
237-
# UNKNOWN: unknown argument: --foo
237+
# UNKNOWN: unknown argument '--foo'
238238

239239
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
240240
# RUN: not ld.lld %t %t -o %t2 2>&1 | FileCheck --check-prefix=DUP %s

‎lld/test/ELF/color-diagnostics.test

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# RUN: not ld.lld -xyz -color-diagnostics=always /nosuchfile 2>&1 \
77
# RUN: | FileCheck -check-prefix=COLOR %s
88

9-
# COLOR: {{ld.lld: .\[0;1;31merror: .\[0munknown argument: -xyz}}
9+
# COLOR: {{ld.lld: .\[0;1;31merror: .\[0munknown argument '-xyz'}}
1010
# COLOR: {{ld.lld: .\[0;1;31merror: .\[0mcannot open /nosuchfile}}
1111

1212
# RUN: not ld.lld -color-diagnostics=foobar 2>&1 | FileCheck -check-prefix=ERR %s

‎lld/test/ELF/driver.test

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
# RUN: not ld.lld --unknown1 --unknown2 -m foo /no/such/file -lnosuchlib \
44
# RUN: 2>&1 | FileCheck -check-prefix=UNKNOWN %s
55

6-
# UNKNOWN: unknown argument: --unknown1
7-
# UNKNOWN: unknown argument: --unknown2
6+
# UNKNOWN: unknown argument '--unknown1'
7+
# UNKNOWN: unknown argument '--unknown2'
88
# UNKNOWN: unknown emulation: foo
99
# UNKNOWN: cannot open /no/such/file
1010
# UNKNOWN: unable to find library -lnosuchlib
@@ -22,6 +22,9 @@
2222
# RUN: not ld.lld -v xyz 2>&1 | FileCheck -check-prefix=VERSION %s
2323
# VERSION: LLD {{.*}} (compatible with GNU linkers)
2424

25+
# RUN: not ld.lld --versin 2>&1 | FileCheck -check-prefix=SPELLVERSION %s
26+
# SPELLVERSION: unknown argument '--versin', did you mean '--version'
27+
2528
## Attempt to link DSO with -r
2629
# RUN: ld.lld -shared %t -o %t.so
2730
# RUN: not ld.lld -r %t.so %t -o %tfail 2>&1 | FileCheck -check-prefix=ERR %s

0 commit comments

Comments
 (0)