Skip to content

Commit 7a789e3

Browse files
committed
Extract a function
1 parent 2ce86d8 commit 7a789e3

File tree

1 file changed

+15
-21
lines changed

1 file changed

+15
-21
lines changed

clang/lib/Sema/SemaTemplateInstantiate.cpp

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,6 +1466,18 @@ namespace {
14661466
}
14671467
}
14681468

1469+
static TemplateArgument
1470+
getTemplateArgumentPackPatternForRewrite(const TemplateArgument &TA) {
1471+
if (TA.getKind() != TemplateArgument::Pack)
1472+
return TA;
1473+
assert(TA.pack_size() == 1 &&
1474+
"unexpected pack arguments in template rewrite");
1475+
TemplateArgument Arg = *TA.pack_begin();
1476+
if (Arg.isPackExpansion())
1477+
Arg = Arg.getPackExpansionPattern();
1478+
return Arg;
1479+
}
1480+
14691481
/// Transform the given declaration by instantiating a reference to
14701482
/// this declaration.
14711483
Decl *TransformDecl(SourceLocation Loc, Decl *D);
@@ -2040,13 +2052,7 @@ TemplateName TemplateInstantiator::TransformTemplateName(
20402052
if (TemplateArgs.isRewrite()) {
20412053
// We're rewriting the template parameter as a reference to another
20422054
// template parameter.
2043-
if (Arg.getKind() == TemplateArgument::Pack) {
2044-
assert(Arg.pack_size() == 1 &&
2045-
"unexpected pack arguments in template rewrite");
2046-
Arg = *Arg.pack_begin();
2047-
if (Arg.isPackExpansion())
2048-
Arg = Arg.getPackExpansionPattern();
2049-
}
2055+
Arg = getTemplateArgumentPackPatternForRewrite(Arg);
20502056
assert(Arg.getKind() == TemplateArgument::Template &&
20512057
"unexpected nontype template argument kind in template rewrite");
20522058
return Arg.getAsTemplate();
@@ -2127,13 +2133,7 @@ TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E,
21272133
if (TemplateArgs.isRewrite()) {
21282134
// We're rewriting the template parameter as a reference to another
21292135
// template parameter.
2130-
if (Arg.getKind() == TemplateArgument::Pack) {
2131-
assert(Arg.pack_size() == 1 &&
2132-
"unexpected pack arguments in template rewrite");
2133-
Arg = *Arg.pack_begin();
2134-
if (Arg.isPackExpansion())
2135-
Arg = Arg.getPackExpansionPattern();
2136-
}
2136+
Arg = getTemplateArgumentPackPatternForRewrite(Arg);
21372137
assert(Arg.getKind() == TemplateArgument::Expression &&
21382138
"unexpected nontype template argument kind in template rewrite");
21392139
// FIXME: This can lead to the same subexpression appearing multiple times
@@ -2595,13 +2595,7 @@ TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB,
25952595
if (TemplateArgs.isRewrite()) {
25962596
// We're rewriting the template parameter as a reference to another
25972597
// template parameter.
2598-
if (Arg.getKind() == TemplateArgument::Pack) {
2599-
assert(Arg.pack_size() == 1 &&
2600-
"unexpected pack arguments in template rewrite");
2601-
Arg = *Arg.pack_begin();
2602-
if (Arg.isPackExpansion())
2603-
Arg = Arg.getPackExpansionPattern();
2604-
}
2598+
Arg = getTemplateArgumentPackPatternForRewrite(Arg);
26052599
assert(Arg.getKind() == TemplateArgument::Type &&
26062600
"unexpected nontype template argument kind in template rewrite");
26072601
QualType NewT = Arg.getAsType();

0 commit comments

Comments
 (0)