https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66377
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kargl at gcc dot gnu.org --- Comment #1 from kargl at gcc dot gnu.org --- Here's a slightly different testcase, which works as expected. module constant integer x1, x2, y1, y2 equivalence (y1,x1), (x2,y2) end module program test use constant y1 = 1 x2 = 2 call another() contains subroutine another() use constant, only : x1, y2 if (x1 /= 1 .or. x2 /= 2) call abort end subroutine end program Thus, there is something about the "arrayness" of x in the original testcase that matters. Off-by-one maybe?