diff options
author | Ben Langmuir <blangmuir@apple.com> | 2014-08-12 16:42:33 +0000 |
---|---|---|
committer | Ben Langmuir <blangmuir@apple.com> | 2014-08-12 16:42:33 +0000 |
commit | 4b8a9e951e09dc1182e5790ccdd35b0a69c414e8 (patch) | |
tree | 4ec39ae4351dbda93d6d76a2c66391c8b24894f7 /clang/lib/Serialization/ASTWriter.cpp | |
parent | 87ecb89f3ba70798ccc9b5db365a182359183361 (diff) | |
download | bcm5719-llvm-4b8a9e951e09dc1182e5790ccdd35b0a69c414e8.tar.gz bcm5719-llvm-4b8a9e951e09dc1182e5790ccdd35b0a69c414e8.zip |
Verify all the module map files for a pcm are the same on load
We already verified the primary module map file (either the one that
defines the top-level module, or the one that allows inferring it if it
is an inferred framework module). Now we also verify any other module
map files that define submodules, such as when there is a
module.private.modulemap file.
llvm-svn: 215455
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index dadbd12b23d..ccd57086c38 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -1134,18 +1134,28 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context, // Module map file if (WritingModule) { - BitCodeAbbrev *Abbrev = new BitCodeAbbrev(); - Abbrev->Add(BitCodeAbbrevOp(MODULE_MAP_FILE)); - Abbrev->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Blob)); // Filename - unsigned AbbrevCode = Stream.EmitAbbrev(Abbrev); + Record.clear(); + auto addModMap = [&](const FileEntry *F) { + SmallString<128> ModuleMap(F->getName()); + llvm::sys::fs::make_absolute(ModuleMap); + AddString(ModuleMap.str(), Record); + }; - const FileEntry *ModMapFile = PP.getHeaderSearchInfo().getModuleMap(). - getModuleMapFileForUniquing(WritingModule); - SmallString<128> ModuleMap(ModMapFile->getName()); - llvm::sys::fs::make_absolute(ModuleMap); - RecordData Record; - Record.push_back(MODULE_MAP_FILE); - Stream.EmitRecordWithBlob(AbbrevCode, Record, ModuleMap.str()); + auto &Map = PP.getHeaderSearchInfo().getModuleMap(); + + // Primary module map file. + addModMap(Map.getModuleMapFileForUniquing(WritingModule)); + + // Additional module map files. + if (auto *AdditionalModMaps = Map.getAdditionalModuleMapFiles(WritingModule)) { + Record.push_back(AdditionalModMaps->size()); + for (const FileEntry *F : *AdditionalModMaps) + addModMap(F); + } else { + Record.push_back(0); + } + + Stream.EmitRecord(MODULE_MAP_FILE, Record); } // Imports |