Author: nico Date: Wed Mar 23 13:00:22 2016 New Revision: 264174 URL: http://llvm.org/viewvc/llvm-project?rev=264174&view=rev Log: clang-cl: Include /FI headers in /showIncludes output.
-H in gcc mode doesn't print -include headers, but they are included in depfiles written by MMD and friends. Since /showIncludes is what's used instead of depfiles, printing /FI there seems important (and matches cl.exe). Instead of giving HeaderIncludeGen more options, just switch on ShowAllHeaders in clang-cl mode and let clang::InitializePreprocessor() not put -include flags in the <command line> block. This changes the behavior of -E slightly, and it removes the <command line> flag from the output triggered by setting the obscure CC_PRINT_HEADERS=1 env var to true while running clang. Both of these seem ok to change. http://reviews.llvm.org/D18401 Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp cfe/trunk/lib/Frontend/InitPreprocessor.cpp cfe/trunk/test/Driver/cl-pch-showincludes.cpp cfe/trunk/test/Frontend/print-header-includes.c Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=264174&r1=264173&r2=264174&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Wed Mar 23 13:00:22 2016 @@ -372,7 +372,7 @@ void CompilerInstance::createPreprocesso if (DepOpts.PrintShowIncludes) { AttachHeaderIncludeGen(*PP, DepOpts.ExtraDeps, - /*ShowAllHeaders=*/false, /*OutputPath=*/"", + /*ShowAllHeaders=*/true, /*OutputPath=*/"", /*ShowDepth=*/true, /*MSStyle=*/true); } } Modified: cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp?rev=264174&r1=264173&r2=264174&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp (original) +++ cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp Wed Mar 23 13:00:22 2016 @@ -148,11 +148,18 @@ void HeaderIncludesCallback::FileChanged // line buffers. bool ShowHeader = (HasProcessedPredefines || (ShowAllHeaders && CurrentIncludeDepth > 2)); + unsigned IncludeDepth = CurrentIncludeDepth; + if (!HasProcessedPredefines) + --IncludeDepth; // Ignore indent from <built-in>. // Dump the header include information we are past the predefines buffer or - // are showing all headers. - if (ShowHeader && Reason == PPCallbacks::EnterFile) { - PrintHeaderInfo(OutputFile, UserLoc.getFilename(), - ShowDepth, CurrentIncludeDepth, MSStyle); + // are showing all headers and this isn't the magic implicit <command line> + // header. + // FIXME: Identify headers in a more robust way than comparing their name to + // "<command line>" and "<built-in>" in a bunch of places. + if (ShowHeader && Reason == PPCallbacks::EnterFile && + UserLoc.getFilename() != StringRef("<command line>")) { + PrintHeaderInfo(OutputFile, UserLoc.getFilename(), ShowDepth, IncludeDepth, + MSStyle); } } Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=264174&r1=264173&r2=264174&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original) +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Wed Mar 23 13:00:22 2016 @@ -972,6 +972,10 @@ void clang::InitializePreprocessor( PP.getDiagnostics()); } + // Exit the command line and go back to <built-in> (2 is LC_LEAVE). + if (!PP.getLangOpts().AsmPreprocessor) + Builder.append("# 1 \"<built-in>\" 2"); + // If -imacros are specified, include them now. These are processed before // any -include directives. for (unsigned i = 0, e = InitOpts.MacroIncludes.size(); i != e; ++i) @@ -990,10 +994,6 @@ void clang::InitializePreprocessor( AddImplicitInclude(Builder, Path); } - // Exit the command line and go back to <built-in> (2 is LC_LEAVE). - if (!PP.getLangOpts().AsmPreprocessor) - Builder.append("# 1 \"<built-in>\" 2"); - // Instruct the preprocessor to skip the preamble. PP.setSkipMainFilePreamble(InitOpts.PrecompiledPreambleBytes.first, InitOpts.PrecompiledPreambleBytes.second); Modified: cfe/trunk/test/Driver/cl-pch-showincludes.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-pch-showincludes.cpp?rev=264174&r1=264173&r2=264174&view=diff ============================================================================== --- cfe/trunk/test/Driver/cl-pch-showincludes.cpp (original) +++ cfe/trunk/test/Driver/cl-pch-showincludes.cpp Wed Mar 23 13:00:22 2016 @@ -8,16 +8,17 @@ // When building the pch, header1.h (included by header2.h), header2.h (the pch // input itself) and header3.h (included directly, above) should be printed. -// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /Ycheader2.h /FIheader2.h /Fp%t.pch /c /Fo%t -- %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-YC %s -// CHECK-YC: Note: including file: {{.+header2.h}} -// CHECK-YC: Note: including file: {{.+header1.h}} -// CHECK-YC: Note: including file: {{.+header3.h}} +// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /Ycheader2.h /FIheader2.h /Fp%t.pch /c /Fo%t -- %s \ +// RUN: | FileCheck --strict-whitespace -check-prefix=CHECK-YC %s +// CHECK-YC: Note: including file: {{[^ ]*header2.h}} +// FIXME: header1.h should be indented one more: +// CHECK-YC: Note: including file: {{[^ ]*header1.h}} +// CHECK-YC: Note: including file: {{[^ ]*header3.h}} // When using the pch, only the direct include is printed. -// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /Yuheader2.h /FIheader2.h /Fp%t.pch /c /Fo%t -- %s 2>&1 \ -// RUN: | FileCheck -check-prefix=CHECK-YU %s +// RUN: %clang_cl -Werror /showIncludes /I%S/Inputs /Yuheader2.h /FIheader2.h /Fp%t.pch /c /Fo%t -- %s \ +// RUN: | FileCheck --strict-whitespace -check-prefix=CHECK-YU %s // CHECK-YU-NOT: Note: including file: {{.*pch}} // CHECK-YU-NOT: Note: including file: {{.*header1.h}} // CHECK-YU-NOT: Note: including file: {{.*header2.h}} -// CHECK-YU: Note: including file: {{.+header3.h}} +// CHECK-YU: Note: including file: {{[^ ]*header3.h}} 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=264174&r1=264173&r2=264174&view=diff ============================================================================== --- cfe/trunk/test/Frontend/print-header-includes.c (original) +++ cfe/trunk/test/Frontend/print-header-includes.c Wed Mar 23 13:00:22 2016 @@ -1,24 +1,24 @@ -// RUN: cd %S -// RUN: %clang_cc1 -include Inputs/test3.h -E -H -o %t.out %s 2> %t.stderr +// RUN: %clang_cc1 -I%S -include Inputs/test3.h -E -H -o /dev/null %s 2> %t.stderr // RUN: FileCheck < %t.stderr %s // CHECK-NOT: test3.h // CHECK: . {{.*test.h}} // CHECK: .. {{.*test2.h}} -// RUN: %clang_cc1 -include Inputs/test3.h -E --show-includes -o %t.out %s > %t.stdout -// RUN: FileCheck --check-prefix=MS < %t.stdout %s -// MS-NOT: test3.h -// MS: Note: including file: {{.*test.h}} -// MS: Note: including file: {{.*test2.h}} +// RUN: %clang_cc1 -I%S -include Inputs/test3.h -E --show-includes -o /dev/null %s | \ +// RUN: FileCheck --strict-whitespace --check-prefix=MS %s +// MS-NOT: <command line> +// MS: Note: including file: {{[^ ]*test3.h}} +// MS: Note: including file: {{[^ ]*test.h}} +// MS: Note: including file: {{[^ ]*test2.h}} // MS-NOT: Note // RUN: echo "fun:foo" > %t.blacklist -// RUN: %clang_cc1 -fsanitize=address -fdepfile-entry=%t.blacklist -E --show-includes -o %t.out %s > %t.stdout -// RUN: FileCheck --check-prefix=MS-BLACKLIST < %t.stdout %s -// MS-BLACKLIST: Note: including file: {{.*\.blacklist}} -// MS-BLACKLIST: Note: including file: {{.*test.h}} -// MS-BLACKLIST: Note: including file: {{.*test2.h}} +// RUN: %clang_cc1 -I%S -fsanitize=address -fdepfile-entry=%t.blacklist -E --show-includes -o /dev/null %s | \ +// RUN: FileCheck --strict-whitespace --check-prefix=MS-BLACKLIST %s +// MS-BLACKLIST: Note: including file: {{[^ ]*\.blacklist}} +// MS-BLACKLIST: Note: including file: {{[^ ]*test.h}} +// MS-BLACKLIST: Note: including file: {{[^ ]*test2.h}} // MS-BLACKLIST-NOT: Note #include "Inputs/test.h" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits