FWIW, the ifx compiler accepts the code, even when asking for all possible warnings (-warn:all).
Op wo 18 mrt 2026 om 11:06 schreef Salvatore Filippone < [email protected]>: > 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 > ========================================== >
