Skip to content

Commit f45cb72

Browse files
[clang][modules] HeaderSearch::MarkFileModuleHeader creates extra HeaderFileInfo, breaks PCM reuse
HeaderSearch::MarkFileModuleHeader is no longer properly checking for no-changes, and so creates a new HeaderFileInfo for every `textual header`, causes PCM use to go ballistic.
1 parent 7505452 commit f45cb72

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

clang/lib/Lex/HeaderSearch.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1313,6 +1313,14 @@ OptionalFileEntryRef HeaderSearch::LookupSubframeworkHeader(
13131313
// File Info Management.
13141314
//===----------------------------------------------------------------------===//
13151315

1316+
static bool
1317+
headerFileInfoModuleBitsMatchRole(const HeaderFileInfo *HFI,
1318+
ModuleMap::ModuleHeaderRole Role) {
1319+
return (HFI->isModuleHeader == ModuleMap::isModular(Role)) &&
1320+
(HFI->isTextualModuleHeader ==
1321+
((Role & ModuleMap::TextualHeader) != 0));
1322+
}
1323+
13161324
static void mergeHeaderFileInfoModuleBits(HeaderFileInfo &HFI,
13171325
bool isModuleHeader,
13181326
bool isTextualModuleHeader) {
@@ -1432,7 +1440,7 @@ void HeaderSearch::MarkFileModuleHeader(FileEntryRef FE,
14321440
if ((Role & ModuleMap::ExcludedHeader))
14331441
return;
14341442
auto *HFI = getExistingFileInfo(FE);
1435-
if (HFI && HFI->isModuleHeader)
1443+
if (HFI && headerFileInfoModuleBitsMatchRole(HFI, Role))
14361444
return;
14371445
}
14381446

0 commit comments

Comments
 (0)