From: Richard Sandiford Date: Sat, 22 May 2004 10:43:56 +0000 (+0000) Subject: calls.c (initialize_argument_information): Forbid sibcalls if a callee-copied argumen... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9fd47435098270dd5687b9bbaa34d1b9ecb494e7;p=gcc.git calls.c (initialize_argument_information): Forbid sibcalls if a callee-copied argument is stored in the current function's... * calls.c (initialize_argument_information): Forbid sibcalls if a callee-copied argument is stored in the current function's frame. From-SVN: r82129 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3c455e6c3b4..a01a10851d0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-05-22 Richard Sandiford + + * calls.c (initialize_argument_information): Forbid sibcalls if a + callee-copied argument is stored in the current function's frame. + 2004-05-22 Eric Christopher * fix-header.c (read_scan_file): Update for add_path change. diff --git a/gcc/calls.c b/gcc/calls.c index 419f45881a1..48d62f83e52 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -1129,6 +1129,13 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, && ! REG_P (DECL_RTL (TREE_OPERAND (args[i].tree_value, 1)))) args[i].tree_value = TREE_OPERAND (args[i].tree_value, 1); + /* We can't use sibcalls if a callee-copied argument is stored + in the current function's frame. */ + if (!call_from_thunk_p + && (!DECL_P (args[i].tree_value) + || !TREE_STATIC (args[i].tree_value))) + *may_tailcall = false; + args[i].tree_value = build1 (ADDR_EXPR, build_pointer_type (type), args[i].tree_value);