@@ -367,7 +367,6 @@ void RuleBuilder::addRequirement(const Requirement &req,
367367
368368 case RequirementKind::SameType: {
369369 auto otherType = CanType (req.getSecondType ());
370- auto elementSymbol = Symbol::forPackElement (Context);
371370
372371 if (!otherType->isTypeParameter ()) {
373372 // A concrete same-type requirement T == C<X, Y> becomes a
@@ -386,9 +385,7 @@ void RuleBuilder::addRequirement(const Requirement &req,
386385 //
387386 // [element].T.[concrete: C<X, Y>] => [element].T
388387 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));
392389 }
393390
394391 constraintTerm = subjectTerm;
@@ -404,14 +401,10 @@ void RuleBuilder::addRequirement(const Requirement &req,
404401
405402 if (subjectType->isParameterPack () != otherType->isParameterPack ()) {
406403 // This is a same-element requirement.
407- llvm::SmallVector<Symbol, 3 > symbols{elementSymbol};
408-
409404 if (subjectType->isParameterPack ()) {
410- symbols.append (subjectTerm.begin (), subjectTerm.end ());
411- subjectTerm = MutableTerm (std::move (symbols));
405+ subjectTerm.prepend (Symbol::forPackElement (Context));
412406 } else {
413- symbols.append (constraintTerm.begin (), constraintTerm.end ());
414- constraintTerm = MutableTerm (std::move (symbols));
407+ constraintTerm.prepend (Symbol::forPackElement (Context));
415408 }
416409 }
417410
0 commit comments