Merge pull request #39705 from apple/es-module-alias-serialize

[Module aliasing] Serialize SIL and binaries with module real names for referenced or imported modules. Resolves rdar://83632529
This commit is contained in:
Ellie Shin
2021-10-18 21:55:45 -07:00
committed by GitHub
20 changed files with 604 additions and 208 deletions

View File

@@ -755,8 +755,10 @@ IdentifierID Serializer::addModuleRef(const ModuleDecl *module) {
return CURRENT_MODULE_ID;
if (module == this->M->getASTContext().TheBuiltinModule)
return BUILTIN_MODULE_ID;
// Use module 'real name', which can be different from 'name'
// in case module aliasing was used (-module-alias flag)
auto moduleName =
module->getASTContext().getIdentifier(module->getName().str());
module->getASTContext().getIdentifier(module->getRealName().str());
return addDeclBaseNameRef(moduleName);
}
@@ -965,7 +967,9 @@ void Serializer::writeHeader(const SerializationOptions &options) {
control_block::RevisionLayout Revision(Out);
control_block::IsOSSALayout IsOSSA(Out);
ModuleName.emit(ScratchRecord, M->getName().str());
// Write module 'real name', which can be different from 'name'
// in case module aliasing is used (-module-alias flag)
ModuleName.emit(ScratchRecord, M->getRealName().str());
SmallString<32> versionStringBuf;
llvm::raw_svector_ostream versionString(versionStringBuf);
@@ -1105,6 +1109,8 @@ void Serializer::writeHeader(const SerializationOptions &options) {
static void flattenImportPath(const ImportedModule &import,
SmallVectorImpl<char> &out) {
llvm::raw_svector_ostream outStream(out);
// This will write the module 'real name', which can be different
// from the 'name' in case module aliasing was used (see `-module-alias`)
import.importedModule->getReverseFullModuleName().printForward(
outStream, StringRef("\0", 1));