+2017-04-21 Christophe Lyon <christophe.lyon@linaro.org>
+
+ Backport from mainline
+ +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.
+
2017-04-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
Backport from mainline
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))
+2017-04-21 Christophe Lyon <christophe.lyon@linaro.org>
+
+ Backport from mainline
+ 2015-11-23 Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ PR target/68390
+ * gcc.c-torture/execute/pr68390.c: New test.
+
2017-04-14 Dominique d'Humieres <dominiq@lps.ens.fr>
Backport from trunk
--- /dev/null
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+__attribute__ ((noinline))
+double direct(int x, ...)
+{
+ return x*x;
+}
+
+__attribute__ ((noinline))
+double broken(double (*indirect)(int x, ...), int v)
+{
+ return indirect(v);
+}
+
+int main ()
+{
+ double d1, d2;
+ int i = 2;
+ d1 = broken (direct, i);
+ if (d1 != i*i)
+ {
+ __builtin_abort ();
+ }
+ return 0;
+}
+