http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48858

--- Comment #6 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-05-22 
14:17:45 UTC ---
The OPTIONAL problem is solved by allowing OPTIONAL with -std=gnu (default) and
-std=f2008tr.

Regarding the original problem: I think I have convince myself that having two
procedures with the same binding label (and a different) interface is valid
according to the standard.

One probably could check that the number of arguments is the same and warn
otherwise. (For variadic arguments, the number of arguments can vary, but
calling a variadic function from Fortran has some potential issues and is also
invalid. Passing too many arguments should work, but is with stdcall
problematic.)

The general diagnostic might be better hidden behind some -W arning flag.

* * *

For a similar report and patch, cf
http://gcc.gnu.org/ml/fortran/2011-05/msg00154.html

Regarding that patch: I think it disables the error if one item is a procedure
and one is a variable/derived type. (I have not checked, though.)

* * *

The current check is in any case too tight. The following is perfectly valid:
(Same interface, same binding label, but different procedure name.)

interface
  subroutine foo() bind(C, name="foo")
   end subroutine foo
end interface
end

subroutine test
interface
  subroutine bar() bind(C, name="foo")
   end subroutine bar
end interface
end subroutine test

Reply via email to