This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug rtl-optimization/24823] [4.1/4.2 Regression] ICE in insert_save, at caller-save.c:719



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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]