@@ -322,7 +322,7 @@ Constraint *Constraint::clone(ConstraintSystem &cs) const {
322322 llvm_unreachable (" Unhandled ConstraintKind in switch." );
323323}
324324
325- void Constraint::print (llvm::raw_ostream &Out, SourceManager *sm) const {
325+ void Constraint::print (llvm::raw_ostream &Out, SourceManager *sm, bool skipLocator ) const {
326326 // Print all type variables as $T0 instead of _ here.
327327 PrintOptions PO;
328328 PO.PrintTypesForDebugging = true ;
@@ -343,16 +343,30 @@ void Constraint::print(llvm::raw_ostream &Out, SourceManager *sm) const {
343343 Out << " ]]" ;
344344 }
345345 Out << " :\n " ;
346-
347- interleave (getNestedConstraints (),
346+
347+ // Sort constraints by favored, unmarked, disabled
348+ // for printing only.
349+ std::vector<Constraint *> sortedConstraints (getNestedConstraints ().begin (),
350+ getNestedConstraints ().end ());
351+ llvm::sort (sortedConstraints,
352+ [](const Constraint *lhs, const Constraint *rhs) {
353+ if (lhs->isFavored () != rhs->isFavored ())
354+ return lhs->isFavored ();
355+ if (lhs->isDisabled () != rhs->isDisabled ())
356+ return rhs->isDisabled ();
357+ return false ;
358+ });
359+
360+ interleave (sortedConstraints,
348361 [&](Constraint *constraint) {
349362 if (constraint->isDisabled ())
350363 Out << " > [disabled] " ;
351364 else if (constraint->isFavored ())
352365 Out << " > [favored] " ;
353366 else
354367 Out << " > " ;
355- constraint->print (Out, sm);
368+ constraint->print (Out, sm,
369+ /* skipLocator=*/ constraint->getLocator () == Locator);
356370 },
357371 [&] { Out << " \n " ; });
358372 return ;
@@ -522,7 +536,7 @@ void Constraint::print(llvm::raw_ostream &Out, SourceManager *sm) const {
522536 fix->print (Out);
523537 }
524538
525- if (Locator) {
539+ if (Locator && !skipLocator ) {
526540 Out << " [[" ;
527541 Locator->dump (sm, Out);
528542 Out << " ]];" ;
0 commit comments