From: Hans Wennborg Date: Wed, 18 Sep 2013 22:26:39 +0000 (+0000) Subject: clang-cl: Don't warn about overriding /MD with /MT, /Fo with another /Fo, etc. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76da17821632cf7d8f1b8faf4e011c2fd384a9e9;p=clang clang-cl: Don't warn about overriding /MD with /MT, /Fo with another /Fo, etc. I put in the warnings because MSVC has them, but I don't think they're very useful. Clang does not warn about overriding flags in general, e.g. it's perfectly fine to have -fomit-frame-pointer followed by -fno-omit-frame-pointer. We should focus on warning where things get confusing, such as with the /TP and /TC options. In "clang-cl /TC a.c /TP b.cc", the user might not realize that the /TP flag will apply to both files, and we warn about that. Differential Revision: http://llvm-reviews.chandlerc.com/D1718 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190964 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index 2f69e5de8e..9c9893e9e6 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -138,9 +138,6 @@ def warn_drv_assuming_mfloat_abi_is : Warning< "unknown platform, assuming -mfloat-abi=%0">; def warn_ignoring_ftabstop_value : Warning< "ignoring invalid -ftabstop value '%0', using default value %1">; -def warn_drv_overriding_joined_option : Warning< - "overriding '%0%1' option with '%2%3'">, - InGroup>; def warn_drv_overriding_flag_option : Warning< "overriding '%0' option with '%1'">, InGroup>; diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 7ad09accd8..a2cf06a20c 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -284,26 +284,6 @@ DerivedArgList *Driver::TranslateInputArgs(const InputArgList &Args) const { return DAL; } -/// \brief Check whether there are multiple instances of OptionID in Args, and -/// if so, issue a diagnostics about it. -static void DiagnoseOptionOverride(const Driver &D, const DerivedArgList &Args, - unsigned OptionID) { - assert(Args.hasArg(OptionID)); - - arg_iterator it = Args.filtered_begin(OptionID); - arg_iterator ie = Args.filtered_end(); - Arg *Previous = *it; - ++it; - - while (it != ie) { - D.Diag(clang::diag::warn_drv_overriding_joined_option) - << Previous->getSpelling() << Previous->getValue() - << (*it)->getSpelling() << (*it)->getValue(); - Previous = *it; - ++it; - } -} - Compilation *Driver::BuildCompilation(ArrayRef ArgList) { llvm::PrettyStackTraceString CrashInfo("Compilation construction"); @@ -1158,7 +1138,6 @@ void Driver::BuildActions(const ToolChain &TC, DerivedArgList &Args, // Diagnose misuse of /Fo. if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fo)) { - DiagnoseOptionOverride(*this, Args, options::OPT__SLASH_Fo); StringRef V = A->getValue(); if (V.empty()) { // It has to have a value. @@ -1174,7 +1153,6 @@ void Driver::BuildActions(const ToolChain &TC, DerivedArgList &Args, // Diagnose misuse of /Fe. if (Arg *A = Args.getLastArg(options::OPT__SLASH_Fe)) { - DiagnoseOptionOverride(*this, Args, options::OPT__SLASH_Fe); if (A->getValue()[0] == '\0') { // It has to have a value. Diag(clang::diag::err_drv_missing_argument) << A->getSpelling() << 1; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index a728b4dc81..c71514064f 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -3724,21 +3724,9 @@ void Clang::AddClangCLArgs(const ArgList &Args, ArgStringList &CmdArgs) const { // but defining _DEBUG is sticky. RTOptionID = options::OPT__SLASH_MTd; - if (Arg *A = Args.getLastArg(options::OPT__SLASH_M_Group)) { + if (Arg *A = Args.getLastArg(options::OPT__SLASH_M_Group)) RTOptionID = A->getOption().getID(); - // Diagnose overrides. - arg_iterator it = Args.filtered_begin(options::OPT__SLASH_M_Group); - Arg *Previous = *it++; - const arg_iterator ie = Args.filtered_end(); - while (it != ie) { - const Driver &D = getToolChain().getDriver(); - D.Diag(clang::diag::warn_drv_overriding_flag_option) - << Previous->getSpelling() << (*it)->getSpelling(); - Previous = *it++; - } - } - switch(RTOptionID) { case options::OPT__SLASH_MD: if (Args.hasArg(options::OPT__SLASH_LDd)) diff --git a/test/Driver/cl-outputs.c b/test/Driver/cl-outputs.c index 636ef96f60..82134b0562 100644 --- a/test/Driver/cl-outputs.c +++ b/test/Driver/cl-outputs.c @@ -11,7 +11,6 @@ // FoNAME: "-o" "a.obj" // RUN: %clang_cl /Foa.ext /Fob.ext -### -- %s 2>&1 | FileCheck -check-prefix=FoNAMEEXT %s -// FoNAMEEXT: warning: overriding '/Foa.ext' option with '/Fob.ext' // FoNAMEEXT: "-o" "b.ext" // RUN: %clang_cl /Fofoo.dir/ -### -- %s 2>&1 | FileCheck -check-prefix=FoDIR %s @@ -88,5 +87,4 @@ // FeMISSINGARG: error: argument to '/Fe' is missing (expected 1 value) // RUN: %clang_cl /Fefoo /Febar -### -- %s 2>&1 | FileCheck -check-prefix=FeOVERRIDE %s -// FeOVERRIDE: warning: overriding '/Fefoo' option with '/Febar' // FeOVERRIDE: "-out:bar.exe" diff --git a/test/Driver/cl-runtime-flags.c b/test/Driver/cl-runtime-flags.c index 11a5e94876..8367531f9c 100644 --- a/test/Driver/cl-runtime-flags.c +++ b/test/Driver/cl-runtime-flags.c @@ -86,5 +86,4 @@ // CHECK-LDMDd: "--dependent-lib=msvcrtd" // RUN: %clang_cl /MD /MT -### -- %s 2>&1 | FileCheck -check-prefix=MTOVERRIDE %s -// MTOVERRIDE: warning: overriding '/MD' option with '/MT' // MTOVERRIDE: "--dependent-lib=libcmt"