https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67885
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kargl at gcc dot gnu.org --- Comment #3 from kargl at gcc dot gnu.org --- (In reply to Gerhard Steinmetz from comment #1) > Deleting this inner block gives another error : > > $ cat z5.f90 > program p > block > real, parameter :: a(2) = 1.0 > real :: x(2) > x = a > print *, x > end block > end > > > $ gfortran -g -O0 -Wall -fcheck=all -fno-frontend-optimize z5.f90 > /tmp/cckgiZhq.o: In function `p': > /home/.../z5.f90:5: undefined reference to `a.3386' > collect2: error: ld returned 1 exit status > The a(2) appears to be optimized out. Don't know if the code is legal because I haven't looked at standard, yet. Changing your print statement to if (x(1) /= 1.0) call abort gives % gfc6 -fdump-tree-original -c g5.f90 % cat g5.f90.003t.original p () { { real(kind=4) x[2]; (void) __builtin_memcpy ((void *) &x, (void *) &a, 8); if (x[0] != 1.0e+0) { _gfortran_abort (); } L.2:; L.1:; } }