[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
This commit is contained in:
parent
f238510c43
commit
5f15a35114
|
@ -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,
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'?
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue