diff options
author | Eric Liu <ioeric@google.com> | 2016-09-14 10:05:10 +0000 |
---|---|---|
committer | Eric Liu <ioeric@google.com> | 2016-09-14 10:05:10 +0000 |
commit | 762b4887c23edfd0bcb02471ae573f73e5a53c4b (patch) | |
tree | e08b81dc2f8321a1085727cace7375ac8b6765fc /clang/lib/Serialization/ASTReader.cpp | |
parent | 9790d8f81d3d8a8a90040be70a3a897a343f6ed9 (diff) | |
download | bcm5719-llvm-762b4887c23edfd0bcb02471ae573f73e5a53c4b.tar.gz bcm5719-llvm-762b4887c23edfd0bcb02471ae573f73e5a53c4b.zip |
Revert "[modules] When merging one definition into another, propagate the list of re-exporting modules from the discarded definition to the retained definition."
This reverts commit r281429.
llvm-svn: 281452
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index a46d2d21d2f..9b51f3dae52 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3474,10 +3474,23 @@ void ASTReader::makeModuleVisible(Module *Mod, /// visible. void ASTReader::mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef) { + // FIXME: This doesn't correctly handle the case where MergedDef is visible + // in modules other than its owning module. We should instead give the + // ASTContext a list of merged definitions for Def. if (Def->isHidden()) { // If MergedDef is visible or becomes visible, make the definition visible. - getContext().mergeDefinitionIntoModulesOf(Def, MergedDef); - PendingMergedDefinitionsToDeduplicate.insert(Def); + if (!MergedDef->isHidden()) + Def->Hidden = false; + else if (getContext().getLangOpts().ModulesLocalVisibility) { + getContext().mergeDefinitionIntoModule( + Def, MergedDef->getImportedOwningModule(), + /*NotifyListeners*/ false); + PendingMergedDefinitionsToDeduplicate.insert(Def); + } else { + auto SubmoduleID = MergedDef->getOwningModuleID(); + assert(SubmoduleID && "hidden definition in no module"); + HiddenNamesMap[getSubmodule(SubmoduleID)].push_back(Def); + } } } @@ -8608,7 +8621,7 @@ void ASTReader::finishPendingActions() { const FunctionDecl *Defn = nullptr; if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) FD->setLazyBody(PB->second); - else if (FD != Defn) + else mergeDefinitionVisibility(const_cast<FunctionDecl*>(Defn), FD); continue; } |