forked from OSchip/llvm-project
Don't ignore linkage when ignoring visibility in the instantiation of a
method template. llvm-svn: 157486
This commit is contained in:
parent
c98041d4d9
commit
67a498cc5f
|
@ -535,12 +535,20 @@ static LinkageInfo getLVForClassMember(const NamedDecl *D, bool OnlyTemplate) {
|
|||
// the template parameters and arguments.
|
||||
if (FunctionTemplateSpecializationInfo *spec
|
||||
= MD->getTemplateSpecializationInfo()) {
|
||||
const TemplateArgumentList &TemplateArgs = *spec->TemplateArguments;
|
||||
LinkageInfo ArgsLV = getLVForTemplateArgumentList(TemplateArgs,
|
||||
OnlyTemplate);
|
||||
TemplateParameterList *TemplateParams =
|
||||
spec->getTemplate()->getTemplateParameters();
|
||||
LinkageInfo ParamsLV = getLVForTemplateParameterList(TemplateParams);
|
||||
if (shouldConsiderTemplateVis(MD, spec)) {
|
||||
LV.mergeWithMin(getLVForTemplateArgumentList(*spec->TemplateArguments,
|
||||
OnlyTemplate));
|
||||
LV.mergeWithMin(ArgsLV);
|
||||
if (!OnlyTemplate)
|
||||
LV.merge(getLVForTemplateParameterList(
|
||||
spec->getTemplate()->getTemplateParameters()));
|
||||
LV.merge(ParamsLV);
|
||||
} else {
|
||||
LV.mergeLinkage(ArgsLV);
|
||||
if (!OnlyTemplate)
|
||||
LV.mergeLinkage(ParamsLV);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -864,3 +864,20 @@ namespace test46 {
|
|||
// CHECK: define internal void @_ZN6test463fooINS_12_GLOBAL__N_13barEEEvv
|
||||
// CHECK-HIDDEN: define internal void @_ZN6test463fooINS_12_GLOBAL__N_13barEEEvv
|
||||
}
|
||||
|
||||
namespace test47 {
|
||||
struct foo {
|
||||
template <typename T>
|
||||
static void bar() {
|
||||
}
|
||||
};
|
||||
namespace {
|
||||
struct zed;
|
||||
}
|
||||
template __attribute__((visibility("default"))) void foo::bar<zed>();
|
||||
void baz() {
|
||||
foo::bar<zed>();
|
||||
}
|
||||
// CHECK: define internal void @_ZN6test473foo3barINS_12_GLOBAL__N_13zedEEEvv
|
||||
// CHECK-HIDDEN: define internal void @_ZN6test473foo3barINS_12_GLOBAL__N_13zedEEEvv
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue