diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-14 01:05:35 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-14 01:05:35 +0000 |
commit | 1c16d1b576bc215fa116a025efa4fca7090d6b5c (patch) | |
tree | 0b3ca31d483da069d69bf85f2956caa072d26710 /clang/lib/Serialization/ASTReader.cpp | |
parent | 5085710892a0284899044c143d299fbaa726ffc9 (diff) | |
download | bcm5719-llvm-1c16d1b576bc215fa116a025efa4fca7090d6b5c.tar.gz bcm5719-llvm-1c16d1b576bc215fa116a025efa4fca7090d6b5c.zip |
[modules] When merging one definition into another, propagate the list of
re-exporting modules from the discarded definition to the retained definition.
llvm-svn: 281429
Diffstat (limited to 'clang/lib/Serialization/ASTReader.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 9b51f3dae52..a46d2d21d2f 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3474,23 +3474,10 @@ 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. - 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); - } + getContext().mergeDefinitionIntoModulesOf(Def, MergedDef); + PendingMergedDefinitionsToDeduplicate.insert(Def); } } @@ -8621,7 +8608,7 @@ void ASTReader::finishPendingActions() { const FunctionDecl *Defn = nullptr; if (!getContext().getLangOpts().Modules || !FD->hasBody(Defn)) FD->setLazyBody(PB->second); - else + else if (FD != Defn) mergeDefinitionVisibility(const_cast<FunctionDecl*>(Defn), FD); continue; } |