! { dg-do run }
!
! Test the fix for PR90498.
!
! Contributed by Vladimir Fuka  <vladimir.fuka@gmail.com>
!
  type field_names_a
    class(*), pointer :: var(:) =>null()
  end type

  type(field_names_a),pointer :: a(:)
  allocate (a(2))

  allocate (a(1)%var(2), source = ["hello"," vlad"])
  allocate (a(2)%var(2), source = ["HELLO"," VLAD"])
  call s(a)
  deallocate (a(1)%var)
  deallocate (a(2)%var)
  deallocate (a)
contains
  subroutine s(a)

    type(field_names_a) :: a(:)

    select type (var => a(1)%var)
      type is (character(*))
        if (any (var .ne. ["hello"," vlad"])) stop 1
      class default
        stop
    end select

    associate (var => a(2)%var)
      select type (var)
        type is (character(*))
          if (any (var .ne. ["HELLO"," VLAD"])) stop 2
        class default
          stop
      end select
    end associate
  end
end
