@@ -522,13 +522,11 @@ void LoopConvertCheck::doConversion(
522522 const ValueDecl *MaybeContainer, const UsageResult &Usages,
523523 const DeclStmt *AliasDecl, bool AliasUseRequired, bool AliasFromForInit,
524524 const ForStmt *Loop, RangeDescriptor Descriptor) {
525- auto Diag = diag (Loop->getForLoc (), " use range-based for loop instead" );
526-
527525 std::string VarName;
528526 bool VarNameFromAlias = (Usages.size () == 1 ) && AliasDecl;
529527 bool AliasVarIsRef = false ;
530528 bool CanCopy = true ;
531-
529+ std::vector<FixItHint> FixIts;
532530 if (VarNameFromAlias) {
533531 const auto *AliasVar = cast<VarDecl>(AliasDecl->getSingleDecl ());
534532 VarName = AliasVar->getName ().str ();
@@ -560,8 +558,8 @@ void LoopConvertCheck::doConversion(
560558 getAliasRange (Context->getSourceManager (), ReplaceRange);
561559 }
562560
563- Diag << FixItHint::CreateReplacement (
564- CharSourceRange::getTokenRange (ReplaceRange), ReplacementText);
561+ FixIts. push_back ( FixItHint::CreateReplacement (
562+ CharSourceRange::getTokenRange (ReplaceRange), ReplacementText)) ;
565563 // No further replacements are made to the loop, since the iterator or index
566564 // was used exactly once - in the initialization of AliasVar.
567565 } else {
@@ -606,8 +604,8 @@ void LoopConvertCheck::doConversion(
606604 Usage.Kind == Usage::UK_CaptureByCopy ? " &" + VarName : VarName;
607605 }
608606 TUInfo->getReplacedVars ().insert (std::make_pair (Loop, IndexVar));
609- Diag << FixItHint::CreateReplacement (
610- CharSourceRange::getTokenRange (Range), ReplaceText);
607+ FixIts. push_back ( FixItHint::CreateReplacement (
608+ CharSourceRange::getTokenRange (Range), ReplaceText)) ;
611609 }
612610 }
613611
@@ -645,8 +643,9 @@ void LoopConvertCheck::doConversion(
645643 std::string Range = (" (" + TypeString + " " + VarName + " : " +
646644 MaybeDereference + Descriptor.ContainerString + " )" )
647645 .str ();
648- Diag << FixItHint::CreateReplacement (
649- CharSourceRange::getTokenRange (ParenRange), Range);
646+ FixIts.push_back (FixItHint::CreateReplacement (
647+ CharSourceRange::getTokenRange (ParenRange), Range));
648+ diag (Loop->getForLoc (), " use range-based for loop instead" ) << FixIts;
650649 TUInfo->getGeneratedDecls ().insert (make_pair (Loop, VarName));
651650}
652651
0 commit comments