------- Comment #11 from krebbel at gcc dot gnu dot org 2005-11-21 09:29 ------- Ok, knowing that this may only happen if the return value of a function has a complex type a trivial fix could look like this:
Index: gcc/flow.c =================================================================== *** gcc/flow.c.orig 2005-11-15 14:21:23.000000000 +0100 --- gcc/flow.c 2005-11-21 09:34:05.000000000 +0100 *************** mark_used_regs (struct propagate_block_i *** 4020,4026 **** recursively scan the value being stored. */ if ((GET_CODE (testreg) == PARALLEL ! && GET_MODE (testreg) == BLKmode) || (REG_P (testreg) && (regno = REGNO (testreg), ! (regno == FRAME_POINTER_REGNUM --- 4020,4027 ---- recursively scan the value being stored. */ if ((GET_CODE (testreg) == PARALLEL ! && (GET_MODE (testreg) == BLKmode ! || COMPLEX_MODE_P (GET_MODE (testreg)))) || (REG_P (testreg) && (regno = REGNO (testreg), ! (regno == FRAME_POINTER_REGNUM This fixes the problem for my x86_64 crosscompiler but certainly needs further testing. Could somebody with an Intel 64bit system try to bootstrap this? Bootstraps on s390 wouldn't help here because we do not return complex types that way. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24823