Parse inferred submodules in module maps, track their contents in
Module, and (de-)serialize this information. Semantics of inferred
submodules to follow.

llvm-svn: 145864
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 8d957e2..ebc1795 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -3049,11 +3049,19 @@
         return Failure;
       }
 
+      if (Record.size() < 6) {
+        Error("malformed module definition");
+        return Failure;
+      }
+      
       StringRef Name(BlobStart, BlobLen);
       unsigned Parent = getGlobalSubmoduleID(F, Record[0]);
       bool IsFramework = Record[1];
       bool IsExplicit = Record[2];
-
+      bool InferSubmodules = Record[3];
+      bool InferExplicitSubmodules = Record[4];
+      bool InferExportWildcard = Record[5];
+      
       Module *ParentModule = 0;
       if (Parent)
         ParentModule = getSubmodule(Parent);
@@ -3070,6 +3078,9 @@
         return Failure;
       }
       
+      CurrentModule->InferSubmodules = InferSubmodules;
+      CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
+      CurrentModule->InferExportWildcard = InferExportWildcard;
       if (DeserializationListener)
         DeserializationListener->ModuleRead(
           CurrentModuleGlobalIndex + NUM_PREDEF_SUBMODULE_IDS,