diff options
author | Chad Rosier <mcrosier@apple.com> | 2013-01-15 01:21:53 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2013-01-15 01:21:53 +0000 |
commit | 08e79d2f075d1326ff7a849fd1bc88dadf99d574 (patch) | |
tree | aab08f26b33435b76e46e172168fb26e21a97b51 | |
parent | 714911f092edeb8b329932f457ef0875725d1c07 (diff) |
[driver] Warnings for warning options are handled by the frontend. The driver needs to process the
warning options to setup diagnostic state, but should not be emitting warnings as these would be
rudndant with what the frontend emits.
rdar://13001556
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172497 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Frontend/Utils.h | 3 | ||||
-rw-r--r-- | lib/Frontend/Warnings.cpp | 9 | ||||
-rw-r--r-- | test/Driver/warning-options.cpp | 6 | ||||
-rw-r--r-- | test/Frontend/warning-options.cpp | 5 | ||||
-rw-r--r-- | tools/driver/driver.cpp | 2 |
5 files changed, 16 insertions, 9 deletions
diff --git a/include/clang/Frontend/Utils.h b/include/clang/Frontend/Utils.h index 6b1fc630e2..8830dced3c 100644 --- a/include/clang/Frontend/Utils.h +++ b/include/clang/Frontend/Utils.h @@ -60,7 +60,8 @@ void InitializePreprocessor(Preprocessor &PP, /// ProcessWarningOptions - Initialize the diagnostic client and process the /// warning options specified on the command line. void ProcessWarningOptions(DiagnosticsEngine &Diags, - const DiagnosticOptions &Opts); + const DiagnosticOptions &Opts, + bool ReportDiags = true); /// DoPrintPreprocessedInput - Implement -E mode. void DoPrintPreprocessedInput(Preprocessor &PP, raw_ostream* OS, diff --git a/lib/Frontend/Warnings.cpp b/lib/Frontend/Warnings.cpp index b4c6b0bd73..767096a1c9 100644 --- a/lib/Frontend/Warnings.cpp +++ b/lib/Frontend/Warnings.cpp @@ -48,7 +48,8 @@ static void EmitUnknownDiagWarning(DiagnosticsEngine &Diags, } void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, - const DiagnosticOptions &Opts) { + const DiagnosticOptions &Opts, + bool ReportDiags) { Diags.setSuppressSystemWarnings(true); // Default to -Wno-system-headers Diags.setIgnoreAllWarnings(Opts.IgnoreWarnings); Diags.setShowOverloads(Opts.getShowOverloads()); @@ -84,6 +85,12 @@ void clang::ProcessWarningOptions(DiagnosticsEngine &Diags, // conflicting options. for (unsigned Report = 0, ReportEnd = 2; Report != ReportEnd; ++Report) { bool SetDiagnostic = (Report == 0); + + // If we've set the diagnostic state and are not reporting diagnostics then + // we're done. + if (!SetDiagnostic && !ReportDiags) + break; + for (unsigned i = 0, e = Opts.Warnings.size(); i != e; ++i) { StringRef Opt = Opts.Warnings[i]; StringRef OrigOpt = Opts.Warnings[i]; diff --git a/test/Driver/warning-options.cpp b/test/Driver/warning-options.cpp index 6dafa1c36a..f1a335d213 100644 --- a/test/Driver/warning-options.cpp +++ b/test/Driver/warning-options.cpp @@ -3,12 +3,6 @@ // 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'; did you mean '-Wno-unused-command-line-argument'? - // FIXME: Remove this together with -Warc-abi once an Xcode is released that doesn't pass this flag. // RUN: %clang -### -Warc-abi -Wno-arc-abi %s 2>&1 | FileCheck -check-prefix=ARCABI %s // ARCABI-NOT: unknown warning option '-Warc-abi' diff --git a/test/Frontend/warning-options.cpp b/test/Frontend/warning-options.cpp new file mode 100644 index 0000000000..85bea62595 --- /dev/null +++ b/test/Frontend/warning-options.cpp @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -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'; did you mean '-Wno-unused-command-line-argument'? diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp index de2b899bfa..81bc985cc6 100644 --- a/tools/driver/driver.cpp +++ b/tools/driver/driver.cpp @@ -395,7 +395,7 @@ int main(int argc_, const char **argv_) { IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient); - ProcessWarningOptions(Diags, *DiagOpts); + ProcessWarningOptions(Diags, *DiagOpts, /*ReportDiags=*/false); Driver TheDriver(Path.str(), llvm::sys::getDefaultTargetTriple(), "a.out", Diags); |