r188037 - clang-cl: Support /showIncludes

Nico Weber via cfe-commits cfe-commits at lists.llvm.org
Sat Mar 12 19:50:23 PST 2016


On Thu, Aug 8, 2013 at 8:32 PM, Hans Wennborg <hans at 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-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160312/f1fd285a/attachment-0001.html>


More information about the cfe-commits mailing list