]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR tree-optimization/57230 (tree-ssa-strlen incorrectly optimizes a...
authorRichard Biener <rguenther@suse.de>
Wed, 4 Jun 2014 11:59:45 +0000 (11:59 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 4 Jun 2014 11:59:45 +0000 (11:59 +0000)
2014-06-04  Richard Biener  <rguenther@suse.de>

Backport from mainline
2013-05-13  Jakub Jelinek  <jakub@redhat.com>

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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/strlenopt-23.c [new file with mode: 0644]
gcc/tree-ssa-strlen.c

index 4acd9e7536e3ba76012affd5ab2d7250c9602842..e305bf1f3f17d14375dad8a2fe317d097cd19d68 100644 (file)
@@ -1,3 +1,12 @@
+2014-06-04  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2013-05-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/57230
+       * tree-ssa-strlen.c (handle_char_store): Add missing integer_zerop
+       check.
+
 2014-05-28  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/61044
index 8ebcd8c6c6fae6070bf1fd7ba1d969ef9f24fe2b..62e9a63e011d12e8e0c1abc52e433fcb3ac81c69 100644 (file)
@@ -1,3 +1,11 @@
+2014-06-04  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2013-05-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/57230
+       * gcc.dg/strlenopt-23.c: New test.
+
 2014-05-27  Eric Botcazou  <ebotcazou@adacore.com>
 
        * 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 (file)
index 0000000..75dab2a
--- /dev/null
@@ -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;
+}
index 3a3aeeac9f2ad9edd799148ccb29146beb44c9f3..532bdac3faa5560c3a123aee64c50e4a088d3b1e 100644 (file)
@@ -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);