@@ -1540,22 +1540,15 @@ void Sema::DiagnoseUnsatisfiedConstraint(
1540
1540
const NormalizedConstraint *Sema::getNormalizedAssociatedConstraints (
1541
1541
ConstrainedDeclOrNestedRequirement ConstrainedDeclOrNestedReq,
1542
1542
ArrayRef<AssociatedConstraint> AssociatedConstraints) {
1543
- // In case the ConstrainedDecl comes from modules, it is necessary to use
1544
- // the canonical decl to avoid different atomic constraints with the 'same'
1545
- // declarations.
1546
-
1547
1543
if (!ConstrainedDeclOrNestedReq)
1548
1544
return NormalizedConstraint::fromAssociatedConstraints (
1549
1545
*this , nullptr , AssociatedConstraints);
1550
1546
1551
1547
const NamedDecl *ND =
1552
1548
ConstrainedDeclOrNestedReq.dyn_cast <const NamedDecl *>();
1553
- if (ND)
1554
- ND = cast<NamedDecl>(ND->getCanonicalDecl ());
1555
-
1556
1549
auto CacheEntry = NormalizationCache.find (ConstrainedDeclOrNestedReq);
1557
1550
if (CacheEntry == NormalizationCache.end ()) {
1558
- auto Normalized = NormalizedConstraint::fromAssociatedConstraints (
1551
+ auto * Normalized = NormalizedConstraint::fromAssociatedConstraints (
1559
1552
*this , ND, AssociatedConstraints);
1560
1553
CacheEntry =
1561
1554
NormalizationCache.try_emplace (ConstrainedDeclOrNestedReq, Normalized)
@@ -1795,10 +1788,12 @@ NormalizedConstraint *NormalizedConstraint::fromConstraintExpr(
1795
1788
// constraint. If any such substitution results in an invalid type or
1796
1789
// expression, the program is ill-formed; no diagnostic is required.
1797
1790
// [...]
1798
- ConceptDecl *CD = CSE->getNamedConcept ();
1791
+
1792
+ // Use canonical declarations to merge ConceptDecls across
1793
+ // different modules.
1794
+ ConceptDecl *CD = CSE->getNamedConcept ()->getCanonicalDecl ();
1799
1795
SubNF = NormalizedConstraint::fromAssociatedConstraints (
1800
- S, CSE->getNamedConcept (),
1801
- AssociatedConstraint (CD->getConstraintExpr (), SubstIndex));
1796
+ S, CD, AssociatedConstraint (CD->getConstraintExpr (), SubstIndex));
1802
1797
1803
1798
if (!SubNF)
1804
1799
return nullptr ;
0 commit comments