diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-04-16 18:46:26 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-04-16 18:46:26 +0000 |
commit | 78158af59ca5713a1b99e4a91ad787a2c1a604bc (patch) | |
tree | 9e287bb77161f3e4f8e2ce299b6879bca89bc991 /clang/lib/AST/Decl.cpp | |
parent | 12da79b859c507accdaae9430dea05b42a7373df (diff) | |
download | bcm5719-llvm-78158af59ca5713a1b99e4a91ad787a2c1a604bc.tar.gz bcm5719-llvm-78158af59ca5713a1b99e4a91ad787a2c1a604bc.zip |
Revert r154749 for now at John McCall's request.
llvm-svn: 154846
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r-- | clang/lib/AST/Decl.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index ef833d8c7db..a3196b22f07 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -273,6 +273,25 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, LVFlags F) { LinkageInfo LV; LV.mergeVisibility(Context.getLangOpts().getVisibilityMode()); + if (F.ConsiderVisibilityAttributes) { + if (llvm::Optional<Visibility> Vis = D->getExplicitVisibility()) { + LV.setVisibility(*Vis, true); + } else { + // If we're declared in a namespace with a visibility attribute, + // use that namespace's visibility, but don't call it explicit. + for (const DeclContext *DC = D->getDeclContext(); + !isa<TranslationUnitDecl>(DC); + DC = DC->getParent()) { + const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC); + if (!ND) continue; + if (llvm::Optional<Visibility> Vis = ND->getExplicitVisibility()) { + LV.setVisibility(*Vis, true); + break; + } + } + } + } + // C++ [basic.link]p4: // A name having namespace scope has external linkage if it is the @@ -443,25 +462,6 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D, LVFlags F) { return LinkageInfo::none(); } - if (F.ConsiderVisibilityAttributes) { - if (llvm::Optional<Visibility> Vis = D->getExplicitVisibility()) { - LV.setVisibility(*Vis, true); - } else { - // If we're declared in a namespace with a visibility attribute, - // use that namespace's visibility, but don't call it explicit. - for (const DeclContext *DC = D->getDeclContext(); - !isa<TranslationUnitDecl>(DC); - DC = DC->getParent()) { - const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(DC); - if (!ND) continue; - if (llvm::Optional<Visibility> Vis = ND->getExplicitVisibility()) { - LV.setVisibility(*Vis, true); - break; - } - } - } - } - // If we ended up with non-external linkage, visibility should // always be default. if (LV.linkage() != ExternalLinkage) |