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

            Bug ID: 110826
           Summary: Fortran array of derived type with a pointer to
                    function with dimensional arguments
           Product: gcc
           Version: 13.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mysecmailboks at gmail dot com
  Target Milestone: ---

The following program fails at `func_array(1)%f => zero_state`:
```
program test_func_array
   implicit none

   type pp
     procedure(func_template), pointer, nopass :: f =>null()
   end type pp

   abstract interface
      function func_template(state) result(dstate)
        implicit none
        real, dimension(:,:), intent(in)                    :: state
        real, dimension(size(state,1), size(state,2)) :: dstate
      end function
   end interface

   type(pp) :: func_array(4)
   real, dimension(4,6) :: state

   func_array(1)%f => zero_state

   print*,func_array(1)%f(state)
contains

  function zero_state(state) result(dstate)
    implicit none
    real, dimension(:,:), intent(in)                    :: state
    real, dimension(size(state,1), size(state,2)) :: dstate

    dstate = 0.

  end function zero_state
end program test_func_array
```
I have tested with various `gfortran` compilers at https://godbolt.org/. The
error is roughly the same. Along the lines of:
```
f951: internal compiler error: spec_dimen_size(): Bad dimension
0x75ee87 gfc_internal_error(char const*, ...)
        ???:0
0x72a016 spec_dimen_size(gfc_array_spec*, int, __mpz_struct (*) [1])
        ???:0
0x7d4bcb gfc_expression_rank(gfc_expr*)
        ???:0
0x7de37b gfc_resolve_code(gfc_code*, gfc_namespace*)
        ???:0
0x7c7500 gfc_parse_file()
        ???:0
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
ASM generation compiler returned: 1
f951: internal compiler error: spec_dimen_size(): Bad dimension
0x75ee87 gfc_internal_error(char const*, ...)
        ???:0
0x72a016 spec_dimen_size(gfc_array_spec*, int, __mpz_struct (*) [1])
        ???:0
0x7d4bcb gfc_expression_rank(gfc_expr*)
        ???:0
0x7de37b gfc_resolve_code(gfc_code*, gfc_namespace*)
        ???:0
0x7c7500 gfc_parse_file()
        ???:0
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Execution build compiler returned: 1
```

The same error is given even if the dimensional arguments are explicitly
defined (as opposed to using `size`).

The program works if func_array is a scalar:
```
   type(pp) :: func_array
   real, dimension(4,6) :: state

   func_array%f => zero_state

   print*,func_array%f(state)
```

Reply via email to