NoQ added a comment.

By tracking the call-expression you're basically tracking the raw pointer value 
because that's what operators `*` and `->` return. Of course operator `*` 
returns an lvalue reference rather than a pointer but we don't make a 
difference when it comes to `SVal` representation.

F15896979: 525m0x.jpg <https://reviews.llvm.org/F15896979>

So you're saying that simply by always tracking the (final) raw pointer value 
and checking whether the raw value is interesting upon `.get()` you dodge the 
communication problem entirely. I think this is quite a statement! I'd like a 
stronger evidence for that than passing a couple of tests. Does the following 
test work?:

  void test(std::unique_ptr<A> P) {
    A *a = P.get(); // unlike your positive test this doesn't deserve a note
                    // because we weren't looking at 'a' when we concluded
                    // that the pointer is null
    if (!P) {
      P->foo();
    }
  }



> Essentially, when a `unique_ptr` is moved and subsequently used, it triggers 
> two warnings - one from `SmartPointerModelling` and another from `MoveChecker`

Do i understand correctly that this doesn't happen anymore when you stopped 
creating a new node?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D97183/new/

https://reviews.llvm.org/D97183

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

Reply via email to