diff options
author | Chad Rosier <mcrosier@apple.com> | 2012-05-16 19:28:02 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2012-05-16 19:28:02 +0000 |
commit | 286852a10c58ead95ddcd66a08680d0bb2a40666 (patch) | |
tree | 83b89d93a48d314f7bcc87119ed3cf311000be0e | |
parent | a32a0959202b223233960ccc3f9e975d29e79580 (diff) | |
download | bcm5719-llvm-286852a10c58ead95ddcd66a08680d0bb2a40666.tar.gz bcm5719-llvm-286852a10c58ead95ddcd66a08680d0bb2a40666.zip |
Warn about -Wno-foo where foo is an unknown warning option. This is helpful
for subtle misspellings such as -Wno-unused-command-line-arguments instead of
-Wno-unused-command-line-argument.
Also fix the diagnostic messages to properly handle -Wno- options. Previously,
the positive version was always emitted (i.e., -Wfoo was emitted for -Wno-foo).
rdar://11461500
llvm-svn: 156937
-rw-r--r-- | clang/include/clang/Basic/DiagnosticFrontendKinds.td | 4 | ||||
-rw-r--r-- | clang/lib/Frontend/Warnings.cpp | 7 | ||||
-rw-r--r-- | clang/test/Driver/warning-options.cpp | 6 |
3 files changed, 12 insertions, 5 deletions
diff --git a/clang/include/clang/Basic/DiagnosticFrontendKinds.td b/clang/include/clang/Basic/DiagnosticFrontendKinds.td index 5d6b887feb4..5e44ddfe04a 100644 --- a/clang/include/clang/Basic/DiagnosticFrontendKinds.td +++ b/clang/include/clang/Basic/DiagnosticFrontendKinds.td @@ -94,13 +94,13 @@ def warn_unknown_warning_option : Warning< InGroup<DiagGroup<"unknown-warning-option"> >; def warn_unknown_negative_warning_option : Warning< "unknown warning option '%0'?">, - InGroup<DiagGroup<"unknown-warning-option"> >, DefaultIgnore; + InGroup<DiagGroup<"unknown-warning-option"> >; def warn_unknown_warning_option_suggest : Warning< "unknown warning option '%0'; did you mean '%1'?">, InGroup<DiagGroup<"unknown-warning-option"> >; def warn_unknown_negative_warning_option_suggest : Warning< "unknown warning option '%0'; did you mean '%1'?">, - InGroup<DiagGroup<"unknown-warning-option"> >, DefaultIgnore; + InGroup<DiagGroup<"unknown-warning-option"> >; def warn_unknown_warning_specifier : Warning< "unknown %0 warning specifier: '%1'">, InGroup<DiagGroup<"unknown-warning-option"> >; diff --git a/clang/lib/Frontend/Warnings.cpp b/clang/lib/Frontend/Warnings.cpp index ec5fde0c3ef..80c0ebf57b9 100644 --- a/clang/lib/Frontend/Warnings.cpp +++ b/clang/lib/Frontend/Warnings.cpp @@ -83,6 +83,7 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, bool SetDiagnostic = (Report == 0); for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) { StringRef Opt = Opts.Warnings[i]; + StringRef OrigOpt = Opts.Warnings[i]; // Treat -Wformat=0 as an alias for -Wno-format. if (Opt == "format=0") @@ -130,7 +131,7 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, if ((Opt[5] != '=' && Opt[5] != '-') || Opt.size() == 6) { if (Report) Diags.Report(diag::warn_unknown_warning_specifier) - << "-Werror" << ("-W" + Opt.str()); + << "-Werror" << ("-W" + OrigOpt.str()); continue; } Specifier = Opt.substr(6); @@ -158,7 +159,7 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, if ((Opt[12] != '=' && Opt[12] != '-') || Opt.size() == 13) { if (Report) Diags.Report(diag::warn_unknown_warning_specifier) - << "-Wfatal-errors" << ("-W" + Opt.str()); + << "-Wfatal-errors" << ("-W" + OrigOpt.str()); continue; } Specifier = Opt.substr(13); @@ -182,7 +183,7 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, if (Report) { if (DiagIDs->getDiagnosticsInGroup(Opt, _Diags)) - EmitUnknownDiagWarning(Diags, "-W", Opt, isPositive); + EmitUnknownDiagWarning(Diags, "-W", OrigOpt, isPositive); } else { Diags.setDiagnosticGroupMapping(Opt, Mapping); } diff --git a/clang/test/Driver/warning-options.cpp b/clang/test/Driver/warning-options.cpp index a36210d7e1b..1a2d51d528c 100644 --- a/clang/test/Driver/warning-options.cpp +++ b/clang/test/Driver/warning-options.cpp @@ -2,3 +2,9 @@ // LARGE_VALUE_COPY_DEFAULT: -Wlarge-by-value-copy=64 // RUN: %clang -### -Wlarge-by-value-copy=128 %s 2>&1 | FileCheck -check-prefix=LARGE_VALUE_COPY_JOINED %s // LARGE_VALUE_COPY_JOINED: -Wlarge-by-value-copy=128 + +// RUN: %clang -c -Wmonkey -Wno-monkey -Wno-unused-command-line-arguments \ +// RUN: -Wno-unused-command-line-argument %s 2>&1 | FileCheck %s +// CHECK: unknown warning option '-Wmonkey' +// CHECK: unknown warning option '-Wno-monkey' +// CHECK: unknown warning option '-Wno-unused-command-line-arguments' |