https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126872
Bug ID: 126872
Summary: Change in visibility of C bound functions with 16.2.0
Product: gcc
Version: 16.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: rpmcnally at gmail dot com
Target Milestone: ---
It appears to me that the 'private' keyword is now affecting C bound functions
in Fortran modules, though I believe that bind(C) is supposed to automatically
provide for external linkage. I'm not sure if this is a bug or an intended
change.
module moduleA
implicit none
private
contains
subroutine doThing() bind(C, name="doThing")
end subroutine doThing
end module moduleA
$ gfortran --version
GNU Fortran (GCC) 16.2.0
$ gfortran -fPIC -shared -o libmoduleA.so moduleA.f90
$ nm libmoduleA.so | grep -i dothing
0000000000000559 t doThing
Under gfortran versions 9.3, 12.2, 15.3, and 16.1 all produce a library with
external visibility instead of static. It does appear the visibility can be
toggled by explicitly listing the C bound function as 'public'.