diff options
author | John McCall <rjmccall@apple.com> | 2010-11-01 01:29:57 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-11-01 01:29:57 +0000 |
commit | 66cbcf3f150d075fead7c5935b6e9c61a32cf3d4 (patch) | |
tree | 7298de74af90ac11479966ac870003e6acece88b /lib/AST/Decl.cpp | |
parent | 6a3567442307864eac52bb84ce41465753513635 (diff) |
Only apply -fvisibility-inlines-hidden to definitions. Apparently
isInlined() just gives meaningless results for non-definitions.
Fixes rdar://problem/8614470
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117887 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Decl.cpp')
-rw-r--r-- | lib/AST/Decl.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 7469e8b27f..5eb9e8501e 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -459,9 +459,15 @@ static LinkageInfo getLVForClassMember(const NamedDecl *D, // about whether containing classes have visibility attributes, // and that's intentional. if (TSK != TSK_ExplicitInstantiationDeclaration && - ConsiderGlobalVisibility && MD->isInlined() && - MD->getASTContext().getLangOptions().InlineVisibilityHidden) - LV.setVisibility(HiddenVisibility); + ConsiderGlobalVisibility && + MD->getASTContext().getLangOptions().InlineVisibilityHidden) { + // InlineVisibilityHidden only applies to definitions, and + // isInlined() only gives meaningful answers on definitions + // anyway. + const FunctionDecl *Def = 0; + if (MD->hasBody(Def) && Def->isInlined()) + LV.setVisibility(HiddenVisibility); + } // Note that in contrast to basically every other situation, we // *do* apply -fvisibility to method declarations. |