https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88117
--- Comment #4 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- Looking at the reduced test case, we have z.span = 0; { character(kind=1)[0:][1:.z] * D.3877; integer(kind=8) D.3878; integer(kind=8) D.3879; integer(kind=8) D.3880; character(kind=1)[0:][1:._F.DA0] * D.3881; integer(kind=8) D.3882; integer(kind=8) D.3883; integer(kind=8) D.3884; integer(kind=8) D.3885; struct array01_unknown atmp.0; logical(kind=4) D.3899; integer(kind=8) D.3900; void * restrict D.3901; void * restrict D.3902; integer(kind=8) D.3903; integer(kind=8) D.3904; D.3908 = .z; (notice the absence of a declaration for D.3908 above) and later while (1) { if (S.1 > D.3885) goto L.1; { integer(kind=8) D.3908; integer(kind=8) D.3909; integer(kind=8) D.3910; I suspect this can be fixed by replacing "gfc_add_block" with "gfc_init_block" in the right place. Now the only problem is where...