diff options
author | Hans Wennborg <hans@hanshq.net> | 2014-07-21 23:42:07 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2014-07-21 23:42:07 +0000 |
commit | 8a16cb111295cbb321a40788d8ea83e9c240d803 (patch) | |
tree | df658b0e156df58888673eac901b30a5621d7f1d | |
parent | 90cd70040399aafb4552ebd9ab56fffad91c48c1 (diff) |
clang-cl: ignore /showIncludes when combined with /E (PR20336)
Both /showIncludes and /E write to stdout. Allowing both results
in interleaved output and an error when double-closing the file
descriptor, intended to catch issues like this.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213589 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Driver/Tools.cpp | 7 | ||||
-rw-r--r-- | test/Driver/cl-options.c | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index e9d740bdc7..f62cb85196 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -4640,8 +4640,11 @@ void Clang::AddClangCLArgs(const ArgList &Args, ArgStringList &CmdArgs) const { // implemented in clang. CmdArgs.push_back("--dependent-lib=oldnames"); - if (Arg *A = Args.getLastArg(options::OPT_show_includes)) - A->render(Args, CmdArgs); + // Both /showIncludes and /E (and /EP) write to stdout. Allowing both + // would produce interleaved output, so ignore /showIncludes in such cases. + if (!Args.hasArg(options::OPT_E) && !Args.hasArg(options::OPT__SLASH_EP)) + if (Arg *A = Args.getLastArg(options::OPT_show_includes)) + A->render(Args, CmdArgs); // This controls whether or not we emit RTTI data for polymorphic types. if (Args.hasFlag(options::OPT__SLASH_GR_, options::OPT__SLASH_GR, diff --git a/test/Driver/cl-options.c b/test/Driver/cl-options.c index b5e9722066..26cd7e9eb4 100644 --- a/test/Driver/cl-options.c +++ b/test/Driver/cl-options.c @@ -87,6 +87,10 @@ // RUN: %clang_cl /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes %s // showIncludes: --show-includes +// RUN: %clang_cl /E /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes_E %s +// RUN: %clang_cl /EP /showIncludes -### -- %s 2>&1 | FileCheck -check-prefix=showIncludes_E %s +// showIncludes_E: warning: argument unused during compilation: '--show-includes' + // RUN: %clang_cl /Umymacro -### -- %s 2>&1 | FileCheck -check-prefix=U %s // RUN: %clang_cl /U mymacro -### -- %s 2>&1 | FileCheck -check-prefix=U %s // U: "-U" "mymacro" |