From 9fd47435098270dd5687b9bbaa34d1b9ecb494e7 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sat, 22 May 2004 10:43:56 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/calls.c | 7 +++++++ 2 files changed, 12 insertions(+) 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); -- 2.30.2