[clang] Store the template param list of an explicit variable template specialization
VarTemplateSpecializationDecl does not store a template param list, so the "template<>" needs to be stored in the ExtInfo. Differential Revision: https://reviews.llvm.org/D142692
This commit is contained in:
parent
e9a88b6178
commit
6b50bfc8f2
@ -892,7 +892,7 @@ sizeof...($TemplateParameter[[Elements]]);
|
||||
|
||||
template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]]
|
||||
$TemplateParameter[[T]] $Variable_def[[x]] = {};
|
||||
template <>
|
||||
template $Bracket[[<]]$Bracket[[>]]
|
||||
int $Variable_def[[x]]$Bracket[[<]]int$Bracket[[>]] = (int)sizeof($Class[[Base]]);
|
||||
)cpp",
|
||||
// operator calls in template
|
||||
@ -977,7 +977,7 @@ $Bracket[[>]]$Bracket[[>]] $LocalVariable_def[[s6]];
|
||||
}
|
||||
template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]] constexpr int $Variable_def_readonly[[V]] = 42;
|
||||
constexpr int $Variable_def_readonly[[Y]] = $Variable_readonly[[V]]$Bracket[[<]]char$Bracket[[>]];
|
||||
template <>
|
||||
template $Bracket[[<]]$Bracket[[>]]
|
||||
constexpr int $Variable_def_readonly[[V]]$Bracket[[<]]int$Bracket[[>]] = 5;
|
||||
template $Bracket[[<]]typename $TemplateParameter_def[[T]]$Bracket[[>]]
|
||||
constexpr int $Variable_def_readonly[[V]]$Bracket[[<]]$TemplateParameter[[T]]*$Bracket[[>]] = 6;
|
||||
|
||||
@ -7674,7 +7674,12 @@ NamedDecl *Sema::ActOnVariableDeclarator(
|
||||
|
||||
// If we have any template parameter lists that don't directly belong to
|
||||
// the variable (matching the scope specifier), store them.
|
||||
unsigned VDTemplateParamLists = TemplateParams ? 1 : 0;
|
||||
// An explicit variable template specialization does not own any template
|
||||
// parameter lists.
|
||||
bool IsExplicitSpecialization =
|
||||
IsVariableTemplateSpecialization && !IsPartialSpecialization;
|
||||
unsigned VDTemplateParamLists =
|
||||
(TemplateParams && !IsExplicitSpecialization) ? 1 : 0;
|
||||
if (TemplateParamLists.size() > VDTemplateParamLists)
|
||||
NewVD->setTemplateParameterListsInfo(
|
||||
Context, TemplateParamLists.drop_back(VDTemplateParamLists));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user