diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-05-25 17:22:33 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-05-25 17:22:33 +0000 |
commit | 67a498cc5fff03c5df11bc14d1913ce67e670528 (patch) | |
tree | 540be01374fb8635ccbb4fe2ab2b74ceb282208d /clang/lib/AST/Decl.cpp | |
parent | c98041d4d9db109a5e4504e4751ccab4b4b25191 (diff) | |
download | bcm5719-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.cpp | 16 |
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); } } |