On Wed, Jul 23, 2025 at 05:53:17PM +0100, Paul Richard Thomas wrote:
> 
> The attached implements the F2018 generic statement, which has the same
> semantics as the typebound version but can appear in any specification
> statement.
> 
> As it says in the first comment in the patch, use is made of the existing,
> typebound matching functions to obtain access-spec and generic-spec.  After
> this the standard INTERFACE machinery is used.
> 
> I spent a stupidly long time allowing the mixing of generic statements with
> generic interfaces until I realised that I was accepting ST_GENERIC in the
> wrong place in parse_spec :-(
> 
> Regtests on x86_64/FC42 - OK for mainline?
> 

Hi Paul,

I think the code following my .sig should compile and execute

% gfcx -o z a.F90 && ./z
   42.0000000    
   43.5000000    
% gfcx -o z -DGEN a.F90 
a.F90:9:21:

    9 |    generic :: bar => bar, bah
      |                     1
Error: There's already a non-generic procedure with binding
name 'bar' at (1)

The 'interface bar ... end interface bar' is an idiom
that I use throughout my math library.

-- 
steve

module foo

   implicit none

   private
   public bar

#ifdef GEN
   generic :: bar => bar, bah
#else
   !
   ! Should be equivalent to above.
   !
   interface bar
      module procedure bar
      module procedure bah
   end interface bar
#endif

   contains
      function bar(i)
         real bar
         integer, intent(in) :: i
         bar = i
      end function bar
      function bah(x)
         real bah
         real, intent(in) :: x
         bah = x
      end function bah
end module foo

program snooze
   use foo
   print *, bar(42)
   print *, bar(43.5)
end program snooze


Reply via email to