diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 182337f101b31e0e0e05136b34f8045faa9ecf18..a560cc701b3fb6a4578e725f5a661ad25b527368 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-10-08 Nathan Froyd <froydnj@codesourcery.com> + + * builtins.c (fold_call_stmt): Don't copy gimple call arguments + into a temporary array. + 2010-10-08 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/45903 diff --git a/gcc/builtins.c b/gcc/builtins.c index 0579f758cf50876e3b55bef7f0cbeae037ace995..1764cb445663def83eafa7a482212f522e7e95df 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -13627,26 +13627,20 @@ fold_call_stmt (gimple stmt, bool ignore) && !gimple_call_va_arg_pack_p (stmt)) { int nargs = gimple_call_num_args (stmt); + tree *args = (nargs > 0 + ? gimple_call_arg_ptr (stmt, 0) + : &error_mark_node); if (avoid_folding_inline_builtin (fndecl)) return NULL_TREE; if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD) { - return targetm.fold_builtin (fndecl, nargs, - (nargs > 0 - ? gimple_call_arg_ptr (stmt, 0) - : &error_mark_node), ignore); + return targetm.fold_builtin (fndecl, nargs, args, ignore); } else { if (nargs <= MAX_ARGS_TO_FOLD_BUILTIN) - { - tree args[MAX_ARGS_TO_FOLD_BUILTIN]; - int i; - for (i = 0; i < nargs; i++) - args[i] = gimple_call_arg (stmt, i); - ret = fold_builtin_n (loc, fndecl, args, nargs, ignore); - } + ret = fold_builtin_n (loc, fndecl, args, nargs, ignore); if (!ret) ret = gimple_fold_builtin_varargs (fndecl, stmt, ignore); if (ret)