http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45848
Summary: [OOP] ICE on invalid code in fortran/symbol.c:2410 Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: anl...@gmx.de Host: i686-pc-linux-gnu Hi, the following (invalid) code leads to an ICE: ! Compile with: gfortran -fwhole-file -c gfcbug111.f90 ! The "comment line" below appears to have an effect!? module gfcbug111 !! use abstract_vector implicit none type, abstract :: inner_product_class end type inner_product_class type, extends(inner_product_class) :: trivial_inner_product_type end type trivial_inner_product_type contains function my_dot_v_v (this,a,b) class(trivial_inner_product_type), intent(in) :: this class(vector_class), intent(in) :: a,b real :: my_dot_v_v select type (a) class is (trivial_vector_type) select type (b) class is (trivial_vector_type) class default end select class default end select end function my_dot_v_v end module gfcbug111 I get: gfcbug111.f90:18.23: class(vector_class), intent(in) :: a,b 1 Error: Derived type 'vector_class' at (1) is being used before it is defined gfcbug111.f90:22.33: class is (trivial_vector_type) 1 Error: 'trivial_vector_type' at (1) is not an accessible derived type gfcbug111.f90:23.22: select type (b) 1 Error: Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at (1) f951: internal compiler error: Segmentation fault > gdb /opt/gcc/trunk/libexec/gcc/i686-pc-linux-gnu/4.6.0/f951 GNU gdb (GDB; openSUSE 11.1) 6.8.50.20081120-cvs Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i586-suse-linux". For bug reporting instructions, please see: <http://bugs.opensuse.org/>... (gdb) run gfcbug111.f90 -quiet -dumpbase gfcbug111.f90 -mtune=generic -march=pentiumpro -auxbase gfcbug111 -version -fwhole-file -fintrinsic-modules-path /opt/gcc/trunk/lib/gcc/i686-pc-linux-gnu/4.6.0/finclude -o /tmp/ccnYRIzm.s Starting program: /opt/gcc/trunk/libexec/gcc/i686-pc-linux-gnu/4.6.0/f951 gfcbug111.f90 -quiet -dumpbase gfcbug111.f90 -mtune=generic -march=pentiumpro -auxbase gfcbug111 -version -fwhole-file -fintrinsic-modules-path /opt/gcc/trunk/lib/gcc/i686-pc-linux-gnu/4.6.0/finclude -o /tmp/ccnYRIzm.s GNU Fortran (GCC) version 4.6.0 20100929 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 4.6.0 20100929 (experimental), GMP version 4.2.3, MPFR version 2.3.2, MPC version 0.8.2 GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 GNU Fortran (GCC) version 4.6.0 20100929 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 4.6.0 20100929 (experimental), GMP version 4.2.3, MPFR version 2.3.2, MPC version 0.8.2 GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 gfcbug111.f90:18.23: class(vector_class), intent(in) :: a,b 1 Error: Derived type 'vector_class' at (1) is being used before it is defined gfcbug111.f90:22.33: class is (trivial_vector_type) 1 Error: 'trivial_vector_type' at (1) is not an accessible derived type gfcbug111.f90:23.22: select type (b) 1 Error: Expected TYPE IS, CLASS IS or END SELECT statement following SELECT TYPE at (1) Program received signal SIGSEGV, Segmentation fault. gfc_find_symtree (st=0x7e1, name=0xbfffe120 "class") at ../../trunk/gcc/fortran/symbol.c:2410 2410 c = strcmp (name, st->name); (gdb) where #0 gfc_find_symtree (st=0x7e1, name=0xbfffe120 "class") at ../../trunk/gcc/fortran/symbol.c:2410 #1 0x08160f8e in gfc_find_sym_tree (name=0xbfffe120 "class", ns=0x8cd9048, parent_flag=0, result=0xbfffe0ec) at ../../trunk/gcc/fortran/symbol.c:2631 #2 0x0816125c in gfc_get_ha_sym_tree (name=0xbfffe120 "class", result=0xbfffe198) at ../../trunk/gcc/fortran/symbol.c:2800 #3 0x0811cdc4 in gfc_match_sym_tree (matched_symbol=0xbfffe198, host_assoc=1) at ../../trunk/gcc/fortran/match.c:678 #4 0xbfffe120 in ?? () (gdb) > /opt/gcc/trunk/bin/gfortran -vUsing built-in specs. COLLECT_GCC=/opt/gcc/trunk/bin/gfortran COLLECT_LTO_WRAPPER=/opt/gcc/trunk/libexec/gcc/i686-pc-linux-gnu/4.6.0/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../trunk/configure --enable-languages=c,fortran --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk : (reconfigured) ../trunk/configure --enable-languages=c,fortran --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk : (reconfigured) ../trunk/configure --enable-languages=c,fortran --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk : (reconfigured) ../trunk/configure --enable-languages=c,fortran --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk : (reconfigured) ../trunk/configure --enable-languages=c,fortran --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion : (reconfigured) ../trunk/configure --with-libelf=/usr/local --with-system-zlib --prefix=/opt/gcc/trunk --enable-languages=c,fortran,lto --no-create --no-recursion Thread model: posix gcc version 4.6.0 20100929 (experimental) (GCC) It is funny that if I remove the comment line !! use ... I get a compiler that appears to compile endlessly... Cheers, -ha