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
