re PR middle-end/46360 (ICE in release_defs, at tree-ssanames.c:313)
authorJakub Jelinek <jakub@redhat.com>
Tue, 9 Nov 2010 11:54:32 +0000 (12:54 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 9 Nov 2010 11:54:32 +0000 (12:54 +0100)
PR middle-end/46360
* tree-ssa-propagate.c (update_call_from_tree): Fix for use
not in SSA mode.

* gcc.c-torture/compile/pr46360.c: New test.

From-SVN: r166482

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr46360.c [new file with mode: 0644]
gcc/tree-ssa-propagate.c

index 5c73a47b150cd3ac4b65036c668059557aa32c54..110b7fb1797648fa0f42a02ce2293820668fd2a5 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/46360
+       * tree-ssa-propagate.c (update_call_from_tree): Fix for use
+       not in SSA mode.
+
 2010-11-09  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/46221
index e0f6069a7d28db60cde79f308f8a6799a8991f54..07b1a58885c06fd8458178d08d32b6b870816c11 100644 (file)
@@ -1,5 +1,8 @@
 2010-11-09  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/46360
+       * gcc.c-torture/compile/pr46360.c: New test.
+
        PR c++/45894
        * g++.dg/warn/Wsequence-point-2.C: New test.
 
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr46360.c b/gcc/testsuite/gcc.c-torture/compile/pr46360.c
new file mode 100644 (file)
index 0000000..1a5239b
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR middle-end/46360 */
+
+__attribute__((gnu_inline, always_inline)) extern inline char *
+strncpy (char *dest, const char *src, __SIZE_TYPE__ len)
+{
+  return __builtin_strncpy (dest, src, len);
+}
+
+void
+foo (char *s)
+{
+  strncpy (s, "", 0);
+}
index c97960cfdf758675fb92513f495a896c29a480a8..7f1d84ebdfefdece3ffd3179679182541be2cd12 100644 (file)
@@ -760,8 +760,11 @@ update_call_from_tree (gimple_stmt_iterator *si_p, tree expr)
           /* No value is expected, and EXPR has no effect.
              Replace it with an empty statement.  */
           new_stmt = gimple_build_nop ();
-         unlink_stmt_vdef (stmt);
-         release_defs (stmt);
+         if (gimple_in_ssa_p (cfun))
+           {
+             unlink_stmt_vdef (stmt);
+             release_defs (stmt);
+           }
         }
       else
         {
@@ -773,7 +776,8 @@ update_call_from_tree (gimple_stmt_iterator *si_p, tree expr)
           lhs = create_tmp_var (TREE_TYPE (expr), NULL);
           new_stmt = gimple_build_assign (lhs, expr);
           add_referenced_var (lhs);
-          lhs = make_ssa_name (lhs, new_stmt);
+         if (gimple_in_ssa_p (cfun))
+           lhs = make_ssa_name (lhs, new_stmt);
           gimple_assign_set_lhs (new_stmt, lhs);
          gimple_set_vuse (new_stmt, gimple_vuse (stmt));
          gimple_set_vdef (new_stmt, gimple_vdef (stmt));