summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@apple.com>2013-01-15 01:21:53 +0000
committerChad Rosier <mcrosier@apple.com>2013-01-15 01:21:53 +0000
commit5f15a351144753c39ceedfde595d45c923772f50 (patch)
treee98c4d96b647fe791dddacd5970be6a7ac81042f
parentf238510c435ce271e2a064dbeec7f7e8dddbbae5 (diff)
downloadbcm5719-llvm-5f15a351144753c39ceedfde595d45c923772f50.tar.gz
bcm5719-llvm-5f15a351144753c39ceedfde595d45c923772f50.zip
[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 llvm-svn: 172497
-rw-r--r--clang/include/clang/Frontend/Utils.h3
-rw-r--r--clang/lib/Frontend/Warnings.cpp9
-rw-r--r--clang/test/Driver/warning-options.cpp6
-rw-r--r--clang/test/Frontend/warning-options.cpp5
-rw-r--r--clang/tools/driver/driver.cpp2
5 files changed, 16 insertions, 9 deletions
diff --git a/clang/include/clang/Frontend/Utils.h b/clang/include/clang/Frontend/Utils.h
index 6b1fc630e23..8830dced3cc 100644
--- a/clang/include/clang/Frontend/Utils.h
+++ b/clang/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/clang/lib/Frontend/Warnings.cpp b/clang/lib/Frontend/Warnings.cpp
index b4c6b0bd735..767096a1c99 100644
--- a/clang/lib/Frontend/Warnings.cpp
+++ b/clang/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/clang/test/Driver/warning-options.cpp b/clang/test/Driver/warning-options.cpp
index 6dafa1c36a2..f1a335d2139 100644
--- a/clang/test/Driver/warning-options.cpp
+++ b/clang/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/clang/test/Frontend/warning-options.cpp b/clang/test/Frontend/warning-options.cpp
new file mode 100644
index 00000000000..85bea625957
--- /dev/null
+++ b/clang/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/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp
index de2b899bfaa..81bc985cc6c 100644
--- a/clang/tools/driver/driver.cpp
+++ b/clang/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);
OpenPOWER on IntegriCloud