On 1/4/19 3:54 PM, Jakub Jelinek wrote: > Hi! > > The following patch fixes ICU miscompilation, where an initial part of a > buffer is initializer from non-zero terminated string literal (in ICU > actually from an array of non-zero chars that the FE newly turns into > non-zero terminated string literal), but the code recently added to > tree-ssa-strlen.c doesn't consider the possibility of string literals that > aren't zero terminated. > > STRING_CSTs actually are always zero terminated, but if TREE_STRING_LENGTH > doesn't include the terminating character, it is just bytes. > > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for > trunk? > > I was considering using strnlen, but if all STRING_CSTs are actually zero > terminated, it will mean it reads are most one further byte and on many > targets strlen is more optimized than strnlen. > > 2019-01-04 Jakub Jelinek <ja...@redhat.com> > > PR tree-optimization/88693 > * tree-ssa-strlen.c (get_min_string_length): Don't set *full_string_p > for STRING_CSTs that don't contain any NUL characters in the first > TREE_STRING_LENGTH bytes. > > * gcc.c-torture/execute/pr88693.c: New test. Don't have time to review tonight. But FYI, my tester flagged ICU due to a testsuite failure.
Jeff