diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-12 23:37:00 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-09-12 23:37:00 +0000 |
commit | 13897ebb002d7d3466fdfe7cce7c7538f74e0a9e (patch) | |
tree | d804aeb73deedeb82b8c8056feed89927feac17c /clang/lib/Serialization/ASTReaderDecl.cpp | |
parent | 841dbda3ba74ee5a2daa3037d78a877900bde339 (diff) | |
download | bcm5719-llvm-13897ebb002d7d3466fdfe7cce7c7538f74e0a9e.tar.gz bcm5719-llvm-13897ebb002d7d3466fdfe7cce7c7538f74e0a9e.zip |
Track definition merging on the canonical declaration even when local
submodule visibility is disabled.
Attempting to pick a specific declaration to make visible when the
module containing the merged declaration becomes visible is error-prone,
as we don't yet know which declaration we'll choose to be the definition
when we are informed of the merging.
This reinstates r342019, reverted in r342020. The regression previously
observed after this commit was fixed in r342096.
llvm-svn: 342097
Diffstat (limited to 'clang/lib/Serialization/ASTReaderDecl.cpp')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 00fad25eeac..82951074764 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -4419,22 +4419,9 @@ void ASTDeclReader::UpdateDecl(Decl *D, case UPD_DECL_EXPORTED: { unsigned SubmoduleID = readSubmoduleID(); auto *Exported = cast<NamedDecl>(D); - if (auto *TD = dyn_cast<TagDecl>(Exported)) - Exported = TD->getDefinition(); Module *Owner = SubmoduleID ? Reader.getSubmodule(SubmoduleID) : nullptr; - if (Reader.getContext().getLangOpts().ModulesLocalVisibility) { - Reader.getContext().mergeDefinitionIntoModule(cast<NamedDecl>(Exported), - Owner); - Reader.PendingMergedDefinitionsToDeduplicate.insert( - cast<NamedDecl>(Exported)); - } else if (Owner && Owner->NameVisibility != Module::AllVisible) { - // If Owner is made visible at some later point, make this declaration - // visible too. - Reader.HiddenNamesMap[Owner].push_back(Exported); - } else { - // The declaration is now visible. - Exported->setVisibleDespiteOwningModule(); - } + Reader.getContext().mergeDefinitionIntoModule(Exported, Owner); + Reader.PendingMergedDefinitionsToDeduplicate.insert(Exported); break; } |