------- Comment #4 from dominiq at lps dot ens dot fr 2010-03-30 19:55 -------
Further reduced test that does not give an ICE, but several errors:
[macbook] f90/bug% cat pr43591_red_1.f90
module ward_lib
implicit none
type omega_procedures
procedure(number_particles_out), nopass, pointer :: number_particles_out
=> NULL()
end type omega_procedures
contains
subroutine quantum_numbers2 ()
! type(omega_procedures), intent(in) :: physical
integer, dimension(physical%number_particles_out()) &
:: table_flavor_states
end subroutine quantum_numbers2
end module ward_lib
[macbook] f90/bug% gfc pr43591_red_1.f90
pr43591_red_1.f90:14.31:
integer, dimension(physical%number_particles_out()) &
1
Error: Expected another dimension in array declaration at (1)
pr43591_red_1.f90:7.35:
procedure(number_particles_out), nopass, pointer :: number_particles_out =
1
Error: Symbol 'number_particles_out' at (1) has no IMPLICIT type
pr43591_red_1.f90:7.77:
procedure(number_particles_out), nopass, pointer :: number_particles_out =>
1
Error: Interface 'number_particles_out' of procedure pointer component
'number_particles_out' at (1) must be explicit
If uncomment the commented line I get an ICE:
#0 fancy_abort (file=0x100974ce0 "../../p_work/gcc/fortran/expr.c", line=3604,
function=0x1009f4d80 "gfc_traverse_expr") at ../../p_work/gcc/diagnostic.c:762
#1 0x000000010002b86f in gfc_traverse_expr (expr=0x141815840, sym=0x0,
func=0x100026480 <expr_check_typed_help>, f=0) at
../../p_work/gcc/fortran/expr.c:3604
#2 0x000000010002c5e7 in gfc_expr_check_typed (e=0x141815840, ns=0x142078600,
strict=<value temporarily unavailable, due to optimizations>) at
../../p_work/gcc/fortran/expr.c:3767
#3 0x00000001000069f5 in gfc_match_array_spec (asp=0x100c8f140) at
../../p_work/gcc/fortran/array.c:310
#4 0x0000000100018bcf in match_attr_spec () at
../../p_work/gcc/fortran/decl.c:3044
#5 0x000000010001d137 in gfc_match_data_decl () at
../../p_work/gcc/fortran/decl.c:3730
#6 0x0000000100062f22 in match_word (str=<value temporarily unavailable, due
to optimizations>, subr=0x10001d0d0 <gfc_match_data_decl>,
old_locus=0x7fff5fbfd380) at ../../p_work/gcc/fortran/parse.c:65
#7 0x00000001000637ad in decode_statement () at
../../p_work/gcc/fortran/parse.c:283
#8 0x0000000100064dd5 in next_statement () at
../../p_work/gcc/fortran/parse.c:715
#9 0x000000010006613c in parse_spec (st=<value temporarily unavailable, due to
optimizations>) at ../../p_work/gcc/fortran/parse.c:2549
#10 0x000000010006838d in parse_progunit (st=ST_ARITHMETIC_IF) at
../../p_work/gcc/fortran/parse.c:3758
#11 0x0000000100068708 in parse_contained (module=1) at
../../p_work/gcc/fortran/parse.c:3698
#12 0x0000000100069c8a in gfc_parse_file () at
../../p_work/gcc/fortran/parse.c:3953
#13 0x00000001000a291c in gfc_be_parse_file (set_yydebug=<value temporarily
unavailable, due to optimizations>) at ../../p_work/gcc/fortran/f95-lang.c:239
#14 0x00000001006d6b5a in toplev_main (argc=2, argv=0x7fff5fbfd9e8) at
../../p_work/gcc/toplev.c:1053
#15 0x00000001000019e4 in start ()
Although gfortran should not give an ICE, I have doubts about the validity of
the code.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43591