[PATCH] D128364: [InstCombine] Look through more casts when folding memchr and memcmp
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 23 11:11:14 PDT 2022
efriedma added inline comments.
================
Comment at: llvm/lib/Analysis/ValueTracking.cpp:4287
if (Slice.Array == nullptr) {
- if (TrimAtNul) {
+ if (Slice.Length && TrimAtNul) {
Str = StringRef();
----------------
msebor wrote:
> efriedma wrote:
> > Not sure I understand this change; why does it matter if the slice is zero-length here?
> The change prevents treating past-the-end accesses to `char` arrays the same was as those to empty strings, such as in `strlen("123" + 4)`. This is exercised by `str-int-3.ll` that I added in D125114 based on my understanding of the convention that library calls that provably result in an out-of-bounds access are best left for sanitizers to report. (I think an argument can be made that folding such calls to zero is safer than counting on sanitizers, so I don't mind removing the check and adjusting the test if it's decided that's preferable.)
If we want getConstantStringInfo(TrimAtNul=true) to always fail if it doesn't trim a nul, we could do that, but only failing when we don't trim a null and Slice.Array is null doesn't really make sense to me.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128364/new/
https://reviews.llvm.org/D128364
More information about the llvm-commits
mailing list