https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77959
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- expand_assignment is called with REALPART_EXPR <MEM[(complex(kind=4) &)&C.3418]> as to, where C.3418 is CONST_DECL. Of course one can't store into a CONST_DECL. If I compare this to how we compile: program p interface subroutine s(x) real :: x end end interface call s(1.0) end subroutine s(x) real :: x x = x + 1 end then the difference is that to_rtx = expand_expr (to, NULL_RTX, VOIDmode, EXPAND_WRITE); in that case returns (mem:SF (reg/f:DI 90) [1 C.3418+0 S4 A32]) and not the CONST_DOUBLE. I'll have a look.