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. > > > 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 { > + 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
