diff options
author | Yvan Roux <yvan.roux@linaro.org> | 2015-12-28 09:40:20 +0100 |
---|---|---|
committer | Linaro Code Review <review@review.linaro.org> | 2015-12-30 12:09:14 +0000 |
commit | 0a0679afd918911c9021b126e67c5d5e939a5db2 (patch) | |
tree | 61c6b7ceadc5dde68334fd5b1b0df112e440e590 /gcc/config | |
parent | 55e7ff54a1ed7d22e1fd815f3ac5c8aca687564a (diff) | |
download | gcc-0a0679afd918911c9021b126e67c5d5e939a5db2.tar.gz |
gcc/
Backport from trunk r230730.
2015-11-23 Kugan Vivekanandarajah <kuganv@linaro.org>
PR target/68390
* config/arm/arm.c (arm_function_ok_for_sibcall): Get function type
for indirect function call.
gcc/testsuite/
Backport from trunk r230730.
2015-11-23 Kugan Vivekanandarajah <kuganv@linaro.org>
PR target/68390
* gcc/testsuite/gcc.c-torture/execute/pr68390.c: New test.
Change-Id: I83be78dbafa3dbd8b693ce9768d62bbeb9ff452c
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/arm/arm.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 04bd1f5179d..9b848bd5ed6 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -6695,8 +6695,13 @@ arm_function_ok_for_sibcall (tree decl, tree exp) a VFP register but then need to transfer it to a core register. */ rtx a, b; + tree decl_or_type = decl; - a = arm_function_value (TREE_TYPE (exp), decl, false); + /* If it is an indirect function pointer, get the function type. */ + if (!decl) + decl_or_type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (exp))); + + a = arm_function_value (TREE_TYPE (exp), decl_or_type, false); b = arm_function_value (TREE_TYPE (DECL_RESULT (cfun->decl)), cfun->decl, false); if (!rtx_equal_p (a, b)) |