dcoughlin accepted this revision.
dcoughlin added a comment.
This revision is now accepted and ready to land.

Looks good to me with some minor nits inside (and also a request to consider 
factoring out common code).



================
Comment at: include/clang/StaticAnalyzer/Core/CheckerManager.h:311
+                                  ExprEngine &Eng,
+                                  bool wasInlined = false);
+
----------------
Does 'wasInlined' really need to have a default argument? It looks like there 
are only two callers. (Also the capitalization is inconsistent).


================
Comment at: lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp:138
+  /// new-expression is this pointer. This callback is called between steps
+  /// (2) and (3). Post-call for the allocator is called before step (1).
+  /// Pre-statement for the new-expression is called on step (4) when the value
----------------
I find the following confusing: "Post-call for the allocator is called before 
step (1)." Did you mean "after" step one?


================
Comment at: lib/StaticAnalyzer/Checkers/MallocChecker.cpp:296
+                                        ProgramStateRef State,
+                                        Optional<SVal> RetVal = None) const;
 
----------------
It is probably worth explaining what RetVal is and what it means if it is None 
in the doxygen.


================
Comment at: lib/StaticAnalyzer/Checkers/MallocChecker.cpp:324
+                       AllocationFamily Family = AF_Malloc,
+                       Optional<SVal> RetVal = None);
 
----------------
Same comment about documenting RetVal here.


================
Comment at: lib/StaticAnalyzer/Checkers/MallocChecker.cpp:964
+    CheckerContext &C, const Expr *E, const unsigned AllocationSizeArg,
+    ProgramStateRef State, Optional<SVal> retVal) const {
   if (!State)
----------------
Nit: Capitalization of "retVal".


================
Comment at: lib/StaticAnalyzer/Checkers/MallocChecker.cpp:1289
+                                                    AllocationFamily Family,
+                                                    Optional<SVal> retVal) {
   if (!State)
----------------
Capitalization, again.


================
Comment at: lib/StaticAnalyzer/Checkers/MallocChecker.cpp:1302
+  SymbolRef Sym = retVal->getAsLocSymbol();
   assert(Sym);
 
----------------
I think it is worth a comment here about why we expect this assert succeed: the 
value will always be the result of a malloc function or an un-inlined call to 
the new allocator (if I understand correctly).


================
Comment at: lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp:343
+    if (const CXXNewExpr *CNE = dyn_cast_or_null<CXXNewExpr>(CE)) {
+      ExplodedNodeSet DstPostPostCallCallback;
+      getCheckerManager().runCheckersForPostCall(DstPostPostCallCallback,
----------------
Is it possible/desirable to factor out this logic (running the PostCall 
callbacks and then the NewAllocator callbacks) into a helper method on 
ExprEngine then call the helper from both VisitCXXNewAllocatorCall() and 
processCallExit()?


https://reviews.llvm.org/D41406



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to