On Thu, May 16, 2013 at 03:31:40PM +0200, Marek Polacek wrote:
> Cool, I took the gsi_next approach; seems to work nicely.  So, updated
> version (it still doesn't handle p[1], p[2], etc.).
> 
> Regtested/bootstrapped on x86_64-linux.
> 
> 2013-05-16  Marek Polacek  <pola...@redhat.com>
> 
>       * tree-ssa-strlen.c (handle_char_store): Don't invalidate
>       cached length when doing non-zero store.
> 
>       * gcc.dg/strlenopt-25.c: New test.
> 
> --- gcc/tree-ssa-strlen.c.mp  2013-05-15 14:11:20.079707492 +0200
> +++ gcc/tree-ssa-strlen.c     2013-05-16 14:44:06.496545662 +0200
> @@ -1717,6 +1717,13 @@ handle_char_store (gimple_stmt_iterator
>           si->endptr = ssaname;
>         si->dont_invalidate = true;
>       }

Please add here a comment what it does and why, that if si->length
is non-zero constant, we know that the character at that spot is
not '\0' and when storing non-'\0' to that location, we can't affect
size of any strings at all.  Therefore we do the gsi_next + return false
to signal caller that it shouldn't invalidate anything.

Ok with that change, thanks.

        Jakub

Reply via email to