r217205 - unique_ptrify BugReporter::visitors

Justin Bogner mail at justinbogner.com
Thu Sep 4 17:13:42 PDT 2014


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.

>  
>
> 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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list