On Thu, Aug 8, 2013 at 8:32 PM, Hans Wennborg <h...@hanshq.net> wrote:
> Author: hans > Date: Thu Aug 8 19:32:23 2013 > New Revision: 188037 > > URL: http://llvm.org/viewvc/llvm-project?rev=188037&view=rev > Log: > clang-cl: Support /showIncludes > > This option prints information about #included files to stderr. Clang could > already do it, this patch just teaches the existing code about the > /showIncludes > style and adds the flag. > > Differential Revision: http://llvm-reviews.chandlerc.com/D1333 > > Modified: > cfe/trunk/include/clang/Driver/CC1Options.td > cfe/trunk/include/clang/Driver/CLCompatOptions.td > cfe/trunk/include/clang/Driver/Options.td > cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h > cfe/trunk/include/clang/Frontend/Utils.h > cfe/trunk/lib/Driver/Tools.cpp > cfe/trunk/lib/Frontend/CompilerInstance.cpp > cfe/trunk/lib/Frontend/CompilerInvocation.cpp > cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp > cfe/trunk/test/Driver/cl-options.c > cfe/trunk/test/Frontend/print-header-includes.c > > Modified: cfe/trunk/include/clang/Driver/CC1Options.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CC1Options.td?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Driver/CC1Options.td (original) > +++ cfe/trunk/include/clang/Driver/CC1Options.td Thu Aug 8 19:32:23 2013 > @@ -221,6 +221,8 @@ def sys_header_deps : Flag<["-"], "sys-h > HelpText<"Include system headers in dependency output">; > def header_include_file : Separate<["-"], "header-include-file">, > HelpText<"Filename (or -) to write header include output to">; > +def show_includes : Flag<["--"], "show-includes">, > + HelpText<"Print cl.exe style /showIncludes to stderr">; > > > > //===----------------------------------------------------------------------===// > // Diagnostic Options > > Modified: cfe/trunk/include/clang/Driver/CLCompatOptions.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Driver/CLCompatOptions.td (original) > +++ cfe/trunk/include/clang/Driver/CLCompatOptions.td Thu Aug 8 19:32:23 > 2013 > @@ -68,6 +68,9 @@ def _SLASH_Oy_ : CLFlag<"Oy-">, HelpText > def _SLASH_P : CLFlag<"P">, HelpText<"Only run the preprocessor">, > Alias<E>; > def _SLASH_QUESTION : CLFlag<"?">, Alias<help>, > HelpText<"Display available options">; > +def _SLASH_showIncludes : CLFlag<"showIncludes">, > + HelpText<"Print info about included files to stderr">, > + Alias<show_includes>; > def _SLASH_U : CLJoinedOrSeparate<"U">, HelpText<"Undefine macro">, > MetaVarName<"<macro>">, Alias<U>; > def _SLASH_W0 : CLFlag<"W0">, HelpText<"Disable all warnings">, Alias<w>; > @@ -130,7 +133,6 @@ def _SLASH_Gy : CLFlag<"Gy">; > def _SLASH_Gy_ : CLFlag<"Gy-">; > def _SLASH_GZ : CLFlag<"GZ">; > def _SLASH_RTC : CLJoined<"RTC">; > -def _SLASH_showIncludes : CLJoined<"showIncludes">; > def _SLASH_w : CLJoined<"w">; > def _SLASH_Za : CLFlag<"Za">; > def _SLASH_Zc : CLJoined<"Zc:">; > > Modified: cfe/trunk/include/clang/Driver/Options.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Driver/Options.td (original) > +++ cfe/trunk/include/clang/Driver/Options.td Thu Aug 8 19:32:23 2013 > @@ -1333,6 +1333,6 @@ def Z_reserved_lib_stdcxx : Flag<["-"], > def Z_reserved_lib_cckext : Flag<["-"], "Z-reserved-lib-cckext">, > Flags<[LinkerInput, NoArgumentUnused, Unsupported]>, > Group<reserved_lib_Group>; > > -include "CLCompatOptions.td" > - > include "CC1Options.td" > + > +include "CLCompatOptions.td" > > Modified: cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h (original) > +++ cfe/trunk/include/clang/Frontend/DependencyOutputOptions.h Thu Aug 8 > 19:32:23 2013 > @@ -25,6 +25,7 @@ public: > /// dependency, which can avoid some > 'make' > /// problems. > unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to > dependency list > + unsigned PrintShowIncludes : 1; ///< Print cl.exe style /showIncludes > info. > > /// The file to write dependency output to. > std::string OutputFile; > @@ -48,6 +49,7 @@ public: > ShowHeaderIncludes = 0; > UsePhonyTargets = 0; > AddMissingHeaderDeps = 0; > + PrintShowIncludes = 0; > } > }; > > > Modified: cfe/trunk/include/clang/Frontend/Utils.h > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/Utils.h?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Frontend/Utils.h (original) > +++ cfe/trunk/include/clang/Frontend/Utils.h Thu Aug 8 19:32:23 2013 > @@ -91,9 +91,11 @@ void AttachDependencyFileGen(Preprocesso > /// the default behavior used by -H. > /// \param OutputPath - If non-empty, a path to write the header include > /// information to, instead of writing to stderr. > +/// \param ShowDepth - Whether to indent to show the nesting of the > includes. > +/// \param MSStyle - Whether to print in cl.exe /showIncludes style. > void AttachHeaderIncludeGen(Preprocessor &PP, bool ShowAllHeaders = false, > StringRef OutputPath = "", > - bool ShowDepth = true); > + bool ShowDepth = true, bool MSStyle = false); > > /// CacheTokens - Cache tokens for use with PCH. Note that this requires > /// a seekable stream. > > Modified: cfe/trunk/lib/Driver/Tools.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/lib/Driver/Tools.cpp (original) > +++ cfe/trunk/lib/Driver/Tools.cpp Thu Aug 8 19:32:23 2013 > @@ -3727,6 +3727,9 @@ void Clang::AddClangCLArgs(const ArgList > // FIXME: Make this default for the win32 triple. > CmdArgs.push_back("-cxx-abi"); > CmdArgs.push_back("microsoft"); > + > + if (Arg *A = Args.getLastArg(options::OPT_show_includes)) > + A->render(Args, CmdArgs); > } > > void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, > > Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original) > +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Thu Aug 8 19:32:23 2013 > @@ -259,7 +259,7 @@ void CompilerInstance::createPreprocesso > AttachDependencyGraphGen(*PP, DepOpts.DOTOutputFile, > getHeaderSearchOpts().Sysroot); > > - > + > // Handle generating header include information, if requested. > if (DepOpts.ShowHeaderIncludes) > AttachHeaderIncludeGen(*PP); > @@ -270,6 +270,11 @@ void CompilerInstance::createPreprocesso > AttachHeaderIncludeGen(*PP, /*ShowAllHeaders=*/true, OutputPath, > /*ShowDepth=*/false); > } > + > + if (DepOpts.PrintShowIncludes) { > + AttachHeaderIncludeGen(*PP, /*ShowAllHeaders=*/false, > /*OutputPath=*/"", > + /*ShowDepth=*/true, /*MSStyle=*/true); > + } > } > > // ASTContext > > Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) > +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Thu Aug 8 19:32:23 2013 > @@ -518,6 +518,7 @@ static void ParseDependencyOutputArgs(De > Opts.ShowHeaderIncludes = Args.hasArg(OPT_H); > Opts.HeaderIncludeOutputFile = > Args.getLastArgValue(OPT_header_include_file); > Opts.AddMissingHeaderDeps = Args.hasArg(OPT_MG); > + Opts.PrintShowIncludes = Args.hasArg(OPT_show_includes); > Opts.DOTOutputFile = Args.getLastArgValue(OPT_dependency_dot); > } > > > Modified: cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp (original) > +++ cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp Thu Aug 8 19:32:23 2013 > @@ -24,15 +24,16 @@ class HeaderIncludesCallback : public PP > bool OwnsOutputFile; > bool ShowAllHeaders; > bool ShowDepth; > + bool MSStyle; > > public: > HeaderIncludesCallback(const Preprocessor *PP, bool ShowAllHeaders_, > raw_ostream *OutputFile_, bool OwnsOutputFile_, > - bool ShowDepth_) > + bool ShowDepth_, bool MSStyle_) > : SM(PP->getSourceManager()), OutputFile(OutputFile_), > CurrentIncludeDepth(0), HasProcessedPredefines(false), > OwnsOutputFile(OwnsOutputFile_), ShowAllHeaders(ShowAllHeaders_), > - ShowDepth(ShowDepth_) {} > + ShowDepth(ShowDepth_), MSStyle(MSStyle_) {} > > ~HeaderIncludesCallback() { > if (OwnsOutputFile) > @@ -46,7 +47,8 @@ public: > } > > void clang::AttachHeaderIncludeGen(Preprocessor &PP, bool ShowAllHeaders, > - StringRef OutputPath, bool ShowDepth) { > + StringRef OutputPath, bool ShowDepth, > + bool MSStyle) { > raw_ostream *OutputFile = &llvm::errs(); > bool OwnsOutputFile = false; > > @@ -69,7 +71,7 @@ void clang::AttachHeaderIncludeGen(Prepr > > PP.addPPCallbacks(new HeaderIncludesCallback(&PP, ShowAllHeaders, > OutputFile, OwnsOutputFile, > - ShowDepth)); > + ShowDepth, MSStyle)); > } > > void HeaderIncludesCallback::FileChanged(SourceLocation Loc, > @@ -109,14 +111,20 @@ void HeaderIncludesCallback::FileChanged > if (ShowHeader && Reason == PPCallbacks::EnterFile) { > // Write to a temporary string to avoid unnecessary flushing on > errs(). > SmallString<512> Filename(UserLoc.getFilename()); > - Lexer::Stringify(Filename); > + if (!MSStyle) > + Lexer::Stringify(Filename); > > SmallString<256> Msg; > + if (MSStyle) > + Msg += "Note: including file:"; > + > if (ShowDepth) { > // The main source file is at depth 1, so skip one dot. > for (unsigned i = 1; i != CurrentIncludeDepth; ++i) > - Msg += '.'; > - Msg += ' '; > + Msg += MSStyle ? ' ' : '.'; > + > + if (!MSStyle) > + Msg += ' '; > } > Msg += Filename; > Msg += '\n'; > > Modified: cfe/trunk/test/Driver/cl-options.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/test/Driver/cl-options.c (original) > +++ cfe/trunk/test/Driver/cl-options.c Thu Aug 8 19:32:23 2013 > @@ -59,6 +59,9 @@ > // RUN: %clang_cl /P -### -- %s 2>&1 | FileCheck -check-prefix=P %s > // P: -E > > +// RUN: %clang_cl /showIncludes -### -- %s 2>&1 | FileCheck > -check-prefix=showIncludes %s > +// showIncludes: --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" > @@ -97,4 +100,4 @@ > // RUN: %clang_cl /Zs /EHsc /Fdfoo /fp:precise /Gd /GL /GL- -- %s 2>&1 > // RUN: %clang_cl /Zs /Gm /Gm- /GS /Gy /Gy- /GZ -- %s 2>&1 > // RUN: %clang_cl /Zs /RTC1 /wfoo /Zc:wchar_t- -- %s 2>&1 > -// RUN: %clang_cl /Zs /ZI /Zi /showIncludes -- %s 2>&1 > +// RUN: %clang_cl /Zs /ZI /Zi -- %s 2>&1 > > Modified: cfe/trunk/test/Frontend/print-header-includes.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/print-header-includes.c?rev=188037&r1=188036&r2=188037&view=diff > > ============================================================================== > --- cfe/trunk/test/Frontend/print-header-includes.c (original) > +++ cfe/trunk/test/Frontend/print-header-includes.c Thu Aug 8 19:32:23 > 2013 > @@ -5,4 +5,11 @@ > // CHECK: . {{.*test.h}} > // CHECK: .. {{.*test2.h}} > > +// RUN: %clang_cc1 -include Inputs/test3.h -E --show-includes -o %t.out > %s 2> %t.err > +// RUN: FileCheck --check-prefix=MS < %t.err %s > +// MS-NOT: test3.h > Do you remember why this is a -NOT? From what I can tell, `cl /c empty.cc /FItest.h /showIncludes` does print a Note line for test.h. I thought that was a bug, but when I wrote a fix I noticed that we have this test that explicitly checks that /FI arguments are omitted from /showIncludes output. > +// MS: Note: including file: {{.*test.h}} > +// MS: Note: including file: {{.*test2.h}} > +// MS-NOT: Note > + > #include "Inputs/test.h" > > > _______________________________________________ > cfe-commits mailing list > cfe-comm...@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits