<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Mar 6, 2014 at 6:14 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On Thu, Mar 6, 2014 at 5:23 AM, Alexander Kornienko <<a href="mailto:alexfh@google.com">alexfh@google.com</a>> wrote:<br>
> Author: alexfh<br>
> Date: Thu Mar 6 07:23:30 2014<br>
> New Revision: 203117<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=203117&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=203117&view=rev</a><br>
> Log:<br>
> Added an inserter for ArrayRef<SourceRange>.<br>
><br>
> Summary:<br>
> Added an inserter for ArrayRef<SourceRange>, as it is already needed in at least<br>
> two places (static analyzer and clang-tidy).<br>
<br>
</div>You may be able to remove the single-argument (SourceRange) version of<br>
this, since ArrayRef<T> is implicitly constructible from T (to create<br>
a single-element ArrayRef<T>). Though the extra user defined<br>
conversion might cause some hiccups.<br></blockquote><div><br></div><div>Thanks for the idea, but this doesn't seem like the right trade-off here.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
- David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
> Reviewers: jordan_rose<br>
><br>
> CC: cfe-commits, gribozavr<br>
><br>
> Differential Revision: <a href="http://llvm-reviews.chandlerc.com/D2984" target="_blank">http://llvm-reviews.chandlerc.com/D2984</a><br>
><br>
> Modified:<br>
> cfe/trunk/include/clang/Basic/Diagnostic.h<br>
> cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/Diagnostic.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Diagnostic.h?rev=203117&r1=203116&r2=203117&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Diagnostic.h?rev=203117&r1=203116&r2=203117&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/Diagnostic.h (original)<br>
> +++ cfe/trunk/include/clang/Basic/Diagnostic.h Thu Mar 6 07:23:30 2014<br>
> @@ -1015,7 +1015,8 @@ inline const DiagnosticBuilder &operator<br>
> return DB;<br>
> }<br>
><br>
> -inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,bool I) {<br>
> +inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,<br>
> + bool I) {<br>
> DB.AddTaggedVal(I, DiagnosticsEngine::ak_sint);<br>
> return DB;<br>
> }<br>
> @@ -1052,7 +1053,7 @@ operator<<(const DiagnosticBuilder &DB,<br>
> DiagnosticsEngine::ak_declcontext);<br>
> return DB;<br>
> }<br>
> -<br>
> +<br>
> inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,<br>
> const SourceRange &R) {<br>
> DB.AddSourceRange(CharSourceRange::getTokenRange(R));<br>
> @@ -1060,11 +1061,18 @@ inline const DiagnosticBuilder &operator<br>
> }<br>
><br>
> inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,<br>
> + ArrayRef<SourceRange> Ranges) {<br>
> + for (const SourceRange &R: Ranges)<br>
> + DB.AddSourceRange(CharSourceRange::getTokenRange(R));<br>
> + return DB;<br>
> +}<br>
> +<br>
> +inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,<br>
> const CharSourceRange &R) {<br>
> DB.AddSourceRange(R);<br>
> return DB;<br>
> }<br>
> -<br>
> +<br>
> inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,<br>
> const FixItHint &Hint) {<br>
> if (!Hint.isNull())<br>
> @@ -1073,7 +1081,7 @@ inline const DiagnosticBuilder &operator<br>
> }<br>
><br>
> inline DiagnosticBuilder DiagnosticsEngine::Report(SourceLocation Loc,<br>
> - unsigned DiagID){<br>
> + unsigned DiagID) {<br>
> assert(CurDiagID == ~0U && "Multiple diagnostics in flight at once!");<br>
> CurDiagLoc = Loc;<br>
> CurDiagID = DiagID;<br>
><br>
> Modified: cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp?rev=203117&r1=203116&r2=203117&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp?rev=203117&r1=203116&r2=203117&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp (original)<br>
> +++ cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp Thu Mar 6 07:23:30 2014<br>
> @@ -103,14 +103,6 @@ public:<br>
> IncludePath = true;<br>
> }<br>
><br>
> - const DiagnosticBuilder &addRanges(const DiagnosticBuilder &DB,<br>
> - ArrayRef<SourceRange> Ranges) {<br>
> - for (ArrayRef<SourceRange>::iterator I = Ranges.begin(), E = Ranges.end();<br>
> - I != E; ++I)<br>
> - DB << *I;<br>
> - return DB;<br>
> - }<br>
> -<br>
> void FlushDiagnosticsImpl(std::vector<const PathDiagnostic *> &Diags,<br>
> FilesMade *filesMade) {<br>
> unsigned WarnID = Diag.getCustomDiagID(DiagnosticsEngine::Warning, "%0");<br>
> @@ -120,8 +112,8 @@ public:<br>
> E = Diags.end(); I != E; ++I) {<br>
> const PathDiagnostic *PD = *I;<br>
> SourceLocation WarnLoc = PD->getLocation().asLocation();<br>
> - addRanges(Diag.Report(WarnLoc, WarnID) << PD->getShortDescription(),<br>
> - PD->path.back()->getRanges());<br>
> + Diag.Report(WarnLoc, WarnID) << PD->getShortDescription()<br>
> + << PD->path.back()->getRanges();<br>
><br>
> if (!IncludePath)<br>
> continue;<br>
> @@ -131,8 +123,8 @@ public:<br>
> PE = FlatPath.end();<br>
> PI != PE; ++PI) {<br>
> SourceLocation NoteLoc = (*PI)->getLocation().asLocation();<br>
> - addRanges(Diag.Report(NoteLoc, NoteID) << (*PI)->getString(),<br>
> - (*PI)->getRanges());<br>
> + Diag.Report(NoteLoc, NoteID) << (*PI)->getString()<br>
> + << (*PI)->getRanges();<br>
> }<br>
> }<br>
> }<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><div><br></div>
</div></div>