@@ -380,21 +380,29 @@ SubstitutionInTemplateArguments(
380
380
Constraint.getParameterMapping (), MLTAL, SubstArgs) ||
381
381
Trap.hasErrorOccurred ())
382
382
return std::nullopt ;
383
+ // Sema::CheckTemplateArgumentInfo CTAI;
384
+ // auto *TD = const_cast<TemplateDecl *>(
385
+ // cast<TemplateDecl>(Constraint.getConstraintDecl()));
386
+ // if (S.CheckTemplateArgumentList(TD, TD->getLocation(), SubstArgs,
387
+ // /*DefaultArguments=*/{},
388
+ // /*PartialTemplateArgs=*/true, CTAI))
389
+ // return std::nullopt;
383
390
NormalizedConstraint::OccurenceList Used =
384
391
Constraint.mappingOccurenceList ();
385
392
SubstitutedOuterMost =
386
393
llvm::to_vector_of<TemplateArgument>(MLTAL.getOutermost ());
387
- for (unsigned I = 0 , MappedIndex = 0 ; I < SubstArgs.size (); I++)
388
- if (I < Used.size () && Used[I]) {
394
+ for (unsigned I = 0 , MappedIndex = 0 ; I < Used.size (); I++) {
395
+ TemplateArgument Arg;
396
+ if (Used[I])
389
397
// SubstitutedOuterMost[I].dump();
390
398
// SubstArgs[MappedIndex].getArgument().dump();
391
- TemplateArgument Arg = S.Context .getCanonicalTemplateArgument (
399
+ Arg = S.Context .getCanonicalTemplateArgument (
392
400
SubstArgs[MappedIndex++].getArgument ());
393
- if (I < SubstitutedOuterMost.size ())
394
- SubstitutedOuterMost[I] = Arg;
395
- else
396
- SubstitutedOuterMost.push_back (Arg);
397
- }
401
+ if (I < SubstitutedOuterMost.size ())
402
+ SubstitutedOuterMost[I] = Arg;
403
+ else
404
+ SubstitutedOuterMost.push_back (Arg);
405
+ }
398
406
MLTAL.replaceOutermostTemplateArguments (
399
407
const_cast <NamedDecl *>(Constraint.getConstraintDecl ()),
400
408
SubstitutedOuterMost);
@@ -681,7 +689,7 @@ static bool calculateConstraintSatisfaction(
681
689
Ok = calculateConstraintSatisfaction (S, Constraint.getRHS (), Template,
682
690
TemplateNameLoc, MLTAL, Satisfaction,
683
691
PackSubstitutionIndex);
684
- if (Ok && Satisfaction.IsSatisfied && !Satisfaction.ContainsErrors )
692
+ if (Ok && Satisfaction.IsSatisfied && !Satisfaction.ContainsErrors )
685
693
Satisfaction.Details .erase (Satisfaction.Details .begin () + EffectiveDetailEndIndex,
686
694
Satisfaction.Details .end ());
687
695
return Ok;
@@ -1574,9 +1582,9 @@ substituteParameterMappings(Sema &S, NormalizedConstraintWithParamMapping &N,
1574
1582
/* OnlyDeduced=*/ false ,
1575
1583
/* Depth=*/ 0 , OccurringIndices);
1576
1584
} else if (N.getKind () == NormalizedConstraint::ConstraintKind::ConceptId) {
1577
- auto Args = static_cast <ConceptIdConstraint &>(N)
1578
- .getConceptId ()
1579
- ->getTemplateArgsAsWritten ();
1585
+ auto * Args = static_cast <ConceptIdConstraint &>(N)
1586
+ .getConceptId ()
1587
+ ->getTemplateArgsAsWritten ();
1580
1588
if (Args)
1581
1589
S.MarkUsedTemplateParameters (Args->arguments (),
1582
1590
/* Depth=*/ 0 , OccurringIndices);
@@ -1613,12 +1621,25 @@ substituteParameterMappings(Sema &S, NormalizedConstraintWithParamMapping &N,
1613
1621
if (S.SubstTemplateArgumentsInParameterMapping (N.getParameterMapping (), MLTAL,
1614
1622
SubstArgs))
1615
1623
return true ;
1624
+ // Sema::CheckTemplateArgumentInfo CTAI;
1625
+ // auto *TD =
1626
+ // const_cast<TemplateDecl *>(cast<TemplateDecl>(N.getConstraintDecl()));
1627
+ // if (S.CheckTemplateArgumentList(TD, TD->getLocation(), SubstArgs,
1628
+ // /*DefaultArguments=*/{},
1629
+ // /*PartialTemplateArgs=*/true, CTAI))
1630
+ // return true;
1616
1631
TemplateArgumentLoc *TempArgs =
1617
1632
new (S.Context ) TemplateArgumentLoc[SubstArgs.size ()];
1633
+ // for (unsigned I = 0; I < CTAI.SugaredConverted.size(); ++I)
1634
+ // TempArgs[I] = S.getTrivialTemplateArgumentLoc(CTAI.SugaredConverted[I],
1635
+ // QualType(), SourceLocation());
1618
1636
llvm::copy (SubstArgs.arguments (), TempArgs);
1619
1637
N.updateParameterMapping (
1620
1638
N.mappingOccurenceList (),
1621
1639
MutableArrayRef<TemplateArgumentLoc>(TempArgs, SubstArgs.size ()));
1640
+ // N.updateParameterMapping(N.mappingOccurenceList(),
1641
+ // MutableArrayRef<TemplateArgumentLoc>(
1642
+ // TempArgs, CTAI.SugaredConverted.size()));
1622
1643
return false ;
1623
1644
}
1624
1645
@@ -1627,12 +1648,10 @@ substituteParameterMappings(Sema &S, ConceptIdConstraint &N,
1627
1648
const MultiLevelTemplateArgumentList &MLTAL,
1628
1649
const ASTTemplateArgumentListInfo *ArgsAsWritten) {
1629
1650
1630
- {
1631
- if (N.getConstraintDecl ()) {
1632
- substituteParameterMappings (
1633
- S, static_cast <NormalizedConstraintWithParamMapping &>(N), MLTAL,
1634
- ArgsAsWritten);
1635
- }
1651
+ if (N.getConstraintDecl ()) {
1652
+ substituteParameterMappings (
1653
+ S, static_cast <NormalizedConstraintWithParamMapping &>(N), MLTAL,
1654
+ ArgsAsWritten);
1636
1655
}
1637
1656
return substituteParameterMappings (S, N.getNormalizedConstraint (), MLTAL,
1638
1657
ArgsAsWritten);
0 commit comments