diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 4d3ab9b7096e28..85c4bb46019fa7 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -305,11 +305,17 @@ InputArgList Driver::ParseArgStrings(ArrayRef ArgStrings, unsigned DiagID; auto ArgString = A->getAsString(Args); std::string Nearest; - if (getOpts().findNearest( - ArgString, Nearest, IncludedFlagsBitmask, ExcludedFlagsBitmask) > 1) { - DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl - : diag::err_drv_unknown_argument; - Diags.Report(DiagID) << ArgString; + if (getOpts().findNearest(ArgString, Nearest, IncludedFlagsBitmask, + ExcludedFlagsBitmask) > 1) { + if (getOpts().findNearest(ArgString, Nearest, options::CC1Option) == 0 && + !IsCLMode()) { + DiagID = diag::err_drv_unknown_argument_with_suggestion; + Diags.Report(DiagID) << ArgString << "-Xclang " + Nearest; + } else { + DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl + : diag::err_drv_unknown_argument; + Diags.Report(DiagID) << ArgString; + } } else { DiagID = IsCLMode() ? diag::warn_drv_unknown_argument_clang_cl_with_suggestion diff --git a/clang/test/Driver/debug-options.c b/clang/test/Driver/debug-options.c index 96c0763fbf9c08..bd13a63162c8ec 100644 --- a/clang/test/Driver/debug-options.c +++ b/clang/test/Driver/debug-options.c @@ -463,6 +463,6 @@ // SIMPLE_TMPL_NAMES: -gsimple-template-names=simple // FWD_TMPL_PARAMS-DAG: -debug-forward-template-params // RUN: not %clang -### -target x86_64 -c -g -gsimple-template-names=mangled %s 2>&1 | FileCheck --check-prefix=MANGLED_TEMP_NAMES %s -// MANGLED_TEMP_NAMES: error: unknown argument: '-gsimple-template-names=mangled' +// MANGLED_TEMP_NAMES: error: unknown argument '-gsimple-template-names=mangled'; did you mean '-Xclang -gsimple-template-names=mangled' // RUN: %clang -### -target x86_64 -c -g %s 2>&1 | FileCheck --check-prefix=FULL_TEMP_NAMES --implicit-check-not=debug-forward-template-params %s // FULL_TEMP_NAMES-NOT: -gsimple-template-names diff --git a/clang/test/Driver/unknown-arg.c b/clang/test/Driver/unknown-arg.c index 45752e9c7976d9..32346e3326f3f8 100644 --- a/clang/test/Driver/unknown-arg.c +++ b/clang/test/Driver/unknown-arg.c @@ -31,7 +31,7 @@ // CHECK: error: unknown argument: '-%d' // CHECK: error: unknown argument: '-HHHH' // CHECK: error: unknown argument: '-munknown-to-clang-option' -// CHECK: error: unknown argument: '-print-stats' +// CHECK: error: unknown argument '-print-stats'; did you mean '-Xclang -print-stats'? // CHECK: error: unknown argument: '-funknown-to-clang-option' // CHECK: error: unknown argument: '-ifoo' // MULTILIB: warning: argument unused during compilation: '-imultilib dir' diff --git a/clang/test/Misc/driver-verify.c b/clang/test/Misc/driver-verify.c index f858a3db85cb5c..d03fe1f1f0e81a 100644 --- a/clang/test/Misc/driver-verify.c +++ b/clang/test/Misc/driver-verify.c @@ -3,4 +3,4 @@ // expected-no-diagnostics // Test that -verify is strictly rejected as unknown by the driver. -// CHECK: unknown argument: '-verify' +// CHECK: unknown argument '-verify'; did you mean '-Xclang -verify'?