diff options
-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); |