http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46408
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED AssignedTo|unassigned at gcc dot |janus at gcc dot gnu.org |gnu.org | --- Comment #8 from janus at gcc dot gnu.org 2011-01-02 19:23:55 UTC --- (In reply to comment #7) > 2) Forget about freeing the old value of 'dst' (which is fine as long as we > only call _copy on allocation, where dst is undefined; this is currently the > case). This is definitely the proper thing to do: We only need _copy for ALLOCATE with SOURCE. And the best thing is, it's really easily done: Index: gcc/fortran/class.c =================================================================== --- gcc/fortran/class.c (revision 168379) +++ gcc/fortran/class.c (working copy) @@ -548,7 +548,7 @@ gfc_find_derived_vtab (gfc_symbol *derived) copy->formal->next->sym = dst; /* Set up code. */ sub_ns->code = gfc_get_code (); - sub_ns->code->op = EXEC_ASSIGN; + sub_ns->code->op = EXEC_INIT_ASSIGN; sub_ns->code->expr1 = gfc_lval_expr_from_sym (dst); sub_ns->code->expr2 = gfc_lval_expr_from_sym (src); /* Set initializer. */ It took me a long while to see this, but in the end it's completely trivial. I'll commit after regtesting.