[backport gcc-4.8.1 r198814 ] gcc/ 2013-05-13 Jakub Jelinek PR tree-optimization/57230 * tree-ssa-strlen.c (handle_char_store): Add missing integer_zerop check. gcc/testsuite/ 2013-05-13 Jakub Jelinek PR tree-optimization/57230 * gcc.dg/strlenopt-23.c: New test. --- gcc-4.7.3/gcc/testsuite/gcc.dg/strlenopt-23.c.~1~ 1970-01-01 01:00:00.000000000 +0100 +++ gcc-4.7.3/gcc/testsuite/gcc.dg/strlenopt-23.c 2013-05-18 11:21:57.039861156 +0200 @@ -0,0 +1,15 @@ +/* PR tree-optimization/57230 */ +/* { dg-do run } */ +/* { dg-options "-O2" } */ + +#include "strlenopt.h" + +int +main () +{ + char p[] = "hello world"; + p[0] = (char) (strlen (p) - 1); + if (strlen (p) != 11) + abort (); + return 0; +} --- gcc-4.7.3/gcc/tree-ssa-strlen.c.~1~ 2013-02-04 13:04:35.000000000 +0100 +++ gcc-4.7.3/gcc/tree-ssa-strlen.c 2013-05-18 11:21:57.039861156 +0200 @@ -1693,7 +1693,7 @@ handle_char_store (gimple_stmt_iterator its length may be decreased. */ adjust_last_stmt (si, stmt, false); } - else if (si != NULL) + else if (si != NULL && integer_zerop (gimple_assign_rhs1 (stmt))) { si = unshare_strinfo (si); si->length = build_int_cst (size_type_node, 0);