https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79072

--- Comment #12 from neil.n.carlson at gmail dot com ---
The second adds a select case and print to get at the result value before its
handed back.  This produces an ICE with 6.4.1, 7.2.1, and 8.0.0 (20171028)

character(3), target :: a = 'foo'
class(*), pointer :: b
b => ptr()
select type (b)
type is (character(*))
  print '(3a)', 'b="', b, '" (expect "foo")'
end select
contains
  function ptr()
    class(*), pointer :: ptr
    ptr => a
    select type (ptr)
    type is (character(*))
    end select
  end function
end

Here's the traceback on 7.2.1:

gfortran-bug-20170812b.f90:46:0:

 character(3), target :: a = 'foo'

internal compiler error: in gfc_advance_chain, at fortran/trans.c:58
0x65d137 gfc_advance_chain(tree_node*, int)
        ../../gcc/fortran/trans.c:58
0x685eba gfc_class_len_get(tree_node*)
        ../../gcc/fortran/trans-expr.c:226
0x6c6364 trans_associate_var
        ../../gcc/fortran/trans-stmt.c:1778
0x6c6364 gfc_trans_block_construct(gfc_code*)
        ../../gcc/fortran/trans-stmt.c:1831
0x65d6b7 trans_code
        ../../gcc/fortran/trans.c:1913
0x6c77d9 gfc_trans_select_type_cases
        ../../gcc/fortran/trans-stmt.c:2422
0x6c77d9 gfc_trans_select_type(gfc_code*)
        ../../gcc/fortran/trans-stmt.c:3133
0x65d747 trans_code
        ../../gcc/fortran/trans.c:1933
0x6c5e38 gfc_trans_block_construct(gfc_code*)
        ../../gcc/fortran/trans-stmt.c:1824
0x65d6b7 trans_code
        ../../gcc/fortran/trans.c:1913
0x682847 gfc_generate_function_code(gfc_namespace*)
        ../../gcc/fortran/trans-decl.c:6332
0x682634 gfc_generate_contained_functions
        ../../gcc/fortran/trans-decl.c:5327
0x682634 gfc_generate_function_code(gfc_namespace*)
        ../../gcc/fortran/trans-decl.c:6261
0x616eb6 translate_all_program_units
        ../../gcc/fortran/parse.c:6074
0x616eb6 gfc_parse_file()
        ../../gcc/fortran/parse.c:6274
0x65a02f gfc_be_parse_file
        ../../gcc/fortran/f95-lang.c:204

Reply via email to