[Bug fortran/55824] [OOP] ICE with ALLOCATE and SOURCE= TRANSPOSE/RESHAPE

burnus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Dec 29 10:13:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55824

--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-12-29 10:12:46 UTC ---
>From trans-stmt.c's gfc_trans_allocate

       /* Evaluate expr3 just once if not a variable.  */
...
           && code->expr3->ts.type == BT_CLASS
           && code->expr3->expr_type != EXPR_VARIABLE)
         ...
         classexpr = gfc_evaluate_now (classexpr, &se.pre);

I think we should handle intrinsic functions in a special way as they never
change the actual type BT_CLASS; thus, the actual type can be taken from the
actual argument of RESHAPE/TRANSPOSE. (Though, check that "transfer(f())"
doesn't evaluate "f" twice.)

(If one skips that if block, the ICE occurs in gfc_array_allocate when
obtaining the size via gfc_array_init_size.)



More information about the Gcc-bugs mailing list