https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102862

            Bug ID: 102862
           Summary: CLASS(*) – various issues, esp. with assumed-rank
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Keywords: diagnostic, rejects-valid
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
  Target Milestone: ---

The following program runs into various issues with CLASS handling in general
and CLASS(*) handling in particular. It compiles when using 'integer' but with
'class(*)' it fails with:


assumed-rank-class.f90:19:13:

   19 |       rank(*)
      |             1
Error: Array pointer ‘__tmp_class___class__STAR_15_0t_rank_m1’ at (1) must have
a deferred shape or assumed rank
assumed-rank-class.f90:22:17:

   22 |          if (any(x(1:10) /= [(i, i=1,10)])) error stop
      |                 1
Error: Operands of comparison operator ‘/=’ at (1) are CLASS(*)/INTEGER(4)
assumed-rank-class.f90:5:14:

    5 |   call caller(A)
      |              1
Error: Rank mismatch in argument ‘y’ at (1) (rank-3 and rank-1)


all of which are bogus.



implicit none
  integer :: i
  integer :: A(10)
  A = [(i, i = 1, 10)]
  call caller(A)
contains
  subroutine caller(y)
    class(*) :: y(5,-3:6,*)
    !integer :: y(5,-3:6,*)
    call foo(y)
  end
  subroutine foo(x)
    class(*) :: x(..) 
    !integer :: x(..) 
    integer :: i
    print *, rank(x)
    print *, shape(x)
    select rank(x)
      rank(*)
         print *,rank(x)
         ! OK - assumed size actual
         if (any(x(1:10) /= [(i, i=1,10)])) error stop
      rank default
         error stop 1
    end select
  end subroutine
end

Reply via email to