diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-10 00:49:38 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-10-10 00:49:38 +0000 |
commit | a0b68be6cf16ee2742efdb53492f8112a5edbe70 (patch) | |
tree | c084d03d7b89122d61ce1392ebae5800b7b46abd /clang/lib/AST/Decl.cpp | |
parent | e6a0242ebc5f256d4589af4d0b87bee27962f5fe (diff) | |
download | bcm5719-llvm-a0b68be6cf16ee2742efdb53492f8112a5edbe70.tar.gz bcm5719-llvm-a0b68be6cf16ee2742efdb53492f8112a5edbe70.zip |
[Modules TS] Avoid computing the linkage of the enclosing DeclContext for a declaration in the global module.
This works around a language issue where adding a typedef name for linkage
purposes changes the linkage of an already-defined class after it becomes
complete.
llvm-svn: 315256
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r-- | clang/lib/AST/Decl.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index cdd89d20e6b..4a9b9bea830 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1395,7 +1395,7 @@ LinkageInfo LinkageComputer::getDeclLinkageAndVisibility(const NamedDecl *D) { : NamedDecl::VisibilityForValue)); } -Module *Decl::getOwningModuleForLinkage() const { +Module *Decl::getOwningModuleForLinkage(bool IgnoreLinkage) const { Module *M = getOwningModule(); if (!M) return nullptr; @@ -1413,6 +1413,8 @@ Module *Decl::getOwningModuleForLinkage() const { // for linkage purposes. But internal linkage declarations in the global // module fragment of a particular module are owned by that module for // linkage purposes. + if (IgnoreLinkage) + return nullptr; bool InternalLinkage; if (auto *ND = dyn_cast<NamedDecl>(this)) InternalLinkage = !ND->hasExternalFormalLinkage(); |