@@ -453,6 +453,7 @@ static ExprResult calculateConstraintSatisfaction(
453453 Sema::InstantiatingTemplate Inst (
454454 S, AtomicExpr->getBeginLoc (),
455455 Sema::InstantiatingTemplate::ConstraintSubstitution{},
456+ // FIXME: improve const-correctness of InstantiatingTemplate
456457 const_cast <NamedDecl *>(Template), Info,
457458 AtomicExpr->getSourceRange ());
458459 if (Inst.isInvalid ())
@@ -1435,9 +1436,9 @@ void Sema::DiagnoseUnsatisfiedConstraint(
14351436 }
14361437}
14371438
1438- const NormalizedConstraint *
1439- Sema::getNormalizedAssociatedConstraints (
1440- NamedDecl *ConstrainedDecl, ArrayRef<const Expr *> AssociatedConstraints) {
1439+ const NormalizedConstraint *Sema::getNormalizedAssociatedConstraints (
1440+ const NamedDecl *ConstrainedDecl,
1441+ ArrayRef<const Expr *> AssociatedConstraints) {
14411442 // In case the ConstrainedDecl comes from modules, it is necessary to use
14421443 // the canonical decl to avoid different atomic constraints with the 'same'
14431444 // declarations.
@@ -1461,7 +1462,7 @@ Sema::getNormalizedAssociatedConstraints(
14611462}
14621463
14631464const NormalizedConstraint *clang::getNormalizedAssociatedConstraints (
1464- Sema &S, NamedDecl *ConstrainedDecl,
1465+ Sema &S, const NamedDecl *ConstrainedDecl,
14651466 ArrayRef<const Expr *> AssociatedConstraints) {
14661467 return S.getNormalizedAssociatedConstraints (ConstrainedDecl,
14671468 AssociatedConstraints);
@@ -1527,7 +1528,8 @@ substituteParameterMappings(Sema &S, NormalizedConstraint &N,
15271528 Sema::InstantiatingTemplate Inst (
15281529 S, InstLocBegin,
15291530 Sema::InstantiatingTemplate::ParameterMappingSubstitution{},
1530- Atomic.ConstraintDecl , {InstLocBegin, InstLocEnd});
1531+ const_cast <NamedDecl *>(Atomic.ConstraintDecl ),
1532+ {InstLocBegin, InstLocEnd});
15311533 if (Inst.isInvalid ())
15321534 return true ;
15331535 if (S.SubstTemplateArguments (*Atomic.ParameterMapping , MLTAL, SubstArgs))
@@ -1591,7 +1593,7 @@ NormalizedConstraint &NormalizedConstraint::getRHS() const {
15911593}
15921594
15931595std::optional<NormalizedConstraint>
1594- NormalizedConstraint::fromConstraintExprs (Sema &S, NamedDecl *D,
1596+ NormalizedConstraint::fromConstraintExprs (Sema &S, const NamedDecl *D,
15951597 ArrayRef<const Expr *> E) {
15961598 assert (E.size () != 0 );
15971599 auto Conjunction = fromConstraintExpr (S, D, E[0 ]);
@@ -1608,7 +1610,8 @@ NormalizedConstraint::fromConstraintExprs(Sema &S, NamedDecl *D,
16081610}
16091611
16101612std::optional<NormalizedConstraint>
1611- NormalizedConstraint::fromConstraintExpr (Sema &S, NamedDecl *D, const Expr *E) {
1613+ NormalizedConstraint::fromConstraintExpr (Sema &S, const NamedDecl *D,
1614+ const Expr *E) {
16121615 assert (E != nullptr );
16131616
16141617 // C++ [temp.constr.normal]p1.1
@@ -1637,8 +1640,9 @@ NormalizedConstraint::fromConstraintExpr(Sema &S, NamedDecl *D, const Expr *E) {
16371640 {
16381641 Sema::InstantiatingTemplate Inst (
16391642 S, CSE->getExprLoc (),
1640- Sema::InstantiatingTemplate::ConstraintNormalization{}, D,
1641- CSE->getSourceRange ());
1643+ Sema::InstantiatingTemplate::ConstraintNormalization{},
1644+ // FIXME: improve const-correctness of InstantiatingTemplate
1645+ const_cast <NamedDecl *>(D), CSE->getSourceRange ());
16421646 if (Inst.isInvalid ())
16431647 return std::nullopt ;
16441648 // C++ [temp.constr.normal]p1.1
@@ -1726,9 +1730,9 @@ bool FoldExpandedConstraint::AreCompatibleForSubsumption(
17261730 return false ;
17271731}
17281732
1729- bool Sema::IsAtLeastAsConstrained (NamedDecl *D1,
1733+ bool Sema::IsAtLeastAsConstrained (const NamedDecl *D1,
17301734 MutableArrayRef<const Expr *> AC1,
1731- NamedDecl *D2,
1735+ const NamedDecl *D2,
17321736 MutableArrayRef<const Expr *> AC2,
17331737 bool &Result) {
17341738#ifndef NDEBUG
@@ -1755,7 +1759,7 @@ bool Sema::IsAtLeastAsConstrained(NamedDecl *D1,
17551759 return false ;
17561760 }
17571761
1758- std::pair<NamedDecl *, NamedDecl *> Key{D1, D2};
1762+ std::pair<const NamedDecl *, const NamedDecl *> Key{D1, D2};
17591763 auto CacheEntry = SubsumptionCache.find (Key);
17601764 if (CacheEntry != SubsumptionCache.end ()) {
17611765 Result = CacheEntry->second ;
@@ -1789,7 +1793,7 @@ bool Sema::IsAtLeastAsConstrained(NamedDecl *D1,
17891793}
17901794
17911795bool Sema::MaybeEmitAmbiguousAtomicConstraintsDiagnostic (
1792- NamedDecl *D1, ArrayRef<const Expr *> AC1, NamedDecl *D2,
1796+ const NamedDecl *D1, ArrayRef<const Expr *> AC1, const NamedDecl *D2,
17931797 ArrayRef<const Expr *> AC2) {
17941798
17951799 if (isSFINAEContext ())
@@ -2055,7 +2059,7 @@ FormulaType SubsumptionChecker::Normalize(const NormalizedConstraint &NC) {
20552059 FormulaType Res;
20562060
20572061 auto Add = [&, this ](Clause C) {
2058- // Sort each clause and remove duplicates for faster comparisons
2062+ // Sort each clause and remove duplicates for faster comparisons.
20592063 llvm::sort (C);
20602064 C.erase (llvm::unique (C), C.end ());
20612065 AddUniqueClauseToFormula (Res, std::move (C));
@@ -2102,9 +2106,9 @@ void SubsumptionChecker::AddUniqueClauseToFormula(Formula &F, Clause C) {
21022106 F.push_back (C);
21032107}
21042108
2105- std::optional<bool > SubsumptionChecker::Subsumes (NamedDecl *DP,
2109+ std::optional<bool > SubsumptionChecker::Subsumes (const NamedDecl *DP,
21062110 ArrayRef<const Expr *> P,
2107- NamedDecl *DQ,
2111+ const NamedDecl *DQ,
21082112 ArrayRef<const Expr *> Q) {
21092113 const NormalizedConstraint *PNormalized =
21102114 getNormalizedAssociatedConstraints (SemaRef, DP, P);
0 commit comments