------- 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

Reply via email to