Hi all,
By the way, with
$ gfortran --version
GNU Fortran (GCC) 16.0.0 20251216 (experimental)
Copyright (C) 2025 Free Software Foundation, Inc.
$ cat /proc/version
Linux version 6.19.6-200.fc43.x86_64
(mockbuild@41821fa48c8f47b3bd467b54da433509) (gcc (GCC) 15.2.1
20260123 (Red Hat 15.2.1-7), GNU ld version 2.45.1-4.fc43) #1 SMP
PREEMPT_DYNAMIC Thu Mar 5 00:10:35 UTC 2026
$ gfortran --version
GNU Fortran (GCC) 16.0.0 20251216 (experimental)
Copyright (C) 2025 Free Software Foundation, Inc.
$ gfortran -c salvatore.f90
salvatore.f90:30:13:
30 | procedure, pass (a) :: csgrw => psb_d_mf_csgrw
| 1
Error: Argument mismatch for the overriding procedure ‘csgrw’ at (1):
Shape mismatch in argument 'iren'
Regards,
Jorge.
--
Arjen Markus <[email protected]> escribió:
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
==========================================