[cfe-commits] r157207 - in /cfe/trunk: lib/AST/Decl.cpp test/CodeGenCXX/visibility.cpp
Rafael Espindola
rafael.espindola at gmail.com
Mon May 21 13:31:27 PDT 2012
Author: rafael
Date: Mon May 21 15:31:27 2012
New Revision: 157207
URL: http://llvm.org/viewvc/llvm-project?rev=157207&view=rev
Log:
Function template version of the previous patch.
Modified:
cfe/trunk/lib/AST/Decl.cpp
cfe/trunk/test/CodeGenCXX/visibility.cpp
Modified: cfe/trunk/lib/AST/Decl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=157207&r1=157206&r2=157207&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Decl.cpp (original)
+++ cfe/trunk/lib/AST/Decl.cpp Mon May 21 15:31:27 2012
@@ -158,8 +158,9 @@
return getLVForTemplateArgumentList(TArgs.data(), TArgs.size(), OnlyTemplate);
}
-static bool shouldConsiderTemplateLV(const FunctionDecl *fn) {
- return !fn->hasAttr<VisibilityAttr>();
+static bool shouldConsiderTemplateLV(const FunctionDecl *fn,
+ const FunctionTemplateSpecializationInfo *spec) {
+ return !fn->hasAttr<VisibilityAttr>() || spec->isExplicitSpecialization();
}
static bool shouldConsiderTemplateLV(const ClassTemplateSpecializationDecl *d) {
@@ -374,7 +375,7 @@
// this is an explicit specialization with a visibility attribute.
if (FunctionTemplateSpecializationInfo *specInfo
= Function->getTemplateSpecializationInfo()) {
- if (shouldConsiderTemplateLV(Function)) {
+ if (shouldConsiderTemplateLV(Function, specInfo)) {
LV.merge(getLVForDecl(specInfo->getTemplate(),
true));
const TemplateArgumentList &templateArgs = *specInfo->TemplateArguments;
@@ -525,7 +526,7 @@
// the template parameters and arguments.
if (FunctionTemplateSpecializationInfo *spec
= MD->getTemplateSpecializationInfo()) {
- if (shouldConsiderTemplateLV(MD)) {
+ if (shouldConsiderTemplateLV(MD, spec)) {
LV.mergeWithMin(getLVForTemplateArgumentList(*spec->TemplateArguments,
OnlyTemplate));
if (!OnlyTemplate)
Modified: cfe/trunk/test/CodeGenCXX/visibility.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/visibility.cpp?rev=157207&r1=157206&r2=157207&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/visibility.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/visibility.cpp Mon May 21 15:31:27 2012
@@ -805,3 +805,16 @@
// CHECK: define hidden void @_ZN6test423barINS_3fooEE3zedEv
// CHECK-HIDDEN: define hidden void @_ZN6test423barINS_3fooEE3zedEv
}
+
+namespace test43 {
+ struct HIDDEN foo {
+ };
+ template <class P>
+ void bar() {
+ }
+ template <>
+ DEFAULT void bar<foo>() {
+ }
+ // CHECK: define hidden void @_ZN6test433barINS_3fooEEEvv
+ // CHECK-HIDDEN: define hidden void @_ZN6test433barINS_3fooEEEvv
+}
More information about the cfe-commits
mailing list