jdoerfert added inline comments.
================ Comment at: clang/lib/CodeGen/CGCall.cpp:2174 + } + unsigned ArgNo = 0; ---------------- rsmith wrote: > CJ-Johnson wrote: > > jdoerfert wrote: > > > Even if null pointer is valid we should place dereferenceable. > > > > > > We also could never place nonnull and let the middle-end make the > > > dereferenceable -> nonnull deduction, though I don't see why we can't > > > just add nonnull here. > > I re-ran ninja check after making this fix and addressed the newly-affected > > tests. So the patch is fully up to date :) > The LLVM LangRef says that in address space 0, `dereferenceable` implies > `nonnull`, so I don't think we can emit `dereferenceable` in > `NullPointerIsValid` mode, and we'd need to use `dereferenceable_or_null` > instead. (Perhaps the LangRef is wrong, though, and the > `null_pointer_is_valid` function attribute overrides that determination.) > (Perhaps the LangRef is wrong, though, and the null_pointer_is_valid function > attribute overrides that determination.) This is the case. IMHO, dereferenceable has to be correct here, regardless of the mode. You could access the object in the function entry, which we would use to deduce dereferenceable, and if the `NullPointerIsValid` is not translated to the function attribute also to `nonnull`. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D17993/new/ https://reviews.llvm.org/D17993 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits