With your updated patch addressing Steve's comments OK.
We have time for minor tweaks if necessary.
On 8/3/25 11:06 AM, Steve Kargl wrote:
On Sun, Aug 03, 2025 at 12:20:24PM +0100, Paul Richard Thomas wrote:
First, the easy one:
+ /* Match the binding name; depending on type (operator / generic) format
+ it for future error messages into bind_name. */
This comment looks muddled.
+ if (op_type == INTERFACE_GENERIC && !generic_spec->attr.generic)
+ {
+ gfc_error ("There's already a non-generic procedure with "
+ "binding name %qs at %C", generic_spec->name);
+ goto error;
The contraction should probably be expanded to make
translation to other languages easier. I also find
the error message to be unclear for
module foo
implicit none
private
! F2023:C815 An entity shall not be explicitly given any
! attribute more than once in a scoping unit.
public bar
generic, public :: bar => bah, bak
contains
integer function bah(i)
integer, intent(in) :: i
bah = i
end function bah
real function bak(x)
real, intent(in) :: x
bak = x
end function bak
end module foo
% gfcx -c -fmax-errors=1 generic_stmt_3.F90
generic_stmt_3.F90:7:32:
7 | generic, public :: bar => bah, bak
| 1
Error: There's already a non-generic procedure with binding name 'bar' at (1)
If you invert the statements to
generic, public :: bar => bah, bak
public bar
% gfcx -c -fmax-errors=1 generic_stmt_3.F90
generic_stmt_3.F90:7:16:
7 | public bar
| 1
Error: ACCESS specification at (1) was already specified
The error is quite clear. This also generates an error
public bar
generic :: bar => bah, bak
while
generic :: bar => bah, bak
public bar
compiles without error.