@@ -53,19 +53,19 @@ StandaloneDiagnostic::StandaloneDiagnostic(const LangOptions &LangOpts,
5353 FixIts.emplace_back (SrcMgr, LangOpts, FixIt);
5454}
5555
56- StoredDiagnostic
57- translateStandaloneDiag (FileManager &FileMgr, SourceManager &SrcMgr,
58- const StandaloneDiagnostic &StandaloneDiag,
59- llvm::StringMap<SourceLocation> &SrcLocCache) {
56+ static StoredDiagnostic
57+ translateStandaloneDiagnostic (FileManager &FileMgr, SourceManager &SrcMgr,
58+ StandaloneDiagnostic & &StandaloneDiag,
59+ llvm::StringMap<SourceLocation> &SrcLocCache) {
6060 const auto FileRef = FileMgr.getOptionalFileRef (StandaloneDiag.Filename );
6161 if (!FileRef)
6262 return StoredDiagnostic (StandaloneDiag.Level , StandaloneDiag.ID ,
63- StandaloneDiag.Message );
63+ std::move ( StandaloneDiag.Message ) );
6464
6565 // Try to get FileLoc from cache first
6666 SourceLocation FileLoc;
67- auto It = SrcLocCache.find (StandaloneDiag.Filename );
68- if ( It != SrcLocCache.end ()) {
67+ if ( const auto It = SrcLocCache.find (StandaloneDiag.Filename );
68+ It != SrcLocCache.end ()) {
6969 FileLoc = It->getValue ();
7070 }
7171
@@ -95,23 +95,34 @@ translateStandaloneDiag(FileManager &FileMgr, SourceManager &SrcMgr,
9595
9696 SmallVector<CharSourceRange, 4 > TranslatedRanges;
9797 TranslatedRanges.reserve (StandaloneDiag.Ranges .size ());
98- transform ( StandaloneDiag.Ranges , std::back_inserter (TranslatedRanges),
99- ConvertOffsetRange);
98+ for ( const auto &Range : StandaloneDiag.Ranges )
99+ TranslatedRanges. push_back ( ConvertOffsetRange (Range) );
100100
101101 SmallVector<FixItHint, 2 > TranslatedFixIts;
102102 TranslatedFixIts.reserve (StandaloneDiag.FixIts .size ());
103- for (const auto &FixIt : StandaloneDiag.FixIts ) {
104- FixItHint TranslatedFixIt;
105- TranslatedFixIt.CodeToInsert = FixIt.CodeToInsert ;
103+ for (auto &FixIt : StandaloneDiag.FixIts ) {
104+ auto & TranslatedFixIt = TranslatedFixIts. emplace_back () ;
105+ TranslatedFixIt.CodeToInsert = std::move ( FixIt.CodeToInsert ) ;
106106 TranslatedFixIt.RemoveRange = ConvertOffsetRange (FixIt.RemoveRange );
107107 TranslatedFixIt.InsertFromRange = ConvertOffsetRange (FixIt.InsertFromRange );
108108 TranslatedFixIt.BeforePreviousInsertions = FixIt.BeforePreviousInsertions ;
109- TranslatedFixIts.push_back (std::move (TranslatedFixIt));
110109 }
111110
112111 return StoredDiagnostic (StandaloneDiag.Level , StandaloneDiag.ID ,
113- StandaloneDiag.Message , Loc, TranslatedRanges,
114- TranslatedFixIts);
112+ std::move (StandaloneDiag.Message ), Loc,
113+ TranslatedRanges, TranslatedFixIts);
114+ }
115+
116+ void translateStandaloneDiagnostics (
117+ FileManager &FileMgr, SourceManager &SrcMgr,
118+ llvm::SmallVectorImpl<StandaloneDiagnostic> &&InDiags,
119+ llvm::SmallVectorImpl<StoredDiagnostic> &OutDiags,
120+ llvm::StringMap<SourceLocation> &SrcLocCache) {
121+ InDiags.clear ();
122+ InDiags.reserve (OutDiags.size ());
123+ for (auto &InDiag : InDiags)
124+ OutDiags.push_back (translateStandaloneDiagnostic (
125+ FileMgr, SrcMgr, std::move (InDiag), SrcLocCache));
115126}
116127
117128} // namespace clang
0 commit comments