From: Saleem Abdulrasool Date: Thu, 2 Mar 2017 17:37:11 +0000 (+0000) Subject: Serialization: use the PCH chain to check PCH mode X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9f74368da35396f99f4da2f2addcad61262c63d8;p=clang Serialization: use the PCH chain to check PCH mode When we are deciding whether we are creating a PCH or a module, we would check if the ModuleMgr had any elements to switch into PCH mode. However, when creating a module, the size may be 1. This would result in us going down the wrong path. This was found by cross-compiling the swift standard library. Use the PCH chain length instead to identify the PCH mode. Unfortunately, I have not yet been able to create a simple test case for this, but have verified that this fixes the swift standard library construction. Thanks to Adrian Prantl for help and discussions with this change! git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@296769 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index e9cb51dec6..3ec009afaa 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -7928,7 +7928,8 @@ ASTReader::getSourceDescriptor(unsigned ID) { // If there is only a single PCH, return it instead. // Chained PCH are not suported. - if (ModuleMgr.size() == 1) { + const auto &PCHChain = ModuleMgr.pch_modules(); + if (std::distance(std::begin(PCHChain), std::end(PCHChain))) { ModuleFile &MF = ModuleMgr.getPrimaryModule(); StringRef ModuleName = llvm::sys::path::filename(MF.OriginalSourceFileName); StringRef FileName = llvm::sys::path::filename(MF.FileName);