That's pretty sneaky. It doesn't seem super important to duplicate that quirk though, so I'll leave this as is for now.
On Mon, Jul 21, 2014 at 4:56 PM, Nico Weber <[email protected]> wrote: > It seems that cl.exe lets /showIncludes write to stderr if /E is passed, but > to stdout else (!). > > > On Mon, Jul 21, 2014 at 4:42 PM, Hans Wennborg <[email protected]> wrote: >> >> Author: hans >> Date: Mon Jul 21 18:42:07 2014 >> New Revision: 213589 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=213589&view=rev >> Log: >> 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. >> >> Modified: >> cfe/trunk/lib/Driver/Tools.cpp >> cfe/trunk/test/Driver/cl-options.c >> >> Modified: cfe/trunk/lib/Driver/Tools.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=213589&r1=213588&r2=213589&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/Tools.cpp (original) >> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Jul 21 18:42:07 2014 >> @@ -4640,8 +4640,11 @@ void Clang::AddClangCLArgs(const ArgList >> // 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, >> >> Modified: cfe/trunk/test/Driver/cl-options.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=213589&r1=213588&r2=213589&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/Driver/cl-options.c (original) >> +++ cfe/trunk/test/Driver/cl-options.c Mon Jul 21 18:42:07 2014 >> @@ -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" >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
