steakhal added a comment. In D97183#2700810 <https://reviews.llvm.org/D97183#2700810>, @vsavchenko wrote:
> In D97183#2699336 <https://reviews.llvm.org/D97183#2699336>, @steakhal wrote: > >> In D97183#2699080 <https://reviews.llvm.org/D97183#2699080>, @RedDocMD wrote: >> >>> For the following function: >>> >>> void foo(std::unique_ptr<A> P) { >>> A* praw = P.get(); >>> A* other = praw; >>> if (other) {} >>> P->foo(); >>> } >>> >>> Where do we expect a note? Where `praw` is initialized, where `other` is >>> initialized or both? >> >> I would expect no notes at all, since there is no bug. > > According to the existing analyzer logic, there is a bug. If you check > `other` for null, we can conclude that there are circumstances when it is > null indeed. I think we can conclude that `P` must be non-null (since it was unconditionally dereferenced), thus the previous check on the inner pointer and the branch it guards must be dead! This fact deserves a report, you are right. My bad. In this case, the report should show //how// the inner pointer got bound to the `other`. Thus, we should highlight both assignments. 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