builtins.c (simplify_builtin_strcpy): Avoid use of chainon...
authorRoger Sayle <roger@eyesopen.com>
Sat, 15 May 2004 18:17:20 +0000 (18:17 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Sat, 15 May 2004 18:17:20 +0000 (18:17 +0000)
* builtins.c (simplify_builtin_strcpy): Avoid use of chainon, so
that simplify_builtin doesn't destructively modify its argument.

From-SVN: r81893

gcc/ChangeLog
gcc/builtins.c

index 1a23cf1b35627acb1a7e81c203938cda3b84bae5..2b1ef2c483acfcbbcd3d99571a3c91c5d55993aa 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-15  Roger Sayle  <roger@eyesopen.com>
+
+       * builtins.c (simplify_builtin_strcpy): Avoid use of chainon, so
+       that simplify_builtin doesn't destructively modify its argument.
+
 2004-05-15  Richard Earnshaw  <reanrsha@arm.com>
 
        * arm/lib1funcs.asm (_lshrdi3, _ashrdi3, _ashldi3): Add ASM 
index b0375c377aa70bc87d05ad508a8f17127a53f2f7..7643b2dd38319e2ba4ea37bf75e8768b084502ec 100644 (file)
@@ -8298,7 +8298,7 @@ simplify_builtin_strpbrk (tree arglist)
 tree
 simplify_builtin_strcpy (tree arglist, tree len)
 {
-  tree fn;
+  tree fn, src, dst;
 
   if (!validate_arglist (arglist, POINTER_TYPE, POINTER_TYPE, VOID_TYPE))
     return 0;
@@ -8307,17 +8307,20 @@ simplify_builtin_strcpy (tree arglist, tree len)
   if (!fn)
     return 0;
 
+  src = TREE_VALUE (TREE_CHAIN (arglist));
+  dst = TREE_VALUE (arglist);
+
   if (!len)
     {
-      len = c_strlen (TREE_VALUE (TREE_CHAIN (arglist)), 1);
-      if (!len)
-       return 0;
-      if (TREE_SIDE_EFFECTS (len))
+      len = c_strlen (src, 1);
+      if (!len || TREE_SIDE_EFFECTS (len))
        return 0;
     }
 
   len = size_binop (PLUS_EXPR, len, ssize_int (1));
-  chainon (arglist, build_tree_list (NULL_TREE, len));
+  arglist = build_tree_list (NULL_TREE, len);
+  arglist = tree_cons (NULL_TREE, src, arglist);
+  arglist = tree_cons (NULL_TREE, dst, arglist);
   return build_function_call_expr (fn, arglist);
 }