Commit 5fbf0217 by Eric Botcazou Committed by Eric Botcazou

re PR c/9530 (ICE on missing return statement)

	PR c/9530
	* config/i386/i386.c (ix86_function_ok_for_sibcall): Forbid sibcalls
	from functions that return a float to functions that don't.

Co-Authored-By: Richard Henderson <rth@redhat.com>

From-SVN: r62480
parent 8f62128d
2003-02-06 Eric Botcazou <ebotcazou@libertysurf.fr>
Richard Henderson <rth@redhat.com>
PR c/9530
* config/i386/i386.c (ix86_function_ok_for_sibcall): Forbid sibcalls
from functions that return a float to functions that don't.
Thu Feb 6 00:18:38 CET 2003 Jan Hubicka <jh@suse.cz>
* i386.c (x86_inter_unit_moves): New variable.
......
......@@ -1482,11 +1482,9 @@ const struct attribute_spec ix86_attribute_table[] =
{ NULL, 0, 0, false, false, false, NULL }
};
/* If PIC, we cannot make sibling calls to global functions
because the PLT requires %ebx live.
If we are returning floats on the register stack, we cannot make
sibling calls to functions that return floats. (The stack adjust
instruction will wind up after the sibcall jump, and not be executed.) */
/* Decide whether we can make a sibling call to a function. DECL is the
declaration of the function being targeted by the call and EXP is the
CALL_EXPR representing the call. */
static bool
ix86_function_ok_for_sibcall (decl, exp)
......@@ -1501,10 +1499,11 @@ ix86_function_ok_for_sibcall (decl, exp)
/* If we are returning floats on the 80387 register stack, we cannot
make a sibcall from a function that doesn't return a float to a
function that does; the necessary stack adjustment will not be
executed. */
function that does or, conversely, from a function that does return
a float to a function that doesn't; the necessary stack adjustment
would not be executed. */
if (STACK_REG_P (ix86_function_value (TREE_TYPE (exp)))
&& ! STACK_REG_P (ix86_function_value (TREE_TYPE (DECL_RESULT (cfun->decl)))))
!= STACK_REG_P (ix86_function_value (TREE_TYPE (DECL_RESULT (cfun->decl)))))
return false;
/* If this call is indirect, we'll need to be able to use a call-clobbered
......
2003-02-06 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.c-torture/compile/20030206-1.c: New test.
2003-02-05 Roger Sayle <roger@eyesopen.com>
* gcc.c-torture/compile/921206-1.c: Rename undeclared function from
......
/* PR c/9530 */
/* Contributed by Volker Reichelt. */
/* Verify that the call to 'foo' is not turned
into a sibling call. */
void foo(float d);
float bar(float d);
float baz(float d)
{
foo(bar(d));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment