OSDN Git Service

* builtins.c (expand_builtin_stpcpy): Only expand when the length
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 May 2003 21:14:46 +0000 (21:14 +0000)
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 5 May 2003 21:14:46 +0000 (21:14 +0000)
of the source string can be evaluated at compile-time.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@66503 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c

index 3cf8d08..ed14f65 100644 (file)
@@ -1,3 +1,8 @@
+2003-05-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * builtins.c (expand_builtin_stpcpy): Only expand when the length
+       of the source string can be evaluated at compile-time.
+
 2003-05-05  Aldy Hernandez  <aldyh@redhat.com>
 
         * testsuite/gcc.c-torture/compile/simd-6.c: New.
index dfc17e5..feee531 100644 (file)
@@ -2508,7 +2508,7 @@ expand_builtin_stpcpy (arglist, target, mode)
   else
     {
       tree newarglist;
-      tree len;
+      tree src, len;
 
       /* If return value is ignored, transform stpcpy into strcpy.  */
       if (target == const0_rtx)
@@ -2527,8 +2527,12 @@ expand_builtin_stpcpy (arglist, target, mode)
                              target, mode, EXPAND_NORMAL);
        }
 
-      len = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)));
-      if (len == 0)
+      /* Ensure we get an actual string who length can be evaluated at
+         compile-time, not an expression containing a string.  This is
+         because the latter will potentially produce pessimized code
+         when used to produce the return value.  */
+      src = TREE_VALUE (TREE_CHAIN (arglist));
+      if (! c_getstr (src) || ! (len = c_strlen (src)))
        return 0;
 
       len = fold (size_binop (PLUS_EXPR, len, ssize_int (1)));