r217205 - unique_ptrify BugReporter::visitors
David Blaikie
dblaikie at gmail.com
Thu Sep 4 17:17:25 PDT 2014
On Thu, Sep 4, 2014 at 5:13 PM, Justin Bogner <mail at justinbogner.com> wrote:
> David Blaikie <dblaikie at gmail.com> writes:
> > Author: dblaikie
> > Date: Thu Sep 4 18:54:33 2014
> > New Revision: 217205
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=217205&view=rev
> > Log:
> > unique_ptrify BugReporter::visitors
> >
> > Modified:
> > cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
> >
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h
> > cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
> > cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
> > cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
> > cfe/trunk/lib/StaticAnalyzer/Checkers/TestAfterDivZeroChecker.cpp
> >
> cfe/trunk/lib/StaticAnalyzer/Checkers/UndefCapturedBlockVarChecker.cpp
> > cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
> > cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
> >
> > Modified:
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
> > URL:
> >
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > ---
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
> (original)
> > +++
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h Thu
> Sep 4 18:54:33 2014
> > @@ -63,7 +63,7 @@ public:
> > };
> >
> > typedef const SourceRange *ranges_iterator;
> > - typedef SmallVector<BugReporterVisitor *, 8> VisitorList;
> > + typedef SmallVector<std::unique_ptr<BugReporterVisitor>, 8>
> VisitorList;
> > typedef VisitorList::iterator visitor_iterator;
> > typedef SmallVector<StringRef, 2> ExtraTextList;
> >
> > @@ -299,9 +299,9 @@ public:
> > /// \sa registerConditionVisitor(), registerTrackNullOrUndefValue(),
> > /// registerFindLastStore(), registerNilReceiverVisitor(), and
> > /// registerVarDeclsLastStore().
> > - void addVisitor(BugReporterVisitor *visitor);
> > + void addVisitor(std::unique_ptr<BugReporterVisitor> visitor);
> >
> > - /// Iterators through the custom diagnostic visitors.
> > + /// Iterators through the custom diagnostic visitors.
> > visitor_iterator visitor_begin() { return Callbacks.begin(); }
> > visitor_iterator visitor_end() { return Callbacks.end(); }
>
> Spacing looks pretty strange here.
>
Yeah, I thought I'd at least managed to avoid clang-format modifying that
line, though it was weird before (& weird after, but just differently
weird... ) but I guess not.
Fixed it properly in r217209.
>
> >
> >
> > Modified:
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > ---
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h
> (original)
> > +++
> cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitor.h
> Thu Sep 4 18:54:33 2014
> > @@ -48,7 +48,7 @@ public:
> > /// (Warning: if you have a deep subclass of BugReporterVisitorImpl,
> the
> > /// default implementation of clone() will NOT do the right thing,
> and you
> > /// will have to provide your own implementation.)
> > - virtual BugReporterVisitor *clone() const = 0;
> > + virtual std::unique_ptr<BugReporterVisitor> clone() const = 0;
> >
> > /// \brief Return a diagnostic piece which should be associated with
> the
> > /// given node.
> > @@ -87,8 +87,8 @@ public:
> > /// will have to provide your own implementation.)
> > template <class DERIVED>
> > class BugReporterVisitorImpl : public BugReporterVisitor {
> > - BugReporterVisitor *clone() const override {
> > - return new DERIVED(*static_cast<const DERIVED *>(this));
> > + std::unique_ptr<BugReporterVisitor> clone() const override {
> > + 4:30pm return llvm::make_unique<DERIVED>(*static_cast<const DERIVED
> *>(this));
> > }
> > };
> >
> >
> > Modified:
> cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
> (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp
> Thu Sep 4 18:54:33 2014
> > @@ -270,7 +270,7 @@ void MacOSKeychainAPIChecker::
> > os << "Deallocator doesn't match the allocator: '"
> > << FunctionsToTrack[PDeallocIdx].Name << "' should be used.";
> > BugReport *Report = new BugReport(*BT, os.str(), N);
> > - Report->addVisitor(new SecKeychainBugVisitor(AP.first));
> > +
> Report->addVisitor(llvm::make_unique<SecKeychainBugVisitor>(AP.first));
> > Report->addRange(ArgExpr->getSourceRange());
> > markInteresting(Report, AP);
> > C.emitReport(Report);
> > @@ -311,7 +311,7 @@ void MacOSKeychainAPIChecker::checkPreSt
> > << FunctionsToTrack[DIdx].Name
> > << "'.";
> > BugReport *Report = new BugReport(*BT, os.str(), N);
> > - Report->addVisitor(new SecKeychainBugVisitor(V));
> > +
> Report->addVisitor(llvm::make_unique<SecKeychainBugVisitor>(V));
> > Report->addRange(ArgExpr->getSourceRange());
> > Report->markInteresting(AS->Region);
> > C.emitReport(Report);
> > @@ -430,7 +430,7 @@ void MacOSKeychainAPIChecker::checkPreSt
> > initBugType();
> > BugReport *Report = new BugReport(*BT,
> > "Only call free if a valid (non-NULL) buffer was returned.", N);
> > - Report->addVisitor(new SecKeychainBugVisitor(ArgSM));
> > + Report->addVisitor(llvm::make_unique<SecKeychainBugVisitor>(ArgSM));
> > Report->addRange(ArgExpr->getSourceRange());
> > Report->markInteresting(AS->Region);
> > C.emitReport(Report);
> > @@ -540,7 +540,7 @@ BugReport *MacOSKeychainAPIChecker::
> > BugReport *Report = new BugReport(*BT, os.str(), N,
> LocUsedForUniqueing,
> >
> AllocNode->getLocationContext()->getDecl());
> >
> > - Report->addVisitor(new SecKeychainBugVisitor(AP.first));
> > +
> Report->addVisitor(llvm::make_unique<SecKeychainBugVisitor>(AP.first));
> > markInteresting(Report, AP);
> > return Report;
> > }
> >
> > Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Thu Sep 4
> 18:54:33 2014
> > @@ -1467,7 +1467,7 @@ void MallocChecker::ReportMismatchedDeal
> > BugReport *R = new BugReport(*BT_MismatchedDealloc, os.str(), N);
> > R->markInteresting(Sym);
> > R->addRange(Range);
> > - R->addVisitor(new MallocBugVisitor(Sym));
> > + R->addVisitor(llvm::make_unique<MallocBugVisitor>(Sym));
> > C.emitReport(R);
> > }
> > }
> > @@ -1551,7 +1551,7 @@ void MallocChecker::ReportUseAfterFree(C
> >
> > R->markInteresting(Sym);
> > R->addRange(Range);
> > - R->addVisitor(new MallocBugVisitor(Sym));
> > + R->addVisitor(llvm::make_unique<MallocBugVisitor>(Sym));
> > C.emitReport(R);
> > }
> > }
> > @@ -1583,7 +1583,7 @@ void MallocChecker::ReportDoubleFree(Che
> > R->markInteresting(Sym);
> > if (PrevSym)
> > R->markInteresting(PrevSym);
> > - R->addVisitor(new MallocBugVisitor(Sym));
> > + R->addVisitor(llvm::make_unique<MallocBugVisitor>(Sym));
> > C.emitReport(R);
> > }
> > }
> > @@ -1607,7 +1607,7 @@ void MallocChecker::ReportDoubleDelete(C
> > "Attempt to delete released memory",
> N);
> >
> > R->markInteresting(Sym);
> > - R->addVisitor(new MallocBugVisitor(Sym));
> > + R->addVisitor(llvm::make_unique<MallocBugVisitor>(Sym));
> > C.emitReport(R);
> > }
> > }
> > @@ -1835,7 +1835,7 @@ void MallocChecker::reportLeak(SymbolRef
> > new BugReport(*BT_Leak[*CheckKind], os.str(), N,
> LocUsedForUniqueing,
> > AllocNode->getLocationContext()->getDecl());
> > R->markInteresting(Sym);
> > - R->addVisitor(new MallocBugVisitor(Sym, true));
> > + R->addVisitor(llvm::make_unique<MallocBugVisitor>(Sym, true));
> > C.emitReport(R);
> > }
> >
> >
> > Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
> (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp Thu
> Sep 4 18:54:33 2014
> > @@ -1732,13 +1732,13 @@ namespace {
> > const ExplodedNode
> *N,
> > BugReport &BR)
> override;
> >
> > - BugReporterVisitor *clone() const override {
> > + std::unique_ptr<BugReporterVisitor> clone() const override {
> > // The curiously-recurring template pattern only works for one
> level of
> > // subclassing. Rather than make a new template base for
> > // CFRefReportVisitor, we simply override clone() to do the right
> thing.
> > // This could be trouble someday if BugReporterVisitorImpl is ever
> > // used for something else besides a convenient implementation of
> clone().
> > - return new CFRefLeakReportVisitor(*this);
> > + return llvm::make_unique<CFRefLeakReportVisitor>(*this);
> > }
> > };
> >
> > @@ -1751,7 +1751,7 @@ namespace {
> > bool registerVisitor = true)
> > : BugReport(D, D.getDescription(), n) {
> > if (registerVisitor)
> > - addVisitor(new CFRefReportVisitor(sym, GCEnabled, Log));
> > + addVisitor(llvm::make_unique<CFRefReportVisitor>(sym,
> GCEnabled, Log));
> > addGCModeDescription(LOpts, GCEnabled);
> > }
> >
> > @@ -1759,7 +1759,7 @@ namespace {
> > const SummaryLogTy &Log, ExplodedNode *n, SymbolRef sym,
> > StringRef endText)
> > : BugReport(D, D.getDescription(), endText, n) {
> > - addVisitor(new CFRefReportVisitor(sym, GCEnabled, Log));
> > + addVisitor(llvm::make_unique<CFRefReportVisitor>(sym, GCEnabled,
> Log));
> > addGCModeDescription(LOpts, GCEnabled);
> > }
> >
> > @@ -2387,7 +2387,7 @@ CFRefLeakReport::CFRefLeakReport(CFRefBu
> > }
> > }
> >
> > - addVisitor(new CFRefLeakReportVisitor(sym, GCEnabled, Log));
> > + addVisitor(llvm::make_unique<CFRefLeakReportVisitor>(sym, GCEnabled,
> Log));
> > }
> >
> >
> //===----------------------------------------------------------------------===//
> >
> > Modified:
> cfe/trunk/lib/StaticAnalyzer/Checkers/TestAfterDivZeroChecker.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/TestAfterDivZeroChecker.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Checkers/TestAfterDivZeroChecker.cpp
> (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Checkers/TestAfterDivZeroChecker.cpp
> Thu Sep 4 18:54:33 2014
> > @@ -176,7 +176,8 @@ void TestAfterDivZeroChecker::reportBug(
> > "already been used for division",
> > N);
> >
> > - R->addVisitor(new DivisionBRVisitor(Val.getAsSymbol(),
> C.getStackFrame()));
> > +
> R->addVisitor(llvm::make_unique<DivisionBRVisitor>(Val.getAsSymbol(),
> > +
> C.getStackFrame()));
> > C.emitReport(R);
> > }
> > }
> >
> > Modified:
> cfe/trunk/lib/StaticAnalyzer/Checkers/UndefCapturedBlockVarChecker.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UndefCapturedBlockVarChecker.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > ---
> cfe/trunk/lib/StaticAnalyzer/Checkers/UndefCapturedBlockVarChecker.cpp
> (original)
> > +++
> cfe/trunk/lib/StaticAnalyzer/Checkers/UndefCapturedBlockVarChecker.cpp Thu
> Sep 4 18:54:33 2014
> > @@ -92,8 +92,8 @@ UndefCapturedBlockVarChecker::checkPostS
> > BugReport *R = new BugReport(*BT, os.str(), N);
> > if (const Expr *Ex = FindBlockDeclRefExpr(BE->getBody(), VD))
> > R->addRange(Ex->getSourceRange());
> > - R->addVisitor(new FindLastStoreBRVisitor(*V, VR,
> > -
> /*EnableNullFPSuppression*/false));
> > + R->addVisitor(llvm::make_unique<FindLastStoreBRVisitor>(
> > + *V, VR, /*EnableNullFPSuppression*/ false));
> > R->disablePathPruning();
> > // need location of block
> > C.emitReport(R);
> >
> > Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp Thu Sep 4
> 18:54:33 2014
> > @@ -499,10 +499,9 @@ PathDiagnosticBuilder::getEnclosingStmtL
> >
> //===----------------------------------------------------------------------===//
> > // "Visitors only" path diagnostic generation algorithm.
> >
> //===----------------------------------------------------------------------===//
> > -static bool GenerateVisitorsOnlyPathDiagnostic(PathDiagnostic &PD,
> > - PathDiagnosticBuilder
> &PDB,
> > - const ExplodedNode *N,
> > - ArrayRef<BugReporterVisitor *>
> visitors) {
> > +static bool GenerateVisitorsOnlyPathDiagnostic(
> > + PathDiagnostic &PD, PathDiagnosticBuilder &PDB, const ExplodedNode
> *N,
> > + ArrayRef<std::unique_ptr<BugReporterVisitor>> visitors) {
> > // All path generation skips the very first node (the error node).
> > // This is because there is special handling for the end-of-path note.
> > N = N->getFirstPred();
> > @@ -511,11 +510,9 @@ static bool GenerateVisitorsOnlyPathDiag
> >
> > BugReport *R = PDB.getBugReport();
> > while (const ExplodedNode *Pred = N->getFirstPred()) {
> > - for (ArrayRef<BugReporterVisitor *>::iterator I = visitors.begin(),
> > - E = visitors.end();
> > - I != E; ++I) {
> > + for (auto &V : visitors) {
> > // Visit all the node pairs, but throw the path pieces away.
> > - PathDiagnosticPiece *Piece = (*I)->VisitNode(N, Pred, PDB, *R);
> > + PathDiagnosticPiece *Piece = V->VisitNode(N, Pred, PDB, *R);
> > delete Piece;
> > }
> >
> > @@ -556,11 +553,10 @@ static void updateStackPiecesWithMessage
> >
> > static void CompactPathDiagnostic(PathPieces &path, const
> SourceManager& SM);
> >
> > -static bool GenerateMinimalPathDiagnostic(PathDiagnostic& PD,
> > - PathDiagnosticBuilder &PDB,
> > - const ExplodedNode *N,
> > - LocationContextMap &LCM,
> > - ArrayRef<BugReporterVisitor *>
> visitors) {
> > +static bool GenerateMinimalPathDiagnostic(
> > + PathDiagnostic &PD, PathDiagnosticBuilder &PDB, const ExplodedNode
> *N,
> > + LocationContextMap &LCM,
> > + ArrayRef<std::unique_ptr<BugReporterVisitor>> visitors) {
> >
> > SourceManager& SMgr = PDB.getSourceManager();
> > const LocationContext *LC = PDB.LC;
> > @@ -870,10 +866,8 @@ static bool GenerateMinimalPathDiagnosti
> > if (NextNode) {
> > // Add diagnostic pieces from custom visitors.
> > BugReport *R = PDB.getBugReport();
> > - for (ArrayRef<BugReporterVisitor *>::iterator I =
> visitors.begin(),
> > - E = visitors.end();
> > - I != E; ++I) {
> > - if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB,
> *R)) {
> > + for (auto &V : visitors) {
> > + if (PathDiagnosticPiece *p = V->VisitNode(N, NextNode, PDB,
> *R)) {
> > PD.getActivePath().push_front(p);
> > updateStackPiecesWithMessage(p, CallStack);
> > }
> > @@ -1392,11 +1386,10 @@ static bool isInLoopBody(ParentMap &PM,
> > // Top-level logic for generating extensive path diagnostics.
> >
> //===----------------------------------------------------------------------===//
> >
> > -static bool GenerateExtensivePathDiagnostic(PathDiagnostic& PD,
> > - PathDiagnosticBuilder &PDB,
> > - const ExplodedNode *N,
> > - LocationContextMap &LCM,
> > - ArrayRef<BugReporterVisitor *>
> visitors) {
> > +static bool GenerateExtensivePathDiagnostic(
> > + PathDiagnostic &PD, PathDiagnosticBuilder &PDB, const ExplodedNode
> *N,
> > + LocationContextMap &LCM,
> > + ArrayRef<std::unique_ptr<BugReporterVisitor>> visitors) {
> > EdgeBuilder EB(PD, PDB);
> > const SourceManager& SM = PDB.getSourceManager();
> > StackDiagVector CallStack;
> > @@ -1573,10 +1566,8 @@ static bool GenerateExtensivePathDiagnos
> >
> > // Add pieces from custom visitors.
> > BugReport *R = PDB.getBugReport();
> > - for (ArrayRef<BugReporterVisitor *>::iterator I = visitors.begin(),
> > - E = visitors.end();
> > - I != E; ++I) {
> > - if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB,
> *R)) {
> > + for (auto &V : visitors) {
> > + if (PathDiagnosticPiece *p = V->VisitNode(N, NextNode, PDB, *R)) {
> > const PathDiagnosticLocation &Loc = p->getLocation();
> > EB.addEdge(Loc, true);
> > PD.getActivePath().push_front(p);
> > @@ -1635,12 +1626,10 @@ static const char StrLoopRangeEmpty[] =
> > static const char StrLoopCollectionEmpty[] =
> > "Loop body skipped when collection is empty";
> >
> > -static bool
> > -GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD,
> > - PathDiagnosticBuilder &PDB,
> > - const ExplodedNode *N,
> > - LocationContextMap &LCM,
> > - ArrayRef<BugReporterVisitor *>
> visitors) {
> > +static bool GenerateAlternateExtensivePathDiagnostic(
> > + PathDiagnostic &PD, PathDiagnosticBuilder &PDB, const ExplodedNode
> *N,
> > + LocationContextMap &LCM,
> > + ArrayRef<std::unique_ptr<BugReporterVisitor>> visitors) {
> >
> > BugReport *report = PDB.getBugReport();
> > const SourceManager& SM = PDB.getSourceManager();
> > @@ -1867,10 +1856,8 @@ GenerateAlternateExtensivePathDiagnostic
> > continue;
> >
> > // Add pieces from custom visitors.
> > - for (ArrayRef<BugReporterVisitor *>::iterator I = visitors.begin(),
> > - E = visitors.end();
> > - I != E; ++I) {
> > - if (PathDiagnosticPiece *p = (*I)->VisitNode(N, NextNode, PDB,
> *report)) {
> > + for (auto &V : visitors) {
> > + if (PathDiagnosticPiece *p = V->VisitNode(N, NextNode, PDB,
> *report)) {
> > addEdgeToPath(PD.getActivePath(), PrevLoc, p->getLocation(),
> PDB.LC);
> > PD.getActivePath().push_front(p);
> > updateStackPiecesWithMessage(p, CallStack);
> > @@ -2547,7 +2534,7 @@ void BuiltinBug::anchor() {}
> >
> > void BugReport::NodeResolver::anchor() {}
> >
> > -void BugReport::addVisitor(BugReporterVisitor* visitor) {
> > +void BugReport::addVisitor(std::unique_ptr<BugReporterVisitor> visitor)
> {
> > if (!visitor)
> > return;
> >
> > @@ -2555,20 +2542,15 @@ void BugReport::addVisitor(BugReporterVi
> > visitor->Profile(ID);
> > void *InsertPos;
> >
> > - if (CallbacksSet.FindNodeOrInsertPos(ID, InsertPos)) {
> > - delete visitor;
> > + if (CallbacksSet.FindNodeOrInsertPos(ID, InsertPos))
> > return;
> > - }
> >
> > - CallbacksSet.InsertNode(visitor, InsertPos);
> > - Callbacks.push_back(visitor);
> > + CallbacksSet.InsertNode(visitor.get(), InsertPos);
> > + Callbacks.push_back(std::move(visitor));
> > ++ConfigurationChangeToken;
> > }
> >
> > BugReport::~BugReport() {
> > - for (visitor_iterator I = visitor_begin(), E = visitor_end(); I != E;
> ++I) {
> > - delete *I;
> > - }
> > while (!interestingSymbols.empty()) {
> > popInterestingSymbolsAndRegions();
> > }
> > @@ -3126,9 +3108,9 @@ bool GRBugReporter::generatePathDiagnost
> > const ExplodedNode *N = ErrorGraph.ErrorNode;
> >
> > // Register additional node visitors.
> > - R->addVisitor(new NilReceiverBRVisitor());
> > - R->addVisitor(new ConditionBRVisitor());
> > - R->addVisitor(new LikelyFalsePositiveSuppressionBRVisitor());
> > + R->addVisitor(llvm::make_unique<NilReceiverBRVisitor>());
> > + R->addVisitor(llvm::make_unique<ConditionBRVisitor>());
> > +
> R->addVisitor(llvm::make_unique<LikelyFalsePositiveSuppressionBRVisitor>());
> >
> > BugReport::VisitorList visitors;
> > unsigned origReportConfigToken, finalReportConfigToken;
> > @@ -3188,7 +3170,7 @@ bool GRBugReporter::generatePathDiagnost
> > }
> >
> > // Clean up the visitors we used.
> > - llvm::DeleteContainerPointers(visitors);
> > + visitors.clear();
> >
> > // Did anything change while generating this path?
> > finalReportConfigToken = R->getConfigurationChangeToken();
> >
> > Modified: cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp?rev=217205&r1=217204&r2=217205&view=diff
> >
> ==============================================================================
> > --- cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp (original)
> > +++ cfe/trunk/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp Thu Sep 4
> 18:54:33 2014
> > @@ -218,7 +218,8 @@ public:
> > EnableNullFPSuppression =
> State->isNull(*RetLoc).isConstrainedTrue();
> >
> > BR.markInteresting(CalleeContext);
> > - BR.addVisitor(new ReturnVisitor(CalleeContext,
> EnableNullFPSuppression));
> > + BR.addVisitor(llvm::make_unique<ReturnVisitor>(CalleeContext,
> > +
> EnableNullFPSuppression));
> > }
> >
> > /// Returns true if any counter-suppression heuristics are enabled for
> > @@ -565,8 +566,8 @@ PathDiagnosticPiece *FindLastStoreBRVisi
> > if (const VarRegion *OriginalR = BDR->getOriginalRegion(VR)) {
> > if (Optional<KnownSVal> KV =
> > State->getSVal(OriginalR).getAs<KnownSVal>())
> > - BR.addVisitor(new FindLastStoreBRVisitor(*KV, OriginalR,
> > -
> EnableNullFPSuppression));
> > + BR.addVisitor(llvm::make_unique<FindLastStoreBRVisitor>(
> > + *KV, OriginalR, EnableNullFPSuppression));
> > }
> > }
> > }
> > @@ -975,8 +976,8 @@ bool bugreporter::trackNullOrUndefValue(
> > // got initialized.
> > if (const MemRegion *RR = getLocationRegionIfReference(Inner, N))
> {
> > if (Optional<KnownSVal> KV = LVal.getAs<KnownSVal>())
> > - report.addVisitor(new FindLastStoreBRVisitor(*KV, RR,
> > -
> EnableNullFPSuppression));
> > + report.addVisitor(llvm::make_unique<FindLastStoreBRVisitor>(
> > + *KV, RR, EnableNullFPSuppression));
> > }
> > }
> >
> > @@ -986,30 +987,26 @@ bool bugreporter::trackNullOrUndefValue(
> >
> > report.markInteresting(R);
> > report.markInteresting(V);
> > - report.addVisitor(new UndefOrNullArgVisitor(R));
> > + report.addVisitor(llvm::make_unique<UndefOrNullArgVisitor>(R));
> >
> > // If the contents are symbolic, find out when they became null.
> > - if (V.getAsLocSymbol(/*IncludeBaseRegions*/ true)) {
> > - BugReporterVisitor *ConstraintTracker =
> > - new TrackConstraintBRVisitor(V.castAs<DefinedSVal>(), false);
> > - report.addVisitor(ConstraintTracker);
> > - }
> > + if (V.getAsLocSymbol(/*IncludeBaseRegions*/ true))
> > + report.addVisitor(llvm::make_unique<TrackConstraintBRVisitor>(
> > + V.castAs<DefinedSVal>(), false));
> >
> > // Add visitor, which will suppress inline defensive checks.
> > if (Optional<DefinedSVal> DV = V.getAs<DefinedSVal>()) {
> > - if (!DV->isZeroConstant() &&
> > - LVState->isNull(*DV).isConstrainedTrue() &&
> > - EnableNullFPSuppression) {
> > - BugReporterVisitor *IDCSuppressor =
> > - new SuppressInlineDefensiveChecksVisitor(*DV,
> > - LVNode);
> > - report.addVisitor(IDCSuppressor);
> > + if (!DV->isZeroConstant() &&
> LVState->isNull(*DV).isConstrainedTrue() &&
> > + EnableNullFPSuppression) {
> > + report.addVisitor(
> > +
> llvm::make_unique<SuppressInlineDefensiveChecksVisitor>(*DV,
> > +
> LVNode));
> > }
> > }
> >
> > if (Optional<KnownSVal> KV = V.getAs<KnownSVal>())
> > - report.addVisitor(new FindLastStoreBRVisitor(*KV, R,
> > -
> EnableNullFPSuppression));
> > + report.addVisitor(llvm::make_unique<FindLastStoreBRVisitor>(
> > + *KV, R, EnableNullFPSuppression));
> > return true;
> > }
> > }
> > @@ -1040,12 +1037,12 @@ bool bugreporter::trackNullOrUndefValue(
> > RVal = state->getSVal(L->getRegion());
> >
> > const MemRegion *RegionRVal = RVal.getAsRegion();
> > - report.addVisitor(new UndefOrNullArgVisitor(L->getRegion()));
> > +
> report.addVisitor(llvm::make_unique<UndefOrNullArgVisitor>(L->getRegion()));
> >
> > if (RegionRVal && isa<SymbolicRegion>(RegionRVal)) {
> > report.markInteresting(RegionRVal);
> > - report.addVisitor(new TrackConstraintBRVisitor(
> > - loc::MemRegionVal(RegionRVal), false));
> > + report.addVisitor(llvm::make_unique<TrackConstraintBRVisitor>(
> > + loc::MemRegionVal(RegionRVal), false));
> > }
> > }
> >
> > @@ -1128,8 +1125,8 @@ void FindLastStoreBRVisitor::registerSta
> >
> > if (V.getAs<loc::ConcreteInt>() ||
> V.getAs<nonloc::ConcreteInt>()) {
> > // Register a new visitor with the BugReport.
> > - BR.addVisitor(new
> FindLastStoreBRVisitor(V.castAs<KnownSVal>(), R,
> > -
> EnableNullFPSuppression));
> > + BR.addVisitor(llvm::make_unique<FindLastStoreBRVisitor>(
> > + V.castAs<KnownSVal>(), R, EnableNullFPSuppression));
> > }
> > }
> > }
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140904/62b1208e/attachment.html>
More information about the cfe-commits
mailing list