From bc8836651fba3304d92e1025ff6a918f25e9e209 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 26 Feb 2020 16:29:37 -0800 Subject: Forward declare FileEntry and DirectoryEntry in Module.h FileManager.h is an expensive header (~350ms for me in isolation), so try to do without it. Notably, we need to avoid checking the alignment of FileEntry, which happens for DenseMap and PointerUnion. I adjusted the code to avoid PointerUnion, and moved the DenseMap insertion to the .cpp file. Globally, this only saved about ~17 includes of the related headers because SourceManager.h still includes FileManager.h, and it is more popular than Module.h. --- clang/lib/Lex/ModuleMap.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'clang/lib/Lex/ModuleMap.cpp') diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index 6622339..1c340f3 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -1105,6 +1105,7 @@ void ModuleMap::setUmbrellaHeader(Module *Mod, const FileEntry *UmbrellaHeader, Twine NameAsWritten) { Headers[UmbrellaHeader].push_back(KnownHeader(Mod, NormalHeader)); Mod->Umbrella = UmbrellaHeader; + Mod->HasUmbrellaDir = false; Mod->UmbrellaAsWritten = NameAsWritten.str(); UmbrellaDirs[UmbrellaHeader->getDir()] = Mod; @@ -1116,6 +1117,7 @@ void ModuleMap::setUmbrellaHeader(Module *Mod, const FileEntry *UmbrellaHeader, void ModuleMap::setUmbrellaDir(Module *Mod, const DirectoryEntry *UmbrellaDir, Twine NameAsWritten) { Mod->Umbrella = UmbrellaDir; + Mod->HasUmbrellaDir = true; Mod->UmbrellaAsWritten = NameAsWritten.str(); UmbrellaDirs[UmbrellaDir] = Mod; } -- cgit v1.1