rnkovacs added inline comments.

================
Comment at: lib/StaticAnalyzer/Checkers/DanglingInternalBufferChecker.cpp:32-40
+namespace clang {
+namespace ento {
+template<> struct ProgramStateTrait<PtrSet>
+  : public ProgramStatePartialTrait<PtrSet> {
+  static void *GDMIndex() {
+    static int Index = 0;
+    return &Index;
----------------
NoQ wrote:
> Please add a comment on how this template is useful. This trick is used by 
> some checkers, but it's a veeeery unobvious trick. We should probably add a 
> macro for that, i.e. `REGISTER_FACTORY_WITH_PROGRAMSTATE` or something like 
> that.
Should I do that then? Maybe in `CheckerContext.h`?


================
Comment at: lib/StaticAnalyzer/Checkers/DanglingInternalBufferChecker.cpp:115
     SVal RawPtr = Call.getReturnValue();
     if (!RawPtr.isUnknown()) {
+      // Start tracking this raw pointer by adding it to the set of symbols
----------------
NoQ wrote:
> I'd much rather unwrap the symbol here, i.e. `if (SymbolRef Sym = 
> RawPtr.getAsSymbol())`. A lot of other cornercases may occur if the 
> implementation is accidentally inlined (`Undefined`, concrete regions). Also, 
> speculatively, `.getAsSymbol(/* search for symbolic base = */ true)` for the 
> same reason//*//.
> 
> If we didn't care about inlined implementations, the `Unknown` check would 
> have been redundant. So it should also be safe to straightforwardly ignore 
> inlined implementations by consulting `C.wasInlined`, then the presence of 
> the symbol can be asserted. But i'd rather speculatively care about inlined 
> implementations as long as it seems easy.
> 
> __
> //*// In fact your code relies on a very wonky implementation detail of our 
> `SVal` hierarchy: namely, pointer-type return values of conservatively 
> evaluated functions are always expressed as `&SymRegion{conj_$N<pointer 
> type>}` and never as `&element{SymRegion{conj_$N<pointer type>}, 0 S32b, 
> pointee type}`. Currently nobody knows the rules under which zero element 
> regions are added in different parts of the analyzer, i.e. what is the 
> "canonical" representation of the symbolic pointer, though i made a few 
> attempts to speculate.
I wasn't aware of much of this. Thanks for the detailed explanation :)


https://reviews.llvm.org/D49057



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

Reply via email to