summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Decl.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-05-25 17:22:33 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-05-25 17:22:33 +0000
commit67a498cc5fff03c5df11bc14d1913ce67e670528 (patch)
tree540be01374fb8635ccbb4fe2ab2b74ceb282208d /clang/lib/AST/Decl.cpp
parentc98041d4d9db109a5e4504e4751ccab4b4b25191 (diff)
downloadbcm5719-llvm-67a498cc5fff03c5df11bc14d1913ce67e670528.tar.gz
bcm5719-llvm-67a498cc5fff03c5df11bc14d1913ce67e670528.zip
Don't ignore linkage when ignoring visibility in the instantiation of a
method template. llvm-svn: 157486
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r--clang/lib/AST/Decl.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index 405c2b328f9..0ca36cbb14b 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -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);
}
}
OpenPOWER on IntegriCloud