http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51605
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kargl at gcc dot gnu.org --- Comment #3 from kargl at gcc dot gnu.org 2011-12-18 07:07:22 UTC --- laptop:kargl[499] gfc4x --version GNU Fortran (GCC) 4.7.0 20111124 (experimental) laptop:kargl[500] gfc4x -o z coco.f90 coco.f90: In function 'process_coco_statement': coco.f90:89:0: internal compiler error: in gfc_trans_block_construct, at fortran/trans-stmt.c:1193 Reduced testcase. program coco use, intrinsic :: iso_fortran_env, only: input_unit, output_unit implicit none character( len= *), parameter :: string_fmt = '( a)' character( len= *), parameter :: integer_fmt = '( a, i10)' character( len= *), parameter :: directory_fmt = '( a, i0, a)' character( len= *), parameter :: conversion_fmt = '(i10)' character( len= *), parameter :: null_string = '' character( len= *), parameter :: mark_set_file = 'following SET file' character( len= *), parameter :: alpha_chars = 'abcdefghijklmnopqrstuvwxyz' character( len= *), parameter :: digit_chars = '0123456789' character( len= *), parameter :: underscore = '_' character( len= *), parameter :: alphanum_chars = alpha_chars // digit_chars // underscore character( len= *), parameter :: dot = '.' character( len= *), parameter :: equals = '=' integer, parameter :: format_len = max(3, 12) integer, parameter :: io_specifier_len = 16 integer, parameter :: conversion_len = 10 integer, parameter :: symbol_name_len = 31 integer, parameter :: free_form_len = 131 integer, parameter :: fixed_form_len = 72 integer, parameter :: source_line_len = 12 integer, parameter :: file_name_len = 256 integer, parameter :: max_continuations = 39 type, abstract :: symbol_t logical referenced class(symbol_t), pointer :: next end type symbol_t type, extends(symbol_t) :: logical_t logical logical_value type(logical_t), pointer :: next_logical end type logical_t type, extends(symbol_t) :: integer_t integer integer_value type(integer_t), pointer :: next_integer end type integer_t class( symbol_t), pointer :: first_symbol class( symbol_t), pointer :: last_symbol type( integer_t), pointer :: first_integer type( integer_t), pointer :: last_integer type( logical_t), pointer :: first_logical type( logical_t), pointer :: last_logical class( symbol_t), pointer :: first_sf_symbol class( symbol_t), pointer :: last_sf_symbol type( integer_t), pointer :: first_cl_integer type( integer_t), pointer :: last_cl_integer type( logical_t), pointer :: first_cl_logical type( logical_t), pointer :: last_cl_logical contains subroutine process_coco_statement(coco_stmt) character(len= *), intent(in) :: coco_stmt class(symbol_t), pointer :: symbol_ptr type(integer_t), pointer :: integer_ptr type(logical_t), pointer :: logical_ptr integer eq_idx integer expr_idx nullify( symbol_ptr) eq_idx = scan( coco_stmt( 1: symbol_name_len + len( equals)), equals) got_equals: if( eq_idx > 0 )then call seek_symbol_name( coco_stmt( 1: eq_idx - 1), symbol_ptr) end if got_equals if (associated(symbol_ptr))then expr_idx = eq_idx + len(equals) integer_or_logical: select type(symbol_ptr) type is(integer_t) integer_or_logical integer_ptr => symbol_ptr call process_integer_assignment( coco_stmt( expr_idx: ), integer_ptr) type is(logical_t) integer_or_logical logical_ptr => symbol_ptr call process_logical_assignment( coco_stmt( expr_idx: ), logical_ptr) class default integer_or_logical call msg_quit("target of assignment must ") end select integer_or_logical end if end subroutine process_coco_statement subroutine integer_or_logical( expr_str, flag) character(len= *), intent(in) :: expr_str logical, intent(out) :: flag flag = .true. end subroutine integer_or_logical recursive subroutine eval_int_expr( int_expr, value) character(len= *), intent(in) :: int_expr integer, intent(out) :: value value = 42 end subroutine eval_int_expr end program coco