I don't know if there's already a PR but I get an ICE compiling this with a non-patched version. If x is not an array everything goes ok.
2012/6/11 Tobias Burnus <bur...@net-b.de>: > On 06/11/2012 11:24 AM, Alessandro Fanfarillo wrote: >> >> gfortran.dg/coarray/poly_run_3.f90 > > > That one fails because I for forgot that se.expr in gfc_trans_deallocate > contains the descriptor and not the pointer to the data. That's fixed by: > > tmp = se.expr; > if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (tmp))) > { > tmp = gfc_conv_descriptor_data_get (tmp); > STRIP_NOPS (tmp); > > } > tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node, > tmp, build_int_cst (TREE_TYPE (tmp), 0)); > > However, it still fails for the > > type t > integer, allocatable :: comp > end type t > contains > subroutine foo(x) > class(t), allocatable, intent(out) :: x(:) > end subroutine > end > > (The intent(out) causes automatic deallocation.) The backtrace does not > really point to some code which the patch touched; it shouldn't be affected > by the class.c changes and gfc_trans_deallocate does not seem to be entered. > > While I do not immediately see why it fails, I wonder whether it is due to > the removed "else if ... BT_CLASS)" case in > gfc_deallocate_scalar_with_status. In any case, the change to > gfc_trans_deallocate might be also needed for > gfc_deallocate_scalar_with_status. At least, automatic deallocation (with > intent(out) or when leaving the scope) does not seem to go through > gfc_trans_deallocate but only through gfc_deallocate_scalar_with_status. > > Tobias