Function template version of the previous patch.

llvm-svn: 157207
This commit is contained in:
Rafael Espindola 2012-05-21 20:31:27 +00:00
parent 93c289c28a
commit 96dcb8d4bb
2 changed files with 18 additions and 4 deletions

View File

@ -158,8 +158,9 @@ getLVForTemplateArgumentList(const TemplateArgumentList &TArgs,
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 @@ static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D,
// 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 @@ static LinkageInfo getLVForClassMember(const NamedDecl *D, bool OnlyTemplate) {
// 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)

View File

@ -805,3 +805,16 @@ namespace test42 {
// 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
}