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