On Thu, Sep 4, 2014 at 5:13 PM, Justin Bogner <[email protected]> wrote:
> David Blaikie <[email protected]> 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 > > [email protected] > > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
