------- Comment #2 from burnus at gcc dot gnu dot org 2007-04-27 23:52 ------- trans-expr.c's gfc_conv_variable contains: /* Special case for assigning the return value of a function. Self recursive functions must have an explicit return value. */ if (return_value && (se->expr == current_function_decl || parent_flag)) se_expr = gfc_get_fake_result_decl (sym, parent_flag);
I somehow fail to see why this works characters, but not with arrays (except for pointers, which are treated differently). Side note: function foo1(n) implicit none integer :: n integer,ALLOCATABLE :: foo1(:) external bar1 call bar1(n, foo1) end function gives an ICE: in gfc_conv_descriptor_data_get, at fortran/trans-array.c:148 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31692