From: Argyrios Kyrtzidis Date: Sat, 4 Dec 2010 01:12:15 +0000 (+0000) Subject: Minor refactoring; have BugReport::getRanges return a pair of iterator, no functional... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=640ccf071076e684713cc3c3276bb51982bff607;p=clang Minor refactoring; have BugReport::getRanges return a pair of iterator, no functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120873 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Checker/BugReporter/BugReporter.h b/include/clang/Checker/BugReporter/BugReporter.h index 16d01ff834..031693d6d7 100644 --- a/include/clang/Checker/BugReporter/BugReporter.h +++ b/include/clang/Checker/BugReporter/BugReporter.h @@ -62,7 +62,7 @@ protected: std::string ShortDescription; std::string Description; const ExplodedNode *ErrorNode; - SourceRange R; + mutable SourceRange R; protected: friend class BugReporter; @@ -126,8 +126,10 @@ public: /// This location is used by clients rendering diagnostics. virtual SourceLocation getLocation() const; + typedef const SourceRange *ranges_iterator; + /// getRanges - Returns the source ranges associated with this bug. - virtual void getRanges(const SourceRange*& beg, const SourceRange*& end); + virtual std::pair getRanges() const; virtual PathDiagnosticPiece* VisitNode(const ExplodedNode* N, const ExplodedNode* PrevN, @@ -192,7 +194,7 @@ public: // FIXME: Collapse this with the default BugReport class. class RangedBugReport : public BugReport { - std::vector Ranges; + llvm::SmallVector Ranges; public: RangedBugReport(BugType& D, llvm::StringRef description, ExplodedNode *errornode) @@ -210,17 +212,8 @@ public: Ranges.push_back(R); } - // FIXME: Move this out of line. - void getRanges(const SourceRange*& beg, const SourceRange*& end) { - - if (Ranges.empty()) { - beg = NULL; - end = NULL; - } - else { - beg = &Ranges[0]; - end = beg + Ranges.size(); - } + virtual std::pair getRanges() const { + return std::make_pair(Ranges.begin(), Ranges.end()); } }; diff --git a/lib/Checker/BugReporter.cpp b/lib/Checker/BugReporter.cpp index 1c1c7dd1dc..2dcdb6177f 100644 --- a/lib/Checker/BugReporter.cpp +++ b/lib/Checker/BugReporter.cpp @@ -1239,8 +1239,8 @@ BugReport::getEndPath(BugReporterContext& BRC, if (!S) return NULL; - const SourceRange *Beg, *End; - getRanges(Beg, End); + BugReport::ranges_iterator Beg, End; + llvm::tie(Beg, End) = getRanges(); PathDiagnosticLocation L(S, BRC.getSourceManager()); // Only add the statement itself as a range if we didn't specify any @@ -1254,15 +1254,15 @@ BugReport::getEndPath(BugReporterContext& BRC, return P; } -void BugReport::getRanges(const SourceRange*& beg, const SourceRange*& end) { +std::pair +BugReport::getRanges() const { if (const Expr* E = dyn_cast_or_null(getStmt())) { R = E->getSourceRange(); assert(R.isValid()); - beg = &R; - end = beg+1; + return std::make_pair(&R, &R+1); } else - beg = end = 0; + return std::make_pair(ranges_iterator(), ranges_iterator()); } SourceLocation BugReport::getLocation() const { @@ -1828,8 +1828,8 @@ void BugReporter::FlushReport(BugReportEquivClass& EQ) { D->addMeta(*s); // Emit a summary diagnostic to the regular Diagnostics engine. - const SourceRange *Beg = 0, *End = 0; - exampleReport->getRanges(Beg, End); + BugReport::ranges_iterator Beg, End; + llvm::tie(Beg, End) = exampleReport->getRanges(); Diagnostic &Diag = getDiagnostic(); FullSourceLoc L(exampleReport->getLocation(), getSourceManager()); @@ -1852,7 +1852,7 @@ void BugReporter::FlushReport(BugReportEquivClass& EQ) { { DiagnosticBuilder diagBuilder = Diag.Report(L, ErrorDiag); - for (const SourceRange *I = Beg; I != End; ++I) + for (BugReport::ranges_iterator I = Beg; I != End; ++I) diagBuilder << *I; } diff --git a/lib/Checker/CFRefCount.cpp b/lib/Checker/CFRefCount.cpp index 3e5245741f..d9900c5dfb 100644 --- a/lib/Checker/CFRefCount.cpp +++ b/lib/Checker/CFRefCount.cpp @@ -1941,15 +1941,15 @@ namespace { virtual ~CFRefReport() {} - CFRefBug& getBugType() { + CFRefBug& getBugType() const { return (CFRefBug&) RangedBugReport::getBugType(); } - virtual void getRanges(const SourceRange*& beg, const SourceRange*& end) { + virtual std::pair getRanges() const { if (!getBugType().isLeak()) - RangedBugReport::getRanges(beg, end); + return RangedBugReport::getRanges(); else - beg = end = 0; + return std::make_pair(ranges_iterator(), ranges_iterator()); } SymbolRef getSymbol() const { return Sym; }