Hi there,
while experimenting with some code variations, I encountered a rather
strange error message
There are multiple ways to get rid of the message, such as altering the
IMPORT statement at line 33, change some names by taking out prefixes, or
changes "d_" into "r_".
flang compiles without complaints.
============ sh ==========
[sfilippo@euler BUG]$ flang --version
flang version 21.1.8 (Fedora 21.1.8-4.fc43)
Target: x86_64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
[sfilippo@euler BUG]$ flang -c d_mf_m.f90
[sfilippo@euler BUG]$ gfortran --version
GNU Fortran (GCC) 15.2.1 20260123 (Red Hat 15.2.1-7)
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[sfilippo@euler BUG]$ gfortran -c d_mf_m.f90
d_mf_m.f90:27:13:

   27 |     procedure, pass(a) :: csgrw     => psb_d_mf_csgrw
      |             1
Error: Argument mismatch for the overriding procedure ‘csgrw’ at (1): Shape
mismatch in argument 'iren'
[sfilippo@euler BUG]$

Is this user error, bug or what?
Thanks
Salvatore

===================d_mf_m.f90===========
module psb_base_spm_mod
  type  :: psb_base_spm
  end type psb_base_spm
end module psb_base_spm_mod

module psb_r_base_spm_mod
  use psb_base_spm_mod
  type, extends(psb_base_spm) :: psb_r_base_spm
  contains
    procedure, pass(a) :: csgrw      => psb_r_base_csgrw
  end type psb_r_base_spm

  interface
    subroutine psb_r_base_csgrw(a,iren)
      import
      class(psb_r_base_spm), intent(in) :: a
      integer, intent(in), optional        :: iren(:)
    end subroutine psb_r_base_csgrw
  end interface
end module psb_r_base_spm_mod

module psb_d_mf_mat_mod
  use psb_r_base_spm_mod
  type, extends(psb_r_base_spm) :: psb_d_mf_spm
    procedure(d_mf_mv), pass(a), pointer :: var_csmv => null()
  contains
    procedure, pass(a) :: csgrw     => psb_d_mf_csgrw
    procedure, pass(a) :: set_csmv     => d_mf_set_csmv
  end type psb_d_mf_spm

  interface
    subroutine d_mf_mv(a,x,info)
      import :: psb_d_mf_spm
      class(psb_d_mf_spm), intent(in) :: a
      real, intent(in)       :: x(:)
      integer, intent(out)    :: info
    end subroutine d_mf_mv
  end interface

  interface
    subroutine psb_d_mf_csgrw(a,iren)
      import
      class(psb_d_mf_spm), intent(in) :: a
      integer, intent(in), optional :: iren(:)
    end subroutine psb_d_mf_csgrw
  end interface

contains
  subroutine  d_mf_set_csmv(func,a)
    implicit none
    class(psb_d_mf_spm), intent(inout) :: a
    procedure(d_mf_mv) :: func
    a%var_csmv => func
    return
  end subroutine d_mf_set_csmv
end module psb_d_mf_mat_mod
==========================================

Reply via email to