summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Decl.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2017-10-10 00:49:38 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2017-10-10 00:49:38 +0000
commita0b68be6cf16ee2742efdb53492f8112a5edbe70 (patch)
treec084d03d7b89122d61ce1392ebae5800b7b46abd /clang/lib/AST/Decl.cpp
parente6a0242ebc5f256d4589af4d0b87bee27962f5fe (diff)
downloadbcm5719-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.cpp4
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();
OpenPOWER on IntegriCloud