summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-12-05 22:27:44 +0000
committerDouglas Gregor <dgregor@apple.com>2011-12-05 22:27:44 +0000
commit734410916a6d83c70dffcecae1686a15f8a50d71 (patch)
treee9a9a5bb8f2c3e95032bf5535d942826848225ad /clang/lib/Serialization
parentb8c719ccc6af14b1ba4d19f406a20e0b2b87bf88 (diff)
downloadbcm5719-llvm-734410916a6d83c70dffcecae1686a15f8a50d71.tar.gz
bcm5719-llvm-734410916a6d83c70dffcecae1686a15f8a50d71.zip
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
Diffstat (limited to 'clang/lib/Serialization')
-rw-r--r--clang/lib/Serialization/ASTReader.cpp13
-rw-r--r--clang/lib/Serialization/ASTWriter.cpp6
2 files changed, 18 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 8d957e26335..ebc1795a268 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -3049,11 +3049,19 @@ ASTReader::ASTReadResult ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
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 @@ ASTReader::ASTReadResult ASTReader::ReadSubmoduleBlock(ModuleFile &F) {
return Failure;
}
+ CurrentModule->InferSubmodules = InferSubmodules;
+ CurrentModule->InferExplicitSubmodules = InferExplicitSubmodules;
+ CurrentModule->InferExportWildcard = InferExportWildcard;
if (DeserializationListener)
DeserializationListener->ModuleRead(
CurrentModuleGlobalIndex + NUM_PREDEF_SUBMODULE_IDS,
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index 3e91e55228e..d31eef9e19a 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -1884,6 +1884,9 @@ void ASTWriter::WriteSubmodules(Module *WritingModule) {
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Parent
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsFramework
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsExplicit
+ Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferExplicit...
+ Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // IsExplicit
+ Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // InferExportWild...
Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Name
unsigned DefinitionAbbrev = Stream.EmitAbbrev(Abbrev);
@@ -1923,6 +1926,9 @@ void ASTWriter::WriteSubmodules(Module *WritingModule) {
}
Record.push_back(Mod->IsFramework);
Record.push_back(Mod->IsExplicit);
+ Record.push_back(Mod->InferSubmodules);
+ Record.push_back(Mod->InferExplicitSubmodules);
+ Record.push_back(Mod->InferExportWildcard);
Stream.EmitRecordWithBlob(DefinitionAbbrev, Record, Mod->Name);
// Emit the umbrella header, if there is one.
OpenPOWER on IntegriCloud