r188190 - clang-cl: Expand warning about /TC and /TP override, and expand test
Hans Wennborg
hans at hanshq.net
Mon Aug 12 11:34:17 PDT 2013
Author: hans
Date: Mon Aug 12 13:34:17 2013
New Revision: 188190
URL: http://llvm.org/viewvc/llvm-project?rev=188190&view=rev
Log:
clang-cl: Expand warning about /TC and /TP override, and expand test
Modified:
cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
cfe/trunk/lib/Driver/Driver.cpp
cfe/trunk/test/Driver/cl-inputs.c
Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=188190&r1=188189&r2=188190&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Mon Aug 12 13:34:17 2013
@@ -153,6 +153,8 @@ def warn_missing_sysroot : Warning<"no s
def note_drv_command_failed_diag_msg : Note<
"diagnostic msg: %0">;
+def note_drv_t_option_is_global :
+ Note<"The last /TC or /TP option takes precedence over earlier instances">;
def err_analyzer_config_no_value : Error<
"analyzer-config option '%0' has a key but no value">;
Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=188190&r1=188189&r2=188190&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Mon Aug 12 13:34:17 2013
@@ -1011,24 +1011,26 @@ void Driver::BuildInputs(const ToolChain
types::ID InputType = types::TY_Nothing;
Arg *InputTypeArg = 0;
- // The /TC and /TP options set the input type to C or C++ globally.
+ // The last /TC or /TP option sets the input type to C or C++ globally.
if (Arg *TCTP = Args.getLastArg(options::OPT__SLASH_TC,
options::OPT__SLASH_TP)) {
InputTypeArg = TCTP;
- unsigned opposite;
+ InputType = TCTP->getOption().matches(options::OPT__SLASH_TC)
+ ? types::TY_C : types::TY_CXX;
- if (TCTP->getOption().matches(options::OPT__SLASH_TC)) {
- InputType = types::TY_C;
- opposite = options::OPT__SLASH_TP;
- } else {
- InputType = types::TY_CXX;
- opposite = options::OPT__SLASH_TC;
- }
-
- if (Arg *OppositeArg = Args.getLastArg(opposite)) {
- Diag(clang::diag::warn_drv_overriding_t_option)
- << OppositeArg->getSpelling() << InputTypeArg->getSpelling();
+ arg_iterator it = Args.filtered_begin(options::OPT__SLASH_TC,
+ options::OPT__SLASH_TP);
+ const arg_iterator ie = Args.filtered_end();
+ Arg *Previous = *it++;
+ bool ShowNote = false;
+ while (it != ie) {
+ Diag(clang::diag::warn_drv_overriding_t_option) << Previous->getSpelling()
+ << (*it)->getSpelling();
+ Previous = *it++;
+ ShowNote = true;
}
+ if (ShowNote)
+ Diag(clang::diag::note_drv_t_option_is_global);
// No driver mode exposes -x and /TC or /TP; we don't support mixing them.
assert(!Args.hasArg(options::OPT_x) && "-x and /TC or /TP is not allowed");
Modified: cfe/trunk/test/Driver/cl-inputs.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-inputs.c?rev=188190&r1=188189&r2=188190&view=diff
==============================================================================
--- cfe/trunk/test/Driver/cl-inputs.c (original)
+++ cfe/trunk/test/Driver/cl-inputs.c Mon Aug 12 13:34:17 2013
@@ -6,17 +6,30 @@
// RUN: %clang_cl /TC -### -- %s 2>&1 | FileCheck -check-prefix=TC %s
// TC: "-x" "c"
+// TC-NOT: warning
+// TC-NOT: note
// RUN: %clang_cl /TP -### -- %s 2>&1 | FileCheck -check-prefix=TP %s
// TP: "-x" "c++"
+// TP-NOT: warning
+// TP-NOT: note
-// RUN: %clang_cl -### /Tc%s 2>&1 | FileCheck -check-prefix=Tc %s
-// RUN: %clang_cl -### /TP /Tc%s 2>&1 | FileCheck -check-prefix=Tc %s
+// RUN: %clang_cl -### /Tc%s /TP -- %s 2>&1 | FileCheck -check-prefix=Tc %s
+// RUN: %clang_cl -### /TP /Tc%s -- %s 2>&1 | FileCheck -check-prefix=Tc %s
// Tc: "-x" "c"
+// Tc: "-x" "c++"
+// Tc-NOT: warning
+// Tc-NOT: note
-// RUN: %clang_cl -### /Tp%s 2>&1 | FileCheck -check-prefix=Tp %s
-// RUN: %clang_cl -### /TC /Tp%s 2>&1 | FileCheck -check-prefix=Tp %s
+// RUN: %clang_cl -### /Tp%s /TC -- %s 2>&1 | FileCheck -check-prefix=Tp %s
+// RUN: %clang_cl -### /TC /Tp%s -- %s 2>&1 | FileCheck -check-prefix=Tp %s
// Tp: "-x" "c++"
+// Tp: "-x" "c"
+// Tp-NOT: warning
+// Tp-NOT: note
-// RUN: %clang_cl /TP /TC -### -- %s 2>&1 | FileCheck -check-prefix=WARN %s
-// WARN: overriding '/TP' option with '/TC'
+// RUN: %clang_cl /TP /TC /TP -### -- %s 2>&1 | FileCheck -check-prefix=WARN %s
+// WARN: warning: overriding '/TP' option with '/TC'
+// WARN: warning: overriding '/TC' option with '/TP'
+// WARN: note: The last /TC or /TP option takes precedence over earlier instances
+// WARN-NOT: note
More information about the cfe-commits
mailing list