diff options
| author | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-15 18:17:20 +0000 |
|---|---|---|
| committer | sayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-05-15 18:17:20 +0000 |
| commit | d35544bd1e1524ba514486dc1990b2d6da41c126 (patch) | |
| tree | 3f4276db50354c8cf57f35b53b0efa95e76477f7 /gcc | |
| parent | b9da0959bae884f256290032555e2c9aea6793c5 (diff) | |
| download | ppe42-gcc-d35544bd1e1524ba514486dc1990b2d6da41c126.tar.gz ppe42-gcc-d35544bd1e1524ba514486dc1990b2d6da41c126.zip | |
* builtins.c (simplify_builtin_strcpy): Avoid use of chainon, so
that simplify_builtin doesn't destructively modify its argument.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@81893 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/builtins.c | 15 |
2 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1a23cf1b356..2b1ef2c483a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/builtins.c b/gcc/builtins.c index b0375c377aa..7643b2dd383 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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); } |

