From: Richard Biener Date: Wed, 4 Jun 2014 11:59:45 +0000 (+0000) Subject: backport: re PR tree-optimization/57230 (tree-ssa-strlen incorrectly optimizes a... X-Git-Tag: releases/gcc-4.7.4~53 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=29006014264a5ae4821a33301928c9c0f1cf14ff;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/57230 (tree-ssa-strlen incorrectly optimizes a strlen to 0) 2014-06-04 Richard Biener Backport from mainline 2013-05-13 Jakub Jelinek PR tree-optimization/57230 * tree-ssa-strlen.c (handle_char_store): Add missing integer_zerop check. * gcc.dg/strlenopt-23.c: New test. From-SVN: r211225 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4acd9e7536e3..e305bf1f3f17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2014-06-04 Richard Biener + + Backport from mainline + 2013-05-13 Jakub Jelinek + + PR tree-optimization/57230 + * tree-ssa-strlen.c (handle_char_store): Add missing integer_zerop + check. + 2014-05-28 Georg-Johann Lay PR target/61044 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8ebcd8c6c6fa..62e9a63e011d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-06-04 Richard Biener + + Backport from mainline + 2013-05-13 Jakub Jelinek + + PR tree-optimization/57230 + * gcc.dg/strlenopt-23.c: New test. + 2014-05-27 Eric Botcazou * gnat.dg/aliasing1.adb (dg-final): Robustify pattern matching. diff --git a/gcc/testsuite/gcc.dg/strlenopt-23.c b/gcc/testsuite/gcc.dg/strlenopt-23.c new file mode 100644 index 000000000000..75dab2ae0bb9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/strlenopt-23.c @@ -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; +} diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c index 3a3aeeac9f2a..532bdac3faa5 100644 --- a/gcc/tree-ssa-strlen.c +++ b/gcc/tree-ssa-strlen.c @@ -1693,7 +1693,7 @@ handle_char_store (gimple_stmt_iterator *gsi) 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);