Skip to content

Commit 6677aef

Browse files
authored
[clang][NFC] Remove const-qualification from FunctionTemplateSpecializationInfo::TemplateArguments (#92500)
This patch remove const-qualification from pointee type of `FunctionTemplateSpecializationInfo::TemplateArguments`, because it's (eventually) used to initialize `MultiLevelTemplateArgumentList`, which can actually mutate the arguments via https://github.com/llvm/llvm-project/blob/f42f57b52dd279e6ae19270d063aeb8d59e3f11c/clang/include/clang/Sema/Template.h#L197-L204 Mutation seems to be required to correctly handle packs: https://github.com/llvm/llvm-project/blob/9144553207052a868efc5a8ce61a0afbb0eaf236/clang/lib/Sema/SemaTemplateInstantiate.cpp#L1440-L1469
1 parent 89b83d2 commit 6677aef

File tree

5 files changed

+23
-27
lines changed

5 files changed

+23
-27
lines changed

clang/include/clang/AST/Decl.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2096,13 +2096,12 @@ class FunctionDecl : public DeclaratorDecl,
20962096
///
20972097
/// \param PointOfInstantiation point at which the function template
20982098
/// specialization was first instantiated.
2099-
void setFunctionTemplateSpecialization(ASTContext &C,
2100-
FunctionTemplateDecl *Template,
2101-
const TemplateArgumentList *TemplateArgs,
2102-
void *InsertPos,
2103-
TemplateSpecializationKind TSK,
2104-
const TemplateArgumentListInfo *TemplateArgsAsWritten,
2105-
SourceLocation PointOfInstantiation);
2099+
void setFunctionTemplateSpecialization(
2100+
ASTContext &C, FunctionTemplateDecl *Template,
2101+
TemplateArgumentList *TemplateArgs, void *InsertPos,
2102+
TemplateSpecializationKind TSK,
2103+
const TemplateArgumentListInfo *TemplateArgsAsWritten,
2104+
SourceLocation PointOfInstantiation);
21062105

21072106
/// Specify that this record is an instantiation of the
21082107
/// member function FD.
@@ -2981,12 +2980,12 @@ class FunctionDecl : public DeclaratorDecl,
29812980
///
29822981
/// \param PointOfInstantiation point at which the function template
29832982
/// specialization was first instantiated.
2984-
void setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
2985-
const TemplateArgumentList *TemplateArgs,
2986-
void *InsertPos,
2987-
TemplateSpecializationKind TSK = TSK_ImplicitInstantiation,
2988-
const TemplateArgumentListInfo *TemplateArgsAsWritten = nullptr,
2989-
SourceLocation PointOfInstantiation = SourceLocation()) {
2983+
void setFunctionTemplateSpecialization(
2984+
FunctionTemplateDecl *Template, TemplateArgumentList *TemplateArgs,
2985+
void *InsertPos,
2986+
TemplateSpecializationKind TSK = TSK_ImplicitInstantiation,
2987+
TemplateArgumentListInfo *TemplateArgsAsWritten = nullptr,
2988+
SourceLocation PointOfInstantiation = SourceLocation()) {
29902989
setFunctionTemplateSpecialization(getASTContext(), Template, TemplateArgs,
29912990
InsertPos, TSK, TemplateArgsAsWritten,
29922991
PointOfInstantiation);

clang/include/clang/AST/DeclTemplate.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ class FunctionTemplateSpecializationInfo final
478478
public:
479479
/// The template arguments used to produce the function template
480480
/// specialization from the function template.
481-
const TemplateArgumentList *TemplateArguments;
481+
TemplateArgumentList *TemplateArguments;
482482

483483
/// The template arguments as written in the sources, if provided.
484484
/// FIXME: Normally null; tail-allocate this.
@@ -491,7 +491,7 @@ class FunctionTemplateSpecializationInfo final
491491
private:
492492
FunctionTemplateSpecializationInfo(
493493
FunctionDecl *FD, FunctionTemplateDecl *Template,
494-
TemplateSpecializationKind TSK, const TemplateArgumentList *TemplateArgs,
494+
TemplateSpecializationKind TSK, TemplateArgumentList *TemplateArgs,
495495
const ASTTemplateArgumentListInfo *TemplateArgsAsWritten,
496496
SourceLocation POI, MemberSpecializationInfo *MSInfo)
497497
: Function(FD, MSInfo ? true : false), Template(Template, TSK - 1),
@@ -511,8 +511,7 @@ class FunctionTemplateSpecializationInfo final
511511

512512
static FunctionTemplateSpecializationInfo *
513513
Create(ASTContext &C, FunctionDecl *FD, FunctionTemplateDecl *Template,
514-
TemplateSpecializationKind TSK,
515-
const TemplateArgumentList *TemplateArgs,
514+
TemplateSpecializationKind TSK, TemplateArgumentList *TemplateArgs,
516515
const TemplateArgumentListInfo *TemplateArgsAsWritten,
517516
SourceLocation POI, MemberSpecializationInfo *MSInfo);
518517

clang/lib/AST/Decl.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4199,14 +4199,12 @@ FunctionDecl::getTemplateSpecializationArgsAsWritten() const {
41994199
return nullptr;
42004200
}
42014201

4202-
void
4203-
FunctionDecl::setFunctionTemplateSpecialization(ASTContext &C,
4204-
FunctionTemplateDecl *Template,
4205-
const TemplateArgumentList *TemplateArgs,
4206-
void *InsertPos,
4207-
TemplateSpecializationKind TSK,
4208-
const TemplateArgumentListInfo *TemplateArgsAsWritten,
4209-
SourceLocation PointOfInstantiation) {
4202+
void FunctionDecl::setFunctionTemplateSpecialization(
4203+
ASTContext &C, FunctionTemplateDecl *Template,
4204+
TemplateArgumentList *TemplateArgs, void *InsertPos,
4205+
TemplateSpecializationKind TSK,
4206+
const TemplateArgumentListInfo *TemplateArgsAsWritten,
4207+
SourceLocation PointOfInstantiation) {
42104208
assert((TemplateOrSpecialization.isNull() ||
42114209
TemplateOrSpecialization.is<MemberSpecializationInfo *>()) &&
42124210
"Member function is already a specialization");

clang/lib/AST/DeclTemplate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@ TemplateArgumentList::CreateCopy(ASTContext &Context,
884884

885885
FunctionTemplateSpecializationInfo *FunctionTemplateSpecializationInfo::Create(
886886
ASTContext &C, FunctionDecl *FD, FunctionTemplateDecl *Template,
887-
TemplateSpecializationKind TSK, const TemplateArgumentList *TemplateArgs,
887+
TemplateSpecializationKind TSK, TemplateArgumentList *TemplateArgs,
888888
const TemplateArgumentListInfo *TemplateArgsAsWritten, SourceLocation POI,
889889
MemberSpecializationInfo *MSInfo) {
890890
const ASTTemplateArgumentListInfo *ArgsAsWritten = nullptr;

clang/lib/Sema/SemaTemplate.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10500,7 +10500,7 @@ bool Sema::CheckFunctionTemplateSpecialization(
1050010500
// specialization, with the template arguments from the previous
1050110501
// specialization.
1050210502
// Take copies of (semantic and syntactic) template argument lists.
10503-
const TemplateArgumentList *TemplArgs = TemplateArgumentList::CreateCopy(
10503+
TemplateArgumentList *TemplArgs = TemplateArgumentList::CreateCopy(
1050410504
Context, Specialization->getTemplateSpecializationArgs()->asArray());
1050510505
FD->setFunctionTemplateSpecialization(
1050610506
Specialization->getPrimaryTemplate(), TemplArgs, /*InsertPos=*/nullptr,

0 commit comments

Comments
 (0)