aboutsummaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2017-12-20 00:46:38 +0000
committerTom de Vries <vries@gcc.gnu.org>2017-12-20 00:46:38 +0000
commit4b522b8f339f4e7844843d30f38ea9459d908e3c (patch)
treecd32dc6ce38614687f2e8641be27ecb2f2300692 /gcc/calls.c
parentf00b0bad2afa3912e91910eaa1f6c7e74fe86683 (diff)
downloadgcc-4b522b8f339f4e7844843d30f38ea9459d908e3c.zip
gcc-4b522b8f339f4e7844843d30f38ea9459d908e3c.tar.gz
gcc-4b522b8f339f4e7844843d30f38ea9459d908e3c.tar.bz2
Don't call targetm.calls.static_chain in non-static function
2017-12-20 Tom de Vries <tom@codesourcery.com> PR middle-end/83423 * config/i386/i386.c (ix86_static_chain): Move DECL_STATIC_CHAIN test ... * calls.c (rtx_for_static_chain): ... here. New function. * calls.h (rtx_for_static_chain): Declare. * builtins.c (expand_builtin_setjmp_receiver): Use rtx_for_static_chain instead of targetm.calls.static_chain. * df-scan.c (df_get_entry_block_def_set): Same. From-SVN: r255849
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index da6c96b..6057aa6 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2460,6 +2460,17 @@ rtx_for_function_call (tree fndecl, tree addr)
return funexp;
}
+/* Return the static chain for this function, if any. */
+
+rtx
+rtx_for_static_chain (const_tree fndecl_or_type, bool incoming_p)
+{
+ if (DECL_P (fndecl_or_type) && !DECL_STATIC_CHAIN (fndecl_or_type))
+ return NULL;
+
+ return targetm.calls.static_chain (fndecl_or_type, incoming_p);
+}
+
/* Internal state for internal_arg_pointer_based_exp and its helpers. */
static struct
{