summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Driver.cpp
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2013-08-12 18:34:17 +0000
committerHans Wennborg <hans@hanshq.net>2013-08-12 18:34:17 +0000
commit0d0b19cbe1e34a3c9d35c7bb3d6e59ca3949c08a (patch)
treee6985eebf2c7bad69bbca3338cdcd277e7e0095b /clang/lib/Driver/Driver.cpp
parent83b162d87f6b1b3d7b199797560aab467d1b1ed4 (diff)
downloadbcm5719-llvm-0d0b19cbe1e34a3c9d35c7bb3d6e59ca3949c08a.tar.gz
bcm5719-llvm-0d0b19cbe1e34a3c9d35c7bb3d6e59ca3949c08a.zip
clang-cl: Expand warning about /TC and /TP override, and expand test
llvm-svn: 188190
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
-rw-r--r--clang/lib/Driver/Driver.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 3fddc8fe6e9..d6013f19ea4 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1011,24 +1011,26 @@ void Driver::BuildInputs(const ToolChain &TC, const DerivedArgList &Args,
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;
-
- 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();
+ InputType = TCTP->getOption().matches(options::OPT__SLASH_TC)
+ ? types::TY_C : types::TY_CXX;
+
+ 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");
OpenPOWER on IntegriCloud