aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/HeaderIncludeGen.cpp
diff options
context:
space:
mode:
authorNico Weber <nicolasweber@gmx.de>2016-03-23 18:00:22 +0000
committerNico Weber <nicolasweber@gmx.de>2016-03-23 18:00:22 +0000
commit149d9522fb6579008ac79213c620ab1549dbc50b (patch)
tree255c01f649c6ebf4277ee3062c9e9c4c758c233d /clang/lib/Frontend/HeaderIncludeGen.cpp
parent8e38c66645b3452eae659d97130c028dd30e5c21 (diff)
downloadllvm-149d9522fb6579008ac79213c620ab1549dbc50b.zip
llvm-149d9522fb6579008ac79213c620ab1549dbc50b.tar.gz
llvm-149d9522fb6579008ac79213c620ab1549dbc50b.tar.bz2
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
Diffstat (limited to 'clang/lib/Frontend/HeaderIncludeGen.cpp')
-rw-r--r--clang/lib/Frontend/HeaderIncludeGen.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Frontend/HeaderIncludeGen.cpp b/clang/lib/Frontend/HeaderIncludeGen.cpp
index bb053c6..25b0c4e 100644
--- a/clang/lib/Frontend/HeaderIncludeGen.cpp
+++ b/clang/lib/Frontend/HeaderIncludeGen.cpp
@@ -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);
}
}