@@ -1556,22 +1556,15 @@ void Sema::DiagnoseUnsatisfiedConstraint(
1556
1556
const NormalizedConstraint *Sema::getNormalizedAssociatedConstraints (
1557
1557
ConstrainedDeclOrNestedRequirement ConstrainedDeclOrNestedReq,
1558
1558
ArrayRef<AssociatedConstraint> AssociatedConstraints) {
1559
- // In case the ConstrainedDecl comes from modules, it is necessary to use
1560
- // the canonical decl to avoid different atomic constraints with the 'same'
1561
- // declarations.
1562
-
1563
1559
if (!ConstrainedDeclOrNestedReq)
1564
1560
return NormalizedConstraint::fromAssociatedConstraints (
1565
1561
*this , nullptr , AssociatedConstraints);
1566
1562
1567
1563
const NamedDecl *ND =
1568
1564
ConstrainedDeclOrNestedReq.dyn_cast <const NamedDecl *>();
1569
- if (ND)
1570
- ND = cast<NamedDecl>(ND->getCanonicalDecl ());
1571
-
1572
1565
auto CacheEntry = NormalizationCache.find (ConstrainedDeclOrNestedReq);
1573
1566
if (CacheEntry == NormalizationCache.end ()) {
1574
- auto Normalized = NormalizedConstraint::fromAssociatedConstraints (
1567
+ auto * Normalized = NormalizedConstraint::fromAssociatedConstraints (
1575
1568
*this , ND, AssociatedConstraints);
1576
1569
CacheEntry =
1577
1570
NormalizationCache.try_emplace (ConstrainedDeclOrNestedReq, Normalized)
@@ -1811,10 +1804,12 @@ NormalizedConstraint *NormalizedConstraint::fromConstraintExpr(
1811
1804
// constraint. If any such substitution results in an invalid type or
1812
1805
// expression, the program is ill-formed; no diagnostic is required.
1813
1806
// [...]
1814
- ConceptDecl *CD = CSE->getNamedConcept ();
1807
+
1808
+ // Use canonical declarations to merge ConceptDecls across
1809
+ // different modules.
1810
+ ConceptDecl *CD = CSE->getNamedConcept ()->getCanonicalDecl ();
1815
1811
SubNF = NormalizedConstraint::fromAssociatedConstraints (
1816
- S, CSE->getNamedConcept (),
1817
- AssociatedConstraint (CD->getConstraintExpr (), SubstIndex));
1812
+ S, CD, AssociatedConstraint (CD->getConstraintExpr (), SubstIndex));
1818
1813
1819
1814
if (!SubNF)
1820
1815
return nullptr ;
0 commit comments