diff options
author | Richard Henderson <rth@cygnus.com> | 2000-03-24 15:47:17 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-03-24 15:47:17 -0800 |
commit | 3477addf36f2f875671418b3cd2e933b749630a8 (patch) | |
tree | af83580b8aa96e963ea567d0881abbc9339d91a1 | |
parent | 46238b7dab9626030712b1f6aa9b2abd18e3e82e (diff) | |
download | gcc-3477addf36f2f875671418b3cd2e933b749630a8.zip gcc-3477addf36f2f875671418b3cd2e933b749630a8.tar.gz gcc-3477addf36f2f875671418b3cd2e933b749630a8.tar.bz2 |
builtins.c (expand_builtin_bzero): Convert `length' argument to sizetype.
* builtins.c (expand_builtin_bzero): Convert `length' argument
to sizetype.
From-SVN: r32732
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/builtins.c | 34 |
2 files changed, 21 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 166f4ae..2522508 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-03-24 Richard Henderson <rth@cygnus.com> + + * builtins.c (expand_builtin_bzero): Convert `length' argument + to sizetype. + 2000-03-24 Jakub Jelinek <jakub@redhat.com> * sibcall.c (skip_copy_to_return_value): Use OUTGOING_REGNO for diff --git a/gcc/builtins.c b/gcc/builtins.c index 285f4a0..0271d12 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -1582,33 +1582,31 @@ expand_builtin_bzero (exp) tree exp; { tree arglist = TREE_OPERAND (exp, 1); + tree dest, size, newarglist; + rtx result; if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ - || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE + || TREE_CODE (TREE_TYPE (dest = TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 - || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) + || (TREE_CODE (TREE_TYPE (size = TREE_VALUE (TREE_CHAIN (arglist)))) != INTEGER_TYPE)) - return 0; - else - { - tree newarglist; - rtx result; + return NULL_RTX; - /* New argument list transforming bzero(x, y) -> memset(x, 0, y). */ - newarglist = build_tree_list (NULL_TREE, TREE_VALUE (arglist)); - chainon (newarglist, build_tree_list (NULL_TREE, integer_zero_node)); - chainon (newarglist, - build_tree_list (NULL_TREE, TREE_VALUE (TREE_CHAIN (arglist)))); - TREE_OPERAND (exp, 1) = newarglist; + /* New argument list transforming bzero(ptr x, int y) to + memset(ptr x, int 0, size_t y). */ + + newarglist = build_tree_list (NULL_TREE, convert (sizetype, size)); + newarglist = tree_cons (NULL_TREE, integer_zero_node, newarglist); + newarglist = tree_cons (NULL_TREE, dest, newarglist); - result = expand_builtin_memset(exp); + TREE_OPERAND (exp, 1) = newarglist; + result = expand_builtin_memset(exp); - /* Always restore the original arguments. */ - TREE_OPERAND (exp, 1) = arglist; + /* Always restore the original arguments. */ + TREE_OPERAND (exp, 1) = arglist; - return result; - } + return result; } #ifdef HAVE_cmpstrsi |