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"

Reply via email to