diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-12-25 00:39:58 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-12-25 00:39:58 +0000 |
commit | f92a59f0cb84d91cb34986b98c6516ed8abba6d7 (patch) | |
tree | 8268a88575c95d2e09bd867719438b068a1a6f20 /clang/lib/Sema/SemaAttr.cpp | |
parent | fe73ac34c5a4aabd3f95f71f21257ab90ce6165c (diff) | |
download | bcm5719-llvm-f92a59f0cb84d91cb34986b98c6516ed8abba6d7.tar.gz bcm5719-llvm-f92a59f0cb84d91cb34986b98c6516ed8abba6d7.zip |
Cache visibility of decls.
This unifies the linkage and visibility caching. I first implemented this when
working on pr13844, but the previous fixes removed the performance advantage of
this one.
This is still a step in the right direction for making linkage and visibility
cheap to use.
llvm-svn: 171048
Diffstat (limited to 'clang/lib/Sema/SemaAttr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaAttr.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaAttr.cpp b/clang/lib/Sema/SemaAttr.cpp index 4406f2d956a..3bfb8f22b46 100644 --- a/clang/lib/Sema/SemaAttr.cpp +++ b/clang/lib/Sema/SemaAttr.cpp @@ -309,7 +309,8 @@ void Sema::AddPushedVisibilityAttribute(Decl *D) { if (!VisContext) return; - if (isa<NamedDecl>(D) && cast<NamedDecl>(D)->getExplicitVisibility()) + NamedDecl *ND = dyn_cast<NamedDecl>(D); + if (ND && ND->getExplicitVisibility()) return; VisStack *Stack = static_cast<VisStack*>(VisContext); @@ -320,6 +321,7 @@ void Sema::AddPushedVisibilityAttribute(Decl *D) { = (VisibilityAttr::VisibilityType) rawType; SourceLocation loc = Stack->back().second; + ND->ClearLVCache(); D->addAttr(::new (Context) VisibilityAttr(loc, Context, type)); } |