@@ -367,7 +367,6 @@ void RuleBuilder::addRequirement(const Requirement &req,
367
367
368
368
case RequirementKind::SameType: {
369
369
auto otherType = CanType (req.getSecondType ());
370
- auto elementSymbol = Symbol::forPackElement (Context);
371
370
372
371
if (!otherType->isTypeParameter ()) {
373
372
// A concrete same-type requirement T == C<X, Y> becomes a
@@ -386,9 +385,7 @@ void RuleBuilder::addRequirement(const Requirement &req,
386
385
//
387
386
// [element].T.[concrete: C<X, Y>] => [element].T
388
387
if (subjectType->isParameterPack ()) {
389
- llvm::SmallVector<Symbol, 3 > subjectSymbols{elementSymbol};
390
- subjectSymbols.append (subjectTerm.begin (), subjectTerm.end ());
391
- subjectTerm = MutableTerm (std::move (subjectSymbols));
388
+ subjectTerm.prepend (Symbol::forPackElement (Context));
392
389
}
393
390
394
391
constraintTerm = subjectTerm;
@@ -404,14 +401,10 @@ void RuleBuilder::addRequirement(const Requirement &req,
404
401
405
402
if (subjectType->isParameterPack () != otherType->isParameterPack ()) {
406
403
// This is a same-element requirement.
407
- llvm::SmallVector<Symbol, 3 > symbols{elementSymbol};
408
-
409
404
if (subjectType->isParameterPack ()) {
410
- symbols.append (subjectTerm.begin (), subjectTerm.end ());
411
- subjectTerm = MutableTerm (std::move (symbols));
405
+ subjectTerm.prepend (Symbol::forPackElement (Context));
412
406
} else {
413
- symbols.append (constraintTerm.begin (), constraintTerm.end ());
414
- constraintTerm = MutableTerm (std::move (symbols));
407
+ constraintTerm.prepend (Symbol::forPackElement (Context));
415
408
}
416
409
}
417
410
0 commit comments