diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-12 21:06:40 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-12 21:06:40 +0000 |
commit | 6561f92b6237b17006a4b25f72a0085972b7765a (patch) | |
tree | 997983c1144f035d25eb8e40d60b17b12608cd2f /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 2f98f31c77a9db44eae9fef9be79611735e150b2 (diff) | |
download | bcm5719-llvm-6561f92b6237b17006a4b25f72a0085972b7765a.tar.gz bcm5719-llvm-6561f92b6237b17006a4b25f72a0085972b7765a.zip |
[modules] When we merge two definitions of a function, mark the retained
definition as visible in the discarded definition's module, as we do for
other kinds of definition.
llvm-svn: 281258
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 70c7b7808c4..d68d6d308a7 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -383,27 +383,6 @@ namespace clang { void VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D); void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D); void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D); - - /// We've merged the definition \p MergedDef into the existing definition - /// \p Def. Ensure that \p Def is made visible whenever \p MergedDef is made - /// visible. - void mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef) { - if (Def->isHidden()) { - // If MergedDef is visible or becomes visible, make the definition visible. - if (!MergedDef->isHidden()) - Def->Hidden = false; - else if (Reader.getContext().getLangOpts().ModulesLocalVisibility) { - Reader.getContext().mergeDefinitionIntoModule( - Def, MergedDef->getImportedOwningModule(), - /*NotifyListeners*/ false); - Reader.PendingMergedDefinitionsToDeduplicate.insert(Def); - } else { - auto SubmoduleID = MergedDef->getOwningModuleID(); - assert(SubmoduleID && "hidden definition in no module"); - Reader.HiddenNamesMap[Reader.getSubmodule(SubmoduleID)].push_back(Def); - } - } - } }; } // end namespace clang @@ -710,7 +689,7 @@ void ASTDeclReader::VisitEnumDecl(EnumDecl *ED) { if (OldDef) { Reader.MergedDeclContexts.insert(std::make_pair(ED, OldDef)); ED->IsCompleteDefinition = false; - mergeDefinitionVisibility(OldDef, ED); + Reader.mergeDefinitionVisibility(OldDef, ED); } else { OldDef = ED; } @@ -1603,7 +1582,7 @@ void ASTDeclReader::MergeDefinitionData( DD.Definition)); Reader.PendingDefinitions.erase(MergeDD.Definition); MergeDD.Definition->IsCompleteDefinition = false; - mergeDefinitionVisibility(DD.Definition, MergeDD.Definition); + Reader.mergeDefinitionVisibility(DD.Definition, MergeDD.Definition); assert(Reader.Lookups.find(MergeDD.Definition) == Reader.Lookups.end() && "already loaded pending lookups for merged definition"); } |