arguments. This happens in clang itself where template:
template <typename T> T const *getAs();
gets specialized with:
template<> inline clang::TypedefType const *getAs() { ... }
and there's no TemplateArgumentList.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109127
91177308-0d34-0410-b5e6-
96231b3b80d8
D->getTemplateSpecializationInfo()) {
if (FTSI->getTemplateSpecializationKind() != TSK_Undeclared &&
FTSI->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) {
- const TemplateArgumentListInfo *TALI = FTSI->TemplateArgumentsAsWritten;
- TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getArgumentArray(),
- TALI->size()));
+ // A specialization might not have explicit template arguments if it has
+ // a templated return type and concrete arguments.
+ if (const TemplateArgumentListInfo *TALI =
+ FTSI->TemplateArgumentsAsWritten) {
+ TRY_TO(TraverseTemplateArgumentLocsHelper(TALI->getArgumentArray(),
+ TALI->size()));
+ }
}
}