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)

Reply via email to