diff options
-rw-r--r-- | lib/AST/Decl.cpp | 1 | ||||
-rw-r--r-- | test/CodeGenCXX/visibility-inlines-hidden.cpp | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 84a2a59ee2..f9e57bc706 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -568,6 +568,7 @@ static LinkageInfo getLVForClassMember(const NamedDecl *D, LVFlags F) { // about whether containing classes have visibility attributes, // and that's intentional. if (TSK != TSK_ExplicitInstantiationDeclaration && + TSK != TSK_ExplicitInstantiationDefinition && F.ConsiderGlobalVisibility && MD->getASTContext().getLangOptions().InlineVisibilityHidden) { // InlineVisibilityHidden only applies to definitions, and diff --git a/test/CodeGenCXX/visibility-inlines-hidden.cpp b/test/CodeGenCXX/visibility-inlines-hidden.cpp index f7fabed8c1..d660b1b410 100644 --- a/test/CodeGenCXX/visibility-inlines-hidden.cpp +++ b/test/CodeGenCXX/visibility-inlines-hidden.cpp @@ -97,3 +97,14 @@ namespace test2 { // CHECK: define available_externally void @_ZN5test22ns3fooINS_1BINS_1AEEEEEvv() } + +namespace PR11642 { + template <typename T> + class Foo { + public: + T foo(T x) { return x; } + }; + extern template class Foo<int>; + template class Foo<int>; + // CHECK: define weak_odr i32 @_ZN7PR116423FooIiE3fooEi +} |