]> granicus.if.org Git - clang/commitdiff
Serialization: use the PCH chain to check PCH mode
authorSaleem Abdulrasool <compnerd@compnerd.org>
Thu, 2 Mar 2017 17:37:11 +0000 (17:37 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Thu, 2 Mar 2017 17:37:11 +0000 (17:37 +0000)
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

lib/Serialization/ASTReader.cpp

index e9cb51dec6ed69f0d5907b993f6f6fd0c1c174b2..3ec009afaa210c8ebc3aa3c854ade570d4c7cc99 100644 (file)
@@ -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);