https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121185
--- Comment #23 from anlauf at gcc dot gnu.org --- Shorter reproducer for (at least one of) the close-to-minimal one: program p implicit none type t complex, allocatable :: x(:) end type t type, extends (t) :: t2 end type t2 real :: trace = 2. type(t2) :: z z% x = [1,2] * trace print *, z% x z% x = z% x / trace ! OK print *, z% x print * z% x = [1,2] * trace call norm (z) contains subroutine norm (y) class(t2) :: y print *, y% x y% x = y% x / trace ! not OK print *, y% x end subroutine norm end This gives here with v16: (2.00000000,0.00000000) (4.00000000,0.00000000) (1.00000000,0.00000000) (2.00000000,0.00000000) (2.00000000,0.00000000) (4.00000000,0.00000000) (1.00000000,0.00000000) (4.00000000,0.00000000) where v15 gives the expected: (2.00000000,0.00000000) (4.00000000,0.00000000) (1.00000000,0.00000000) (2.00000000,0.00000000) (2.00000000,0.00000000) (4.00000000,0.00000000) (1.00000000,0.00000000) (2.00000000,0.00000000)