real function foo (x, y)
  real x, y
  foo = y - x
  do while (foo .gt. 180.)
    foo = foo - 360.
  enddo
  do while (foo .le. -180.)
    foo = foo + 360.
  enddo
end

ICEs in various places depending on the exact -O level and target.
The problem is that __result_foo variable is given type not corresponding
to its kind which leads e.g. on i?86 -m32 to emit_move_insn ICE
(trying to copy a SFmode constant to DFmode var).

I'd say __result_foo should still use SFmode type, only return type of the
function should be DFmode and in the RETURN_EXPR widen it.


-- 
           Summary: ICEs with -ff2c
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jakub at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25392

Reply via email to