diff --git a/clang/include/clang/Lex/HeaderSearch.h b/clang/include/clang/Lex/HeaderSearch.h --- a/clang/include/clang/Lex/HeaderSearch.h +++ b/clang/include/clang/Lex/HeaderSearch.h @@ -51,7 +51,7 @@ /// The preprocessor keeps track of this information for each /// file that is \#included. struct HeaderFileInfo { - /// True if this is a \#import'd or \#pragma once file. + /// True if this is a \#import'd file. unsigned isImport : 1; /// True if this is a \#pragma once file. @@ -450,11 +450,10 @@ return (SrcMgr::CharacteristicKind)getFileInfo(File).DirInfo; } - /// Mark the specified file as a "once only" file, e.g. due to + /// Mark the specified file as a "once only" file due to /// \#pragma once. void MarkFileIncludeOnce(const FileEntry *File) { HeaderFileInfo &FI = getFileInfo(File); - FI.isImport = true; FI.isPragmaOnce = true; } @@ -500,8 +499,7 @@ /// This routine does not consider the effect of \#import bool isFileMultipleIncludeGuarded(const FileEntry *File); - /// Determine whether the given file is known to have ever been \#imported - /// (or if it has been \#included and we've encountered a \#pragma once). + /// Determine whether the given file is known to have ever been \#imported. bool hasFileBeenImported(const FileEntry *File) { const HeaderFileInfo *FI = getExistingFileInfo(File); return FI && FI->isImport; diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp --- a/clang/lib/Lex/HeaderSearch.cpp +++ b/clang/lib/Lex/HeaderSearch.cpp @@ -91,7 +91,7 @@ << FileInfo.size() << " files tracked.\n"; unsigned NumOnceOnlyFiles = 0, MaxNumIncludes = 0, NumSingleIncludedFiles = 0; for (unsigned i = 0, e = FileInfo.size(); i != e; ++i) { - NumOnceOnlyFiles += FileInfo[i].isImport; + NumOnceOnlyFiles += (FileInfo[i].isPragmaOnce || FileInfo[i].isImport); if (MaxNumIncludes < FileInfo[i].NumIncludes) MaxNumIncludes = FileInfo[i].NumIncludes; NumSingleIncludedFiles += FileInfo[i].NumIncludes == 1; @@ -1325,7 +1325,7 @@ } else { // Otherwise, if this is a #include of a file that was previously #import'd // or if this is the second #include of a #pragma once file, ignore it. - if (FileInfo.isImport && !TryEnterImported()) + if ((FileInfo.isPragmaOnce || FileInfo.isImport) && !TryEnterImported()) return false; }