https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88632
Bug ID: 88632 Summary: [F08] function contained in module invisible to submodule unless declared public Product: gcc Version: 8.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: joerg.stil...@tu-dresden.de Target Milestone: --- A function is declared in the contains-part of a module to provide a common functionality to different submodules. To make this function invisible to exterior program units using this module, the function is kept private. Nonetheless it should be visible to the submodules. However, with `gfortran` the function remains invisible to the submodule(s), which becomes apparent in the form of an `ld` error. This behavior can be fixed by declaring the the function public. To my understanding this is an error: The function should be visible to submodules even when private. Required information 1) Version of GCC $ gfortran --version GNU Fortran (MacPorts gcc8 8.2.0_3) 8.2.0 2) System type Apple LLVM version 10.0.0 (clang-1000.11.45.5) Target: x86_64-apple-darwin18.2.0 Thread model: posix 3) Options given when GCC was configured/built --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1 4) Complete command line that triggers the bug gfortran -o main parent.f90 decendent.f90 main.f90 5) Output of `gfortran -v -save-temps -o main parent.f90 decendent.f90 main.f90` Driving: gfortran-mp-8 -v -save-temps -o main parent.f90 decendent.f90 main.f90 -mmacosx-version-min=10.14.0 -asm_macosx_version_min=10.14 -l gfortran -shared-libgcc Using built-in specs. COLLECT_GCC=gfortran-mp-8 COLLECT_LTO_WRAPPER=/opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/lto-wrapper Target: x86_64-apple-darwin18 Configured with: /opt/local/var/macports/build/_opt_bblocal_var_buildworker_ports_build_ports_lang_gcc8/gcc8/work/gcc-8.2.0/configure --prefix=/opt/local --build=x86_64-apple-darwin18 --enable-languages=c,c++,objc,obj-c++,lto,fortran --libdir=/opt/local/lib/gcc8 --includedir=/opt/local/include/gcc8 --infodir=/opt/local/share/info --mandir=/opt/local/share/man --datarootdir=/opt/local/share/gcc-8 --with-local-prefix=/opt/local --with-system-zlib --disable-nls --program-suffix=-mp-8 --with-gxx-include-dir=/opt/local/include/gcc8/c++/ --with-gmp=/opt/local --with-mpfr=/opt/local --with-mpc=/opt/local --with-isl=/opt/local --enable-stage1-checking --disable-multilib --enable-lto --enable-libstdcxx-time --with-build-config=bootstrap-debug --with-as=/opt/local/bin/as --with-ld=/opt/local/bin/ld --with-ar=/opt/local/bin/ar --with-bugurl=https://trac.macports.org/newticket --disable-tls --with-pkgversion='MacPorts gcc8 8.2.0_3' --with-sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk Thread model: posix gcc version 8.2.0 (MacPorts gcc8 8.2.0_3) COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-asm_macosx_version_min=10.14' '-shared-libgcc' '-mtune=core2' /opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/f951 parent.f90 -fPIC -quiet -dumpbase parent.f90 -mmacosx-version-min=10.14.0 -mtune=core2 -auxbase parent -version -fintrinsic-modules-path /opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/finclude -o parent.s GNU Fortran (MacPorts gcc8 8.2.0_3) version 8.2.0 (x86_64-apple-darwin18) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU Fortran2008 (MacPorts gcc8 8.2.0_3) version 8.2.0 (x86_64-apple-darwin18) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' /opt/local/bin/as -v -arch x86_64 -force_cpusubtype_ALL -o parent.o parent.s Apple Inc version cctools-921, GNU assembler version 1.38 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' /opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/f951 decendent.f90 -fPIC -quiet -dumpbase decendent.f90 -mmacosx-version-min=10.14.0 -mtune=core2 -auxbase decendent -version -fintrinsic-modules-path /opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/finclude -o decendent.s GNU Fortran (MacPorts gcc8 8.2.0_3) version 8.2.0 (x86_64-apple-darwin18) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU Fortran2008 (MacPorts gcc8 8.2.0_3) version 8.2.0 (x86_64-apple-darwin18) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' /opt/local/bin/as -v -arch x86_64 -force_cpusubtype_ALL -o decendent.o decendent.s Apple Inc version cctools-921, GNU assembler version 1.38 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' /opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/f951 main.f90 -fPIC -quiet -dumpbase main.f90 -mmacosx-version-min=10.14.0 -mtune=core2 -auxbase main -version -fintrinsic-modules-path /opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/finclude -o main.s GNU Fortran (MacPorts gcc8 8.2.0_3) version 8.2.0 (x86_64-apple-darwin18) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU Fortran2008 (MacPorts gcc8 8.2.0_3) version 8.2.0 (x86_64-apple-darwin18) compiled by GNU C version 8.2.0, GMP version 6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' /opt/local/bin/as -v -arch x86_64 -force_cpusubtype_ALL -o main.o main.s Apple Inc version cctools-921, GNU assembler version 1.38 Reading specs from /opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/../../../libgfortran.spec rename spec lib to liborig COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' COMPILER_PATH=/opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/:/opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/:/opt/local/libexec/gcc/x86_64-apple-darwin18/:/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/:/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/ LIBRARY_PATH=/opt/intel/compilers_and_libraries_2019.1.144/mac/tbb/lib/:/opt/intel/compilers_and_libraries_2019.1.144/mac/compiler/lib/:/opt/intel/compilers_and_libraries_2019.1.144/mac/mkl/lib/:/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/:/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/../../../ COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'main' '-mmacosx-version-min=10.14.0' '-shared-libgcc' '-mtune=core2' /opt/local/libexec/gcc/x86_64-apple-darwin18/8.2.0/collect2 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/ -dynamic -arch x86_64 -macosx_version_min 10.14.0 -weak_reference_mismatches non-weak -o main -L/opt/intel/compilers_and_libraries_2019.1.144/mac/tbb/lib -L/opt/intel/compilers_and_libraries_2019.1.144/mac/compiler/lib -L/opt/intel/compilers_and_libraries_2019.1.144/mac/mkl/lib -L/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0 -L/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/../../.. parent.o decendent.o main.o -lgfortran -no_compact_unwind -lSystem -lgcc_ext.10.5 -lgcc -lquadmath -lm -lgcc_ext.10.5 -lgcc -lSystem -v collect2 version 8.2.0 /opt/local/bin/ld -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/ -dynamic -arch x86_64 -macosx_version_min 10.14.0 -weak_reference_mismatches non-weak -o main -L/opt/intel/compilers_and_libraries_2019.1.144/mac/tbb/lib -L/opt/intel/compilers_and_libraries_2019.1.144/mac/compiler/lib -L/opt/intel/compilers_and_libraries_2019.1.144/mac/mkl/lib -L/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0 -L/opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0/../../.. parent.o decendent.o main.o -lgfortran -no_compact_unwind -lSystem -lgcc_ext.10.5 -lgcc -lquadmath -lm -lgcc_ext.10.5 -lgcc -lSystem -v @(#)PROGRAM:ld PROJECT:ld64-409.12 BUILD 17:47:51 Sep 25 2018 configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em arm64e arm64_32 Library search paths: /opt/intel/compilers_and_libraries_2019.1.144/mac/tbb/lib /opt/intel/compilers_and_libraries_2019.1.144/mac/compiler/lib /opt/intel/compilers_and_libraries_2019.1.144/mac/mkl/lib /opt/local/lib/gcc8/gcc/x86_64-apple-darwin18/8.2.0 /opt/local/lib/gcc8 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/lib Framework search paths: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/ Undefined symbols for architecture x86_64: "___parent_MOD_my_number", referenced from: ___parent_MOD_my_method in decendent.o ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status 5) Source files 5.1) parent.f90 --------------------------------------------------------------------- module parent private public :: my_type type my_type contains procedure :: my_method end type my_type interface module subroutine my_method(this) class(my_type), intent(in) :: this end subroutine my_method end interface contains ! common helper function to be used in differt submodules integer function my_number() my_number = 1 end function my_number end module parent --------------------------------------------------------------------- 5.2) decendent.f90 --------------------------------------------------------------------- submodule(parent) decendent contains module subroutine my_method(this) class(my_type), intent(in) :: this print *, my_number() end subroutine my_method end submodule decendent --------------------------------------------------------------------- 5.3) main.f90 --------------------------------------------------------------------- program main use parent type(my_type) :: my call my % my_method() end program main ---------------------------------------------------------------------