forked from OSchip/llvm-project
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 llvm-svn: 264174
This commit is contained in:
parent
8e38c66645
commit
149d9522fb
|
@ -372,7 +372,7 @@ void CompilerInstance::createPreprocessor(TranslationUnitKind TUKind) {
|
|||
|
||||
if (DepOpts.PrintShowIncludes) {
|
||||
AttachHeaderIncludeGen(*PP, DepOpts.ExtraDeps,
|
||||
/*ShowAllHeaders=*/false, /*OutputPath=*/"",
|
||||
/*ShowAllHeaders=*/true, /*OutputPath=*/"",
|
||||
/*ShowDepth=*/true, /*MSStyle=*/true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -148,11 +148,18 @@ void HeaderIncludesCallback::FileChanged(SourceLocation Loc,
|
|||
// 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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue