diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp
index 7c83641256a74586f5f104acd3d28db2215e0d2a..1d692c8d7f438e31d1107d014541b89402ade52d 100644
--- a/lib/Serialization/ASTReader.cpp
+++ b/lib/Serialization/ASTReader.cpp
@@ -7268,8 +7268,7 @@ unsigned ASTReader::getModuleFileID(ModuleFile *F) {
   // files loaded beforehand will be the same on reload.
   // FIXME: Is this true even if we have an explicit module file and a PCH?
   if (F->isModule())
-    // FIXME: BaseSubmoduleID appears to be off by one.
-    return ((F->BaseSubmoduleID + 1) << 1) | 1;
+    return ((F->BaseSubmoduleID + NUM_PREDEF_SUBMODULE_IDS) << 1) | 1;
 
   auto PCHModules = getModuleManager().pch_modules();
   auto I = std::find(PCHModules.begin(), PCHModules.end(), F);