Skip to content

Commit ed9c75a

Browse files
authored
[Clang][NFC] Concepts normalization cleanups (llvm#164229)
- typos - use insert instead of back inserter to make allocations more efficient - make sure the constraint cache uses canonicalized keys to avoid redundant work
1 parent 33a97c9 commit ed9c75a

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

clang/lib/AST/ASTConcept.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void ConstraintSatisfaction::Profile(llvm::FoldingSetNodeID &ID,
8686
ID.AddPointer(ConstraintOwner);
8787
ID.AddInteger(TemplateArgs.size());
8888
for (auto &Arg : TemplateArgs)
89-
Arg.Profile(ID, C);
89+
C.getCanonicalTemplateArgument(Arg).Profile(ID, C);
9090
}
9191

9292
ConceptReference *

clang/lib/Sema/SemaConcept.cpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -741,8 +741,9 @@ ExprResult ConstraintSatisfactionChecker::Evaluate(
741741
UnsubstitutedConstraintSatisfactionCacheResult Cache;
742742
Cache.Satisfaction.ContainsErrors = Satisfaction.ContainsErrors;
743743
Cache.Satisfaction.IsSatisfied = Satisfaction.IsSatisfied;
744-
std::copy(Satisfaction.Details.begin() + Size, Satisfaction.Details.end(),
745-
std::back_inserter(Cache.Satisfaction.Details));
744+
Cache.Satisfaction.Details.insert(Cache.Satisfaction.Details.end(),
745+
Satisfaction.Details.begin() + Size,
746+
Satisfaction.Details.end());
746747
Cache.SubstExpr = E;
747748
S.UnsubstitutedConstraintSatisfactionCache.insert({ID, std::move(Cache)});
748749

@@ -873,8 +874,9 @@ ExprResult ConstraintSatisfactionChecker::Evaluate(
873874
UnsubstitutedConstraintSatisfactionCacheResult Cache;
874875
Cache.Satisfaction.ContainsErrors = Satisfaction.ContainsErrors;
875876
Cache.Satisfaction.IsSatisfied = Satisfaction.IsSatisfied;
876-
std::copy(Satisfaction.Details.begin() + Size, Satisfaction.Details.end(),
877-
std::back_inserter(Cache.Satisfaction.Details));
877+
Cache.Satisfaction.Details.insert(Cache.Satisfaction.Details.end(),
878+
Satisfaction.Details.begin() + Size,
879+
Satisfaction.Details.end());
878880
Cache.SubstExpr = E;
879881
S.UnsubstitutedConstraintSatisfactionCache.insert({ID, std::move(Cache)});
880882
return E;
@@ -1017,8 +1019,9 @@ ExprResult ConstraintSatisfactionChecker::Evaluate(
10171019
UnsubstitutedConstraintSatisfactionCacheResult Cache;
10181020
Cache.Satisfaction.ContainsErrors = Satisfaction.ContainsErrors;
10191021
Cache.Satisfaction.IsSatisfied = Satisfaction.IsSatisfied;
1020-
std::copy(Satisfaction.Details.begin() + Size, Satisfaction.Details.end(),
1021-
std::back_inserter(Cache.Satisfaction.Details));
1022+
Cache.Satisfaction.Details.insert(Cache.Satisfaction.Details.end(),
1023+
Satisfaction.Details.begin() + Size,
1024+
Satisfaction.Details.end());
10221025
Cache.SubstExpr = CE;
10231026
S.UnsubstitutedConstraintSatisfactionCache.insert({ID, std::move(Cache)});
10241027
return CE;
@@ -1222,10 +1225,10 @@ bool Sema::CheckConstraintSatisfaction(
12221225
return false;
12231226
}
12241227

1225-
static const ExprResult
1226-
SubstituteConceptsInConstrainExpression(Sema &S, const NamedDecl *D,
1227-
const ConceptSpecializationExpr *CSE,
1228-
UnsignedOrNone SubstIndex) {
1228+
static ExprResult
1229+
SubstituteConceptsInConstraintExpression(Sema &S, const NamedDecl *D,
1230+
const ConceptSpecializationExpr *CSE,
1231+
UnsignedOrNone SubstIndex) {
12291232

12301233
// [C++2c] [temp.constr.normal]
12311234
// Otherwise, to form CE, any non-dependent concept template argument Ai
@@ -1260,7 +1263,7 @@ bool Sema::CheckConstraintSatisfaction(
12601263
const ConceptSpecializationExpr *ConstraintExpr,
12611264
ConstraintSatisfaction &Satisfaction) {
12621265

1263-
ExprResult Res = SubstituteConceptsInConstrainExpression(
1266+
ExprResult Res = SubstituteConceptsInConstraintExpression(
12641267
*this, nullptr, ConstraintExpr, ArgPackSubstIndex);
12651268
if (!Res.isUsable())
12661269
return true;
@@ -2302,7 +2305,7 @@ NormalizedConstraint *NormalizedConstraint::fromConstraintExpr(
23022305
ConceptDecl *CD = CSE->getNamedConcept()->getCanonicalDecl();
23032306

23042307
ExprResult Res =
2305-
SubstituteConceptsInConstrainExpression(S, D, CSE, SubstIndex);
2308+
SubstituteConceptsInConstraintExpression(S, D, CSE, SubstIndex);
23062309
if (!Res.isUsable())
23072310
return nullptr;
23082311

0 commit comments

Comments
 (0)