diff options
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 98c0edc..6c0ff3d 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -2566,17 +2566,21 @@ void Driver::BuildInputs(const ToolChain &TC, DerivedArgList &Args, } 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"); } // Warn -x after last input file has no effect - { + if (!IsCLMode()) { Arg *LastXArg = Args.getLastArgNoClaim(options::OPT_x); Arg *LastInputArg = Args.getLastArgNoClaim(options::OPT_INPUT); - if (LastXArg && LastInputArg && LastInputArg->getIndex() < LastXArg->getIndex()) + if (LastXArg && LastInputArg && + LastInputArg->getIndex() < LastXArg->getIndex()) Diag(clang::diag::warn_drv_unused_x) << LastXArg->getValue(); + } else { + // In CL mode suggest /TC or /TP since -x doesn't make sense if passed via + // /clang:. + if (auto *A = Args.getLastArg(options::OPT_x)) + Diag(diag::err_drv_unsupported_opt_with_suggestion) + << A->getAsString(Args) << "/TC' or '/TP"; } for (Arg *A : Args) { |