https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104128
--- Comment #5 from anlauf at gcc dot gnu.org --- The issue in comment#3 is likely unrelated to TRANSFER: program p implicit none ! integer, parameter :: k = 1 integer, parameter :: k = 4 character(kind=k,len=2), parameter :: z = k_"FG" character(kind=1,len=*), parameter :: x = transfer (z, 'abcdefgh') character(kind=k,len=2) :: u = transfer (x, z) ! always OK character(kind=k,len=2), parameter :: v = transfer (x, z) ! OK (kind=1) logical, parameter :: l = (z == v) print *, "z == v:", l print *, z print *, u if (u /= z) stop 4 print *, v if (v /= z) stop 3 ! stops here for kind=4 end This works for k=1 (z==v), but fails for k=4 (z/=v, but should be same). (NAG confirms my expectations.)