Fix the rest of rdar://6243860 hopefully. This requires changing FileIDInfo
to whether the fileid is a 'extern c system header' in addition to whether it
is a system header, most of this is spreading plumbing around. Once we have that,
PPLexerChange bases its "file enter/exit" notifications to PPCallbacks to
base the system header state on FileIDInfo instead of HeaderSearch. Finally,
in Preprocessor::HandleIncludeDirective, mirror logic in GCC: the system headerness
of a file being entered can be set due to the #includer or the #includee.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56688 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Lex/PPLexerChange.cpp b/lib/Lex/PPLexerChange.cpp
index d1c44cf..1522bf5 100644
--- a/lib/Lex/PPLexerChange.cpp
+++ b/lib/Lex/PPLexerChange.cpp
@@ -78,7 +78,7 @@
Lexer *TheLexer = new Lexer(SourceLocation::getFileLoc(FileID, 0), *this);
EnterSourceFileWithLexer(TheLexer, CurDir);
}
-
+
/// EnterSourceFile - Add a source file to the top of the include stack and
/// start lexing tokens from it instead of the current buffer.
void Preprocessor::EnterSourceFileWithLexer(Lexer *TheLexer,
@@ -95,12 +95,10 @@
// Notify the client, if desired, that we are in a new source file.
if (Callbacks && !CurLexer->Is_PragmaLexer) {
- DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
-
- // Get the file entry for the current file.
- if (const FileEntry *FE =
- SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
- FileType = HeaderInfo.getFileDirFlavor(FE);
+ DirectoryLookup::DirType FileType =
+ // FIXME:
+ (DirectoryLookup::DirType)
+ SourceMgr.getDirCharacteristic(CurLexer->getFileLoc());
Callbacks->FileChanged(CurLexer->getFileLoc(),
PPCallbacks::EnterFile, FileType);
@@ -182,13 +180,11 @@
// Notify the client, if desired, that we are in a new source file.
if (Callbacks && !isEndOfMacro && CurLexer) {
- DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
+ DirectoryLookup::DirType FileType =
+ // FIXME:
+ (DirectoryLookup::DirType)
+ SourceMgr.getDirCharacteristic(CurLexer->getFileLoc());
- // Get the file entry for the current file.
- if (const FileEntry *FE =
- SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
- FileType = HeaderInfo.getFileDirFlavor(FE);
-
Callbacks->FileChanged(CurLexer->getSourceLocation(CurLexer->BufferPtr),
PPCallbacks::ExitFile, FileType);
}