diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2012-05-25 15:51:26 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2012-05-25 15:51:26 +0000 |
commit | a28bf63d9a248a6624fa35e459e9dd8087d0ac89 (patch) | |
tree | f52b995283f70043432b6e548d84e6e12b594246 /clang/lib/AST/Decl.cpp | |
parent | 3eca973bf890d0218c266994ca5795bf8b353ead (diff) | |
download | bcm5719-llvm-a28bf63d9a248a6624fa35e459e9dd8087d0ac89.tar.gz bcm5719-llvm-a28bf63d9a248a6624fa35e459e9dd8087d0ac89.zip |
Consider the linkage for member class templates even when we have to ignore
the visibility.
llvm-svn: 157475
Diffstat (limited to 'clang/lib/AST/Decl.cpp')
-rw-r--r-- | clang/lib/AST/Decl.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 979971c7c39..e8d7093a3fe 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -546,14 +546,22 @@ static LinkageInfo getLVForClassMember(const NamedDecl *D, bool OnlyTemplate) { } else if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(D)) { if (const ClassTemplateSpecializationDecl *spec = dyn_cast<ClassTemplateSpecializationDecl>(RD)) { + // Merge template argument/parameter information for member + // class template specializations. + const TemplateArgumentList &TemplateArgs = spec->getTemplateArgs(); + LinkageInfo ArgsLV = getLVForTemplateArgumentList(TemplateArgs, + OnlyTemplate); + TemplateParameterList *TemplateParams = + spec->getSpecializedTemplate()->getTemplateParameters(); + LinkageInfo ParamsLV = getLVForTemplateParameterList(TemplateParams); if (shouldConsiderTemplateVis(spec)) { - // Merge template argument/parameter information for member - // class template specializations. - LV.mergeWithMin(getLVForTemplateArgumentList(spec->getTemplateArgs(), - OnlyTemplate)); + LV.mergeWithMin(ArgsLV); if (!OnlyTemplate) - LV.merge(getLVForTemplateParameterList( - spec->getSpecializedTemplate()->getTemplateParameters())); + LV.merge(ParamsLV); + } else { + LV.mergeLinkage(ArgsLV); + if (!OnlyTemplate) + LV.mergeLinkage(ParamsLV); } } |