https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94471
Bug ID: 94471 Summary: Calling a function pointer member of a polymorphic derived type returning a pointer produces an ICE (internal compiler error). Product: gcc Version: 9.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: lockywolf at gmail dot com Target Milestone: --- This is the code: program main type, abstract :: scheme_object end type scheme_object type, extends(scheme_object) :: scheme_primitive_procedure procedure(packageable_procedure), pointer, nopass :: proc_pointer end type scheme_primitive_procedure class(scheme_object), pointer :: exp abstract interface function packageable_procedure( argl, env ) result( retval ) import :: scheme_object class(scheme_object), pointer :: retval class(scheme_object), pointer :: argl class(scheme_object), pointer :: env end function packageable_procedure end interface contains function low_level_read( arg ) result( retval ) class(scheme_object), pointer :: retval class(scheme_object), pointer :: arg end function low_level_read subroutine main_loop() procedure(packageable_procedure), pointer :: proc class(scheme_object), pointer :: retval exp => low_level_read( exp ) call ll_setup_global_environment() select type( proc_holder => low_level_read(exp) ) type is (scheme_primitive_procedure) proc => proc_holder%proc_pointer retval => proc( exp, exp ) class default error stop "primitive procedure not a procedure" end select end subroutine main_loop end program produces: gfortran --save-temps -v -Wall -Wextra 2020-04-03-weird-gfortran-bug-2.f90 Driving: gfortran --save-temps -v -Wall -Wextra 2020-04-03-weird-gfortran-bug-2.f90 -l gfortran -l m -shared-libgcc Reading specs from /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/specs COLLECT_GCC=gfortran COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-slackware-linux/9.3.0/lto-wrapper Target: x86_64-slackware-linux Configured with: ../gcc-9.3.0/configure --prefix=/usr --libdir=/usr/lib64 --mandir=/usr/man --infodir=/usr/info --enable-shared --enable-bootstrap --enable-languages=ada,brig,c,c++,d,fortran,go,lto,objc,obj-c++ --enable-threads=posix --enable-checking=release --enable-objc-gc --with-system-zlib --enable-libstdcxx-dual-abi --with-default-libstdcxx-abi=new --disable-libstdcxx-pch --disable-libunwind-exceptions --enable-__cxa_atexit --disable-libssp --enable-gnu-unique-object --enable-plugin --enable-lto --disable-install-libiberty --enable-gnu-indirect-function --with-linker-hash-style=gnu --with-gnu-ld --with-isl --verbose --with-arch-directory=amd64 --disable-gtktest --disable-werror --enable-clocale=gnu --enable-multilib --target=x86_64-slackware-linux --build=x86_64-slackware-linux --host=x86_64-slackware-linux Thread model: posix gcc version 9.3.0 (GCC) COLLECT_GCC_OPTIONS='-save-temps' '-v' '-Wall' '-Wextra' '-shared-libgcc' '-mtune=generic' '-march=x86-64' /usr/libexec/gcc/x86_64-slackware-linux/9.3.0/f951 2020-04-03-weird-gfortran-bug-2.f90 -quiet -dumpbase 2020-04-03-weird-gfortran-bug-2.f90 -mtune=generic -march=x86-64 -auxbase 2020-04-03-weird-gfortran-bug-2 -Wall -Wextra -version -fintrinsic-modules-path /usr/lib64/gcc/x86_64-slackware-linux/9.3.0/finclude -fpre-include=/usr/include/finclude/math-vector-fortran.h -o 2020-04-03-weird-gfortran-bug-2.s GNU Fortran (GCC) version 9.3.0 (x86_64-slackware-linux) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU Fortran2008 (GCC) version 9.3.0 (x86_64-slackware-linux) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 2020-04-03-weird-gfortran-bug-2.f90:37:0: 37 | proc => proc_holder%proc_pointer | internal compiler error: in gfc_conv_component_ref, at fortran/trans-expr.c:2445 Please submit a full bug report, with preprocessed source if appropriate. See <https://gcc.gnu.org/bugs/> for instructions. The .i file has not been generated. The .s file only contains a single line: .file "2020-04-03-weird-gfortran-bug-2.f90"