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
> ==========================================
>

Reply via email to