Hi Alessandro, I am glad to see that Janus is giving you a helping hand, in addition to Tobias. I am so tied up with every aspect of life that gfortran is not figuring much at all.
When you clean up the patch, you might consider making this into a separate function: + if (free_proc) + { + ppc = gfc_copy_expr(free_proc->initializer); + ppc_code = gfc_get_code (); + ppc_code->resolved_sym = ppc->symtree->n.sym; + ppc_code->resolved_sym->attr.elemental = 1; + ppc_code->ext.actual = actual; + ppc_code->expr1 = ppc; + ppc_code->op = EXEC_CALL; + tmp = gfc_trans_call (ppc_code, true, NULL, NULL, false); + gfc_free_statements (ppc_code); + gfc_add_expr_to_block (&block, tmp); + } ... and using the function call to replace the corresponding call to _copy in trans_allocate. I suspect that we are going to do this some more :-) Once we have the separate function, we could at later stage replace it by a TREE_SSA version. Cheers Paul On 3 June 2012 12:15, Alessandro Fanfarillo <fanfarillo....@gmail.com> wrote: >> Right, the problem is that the _free component is missing. Just as the >> _copy component, _free should be present for *every* vtype, no matter >> if there are allocatable components or not. If the _free component is >> not needed, it should be initialized to EXPR_NULL. > > With an "empty" _free function for every type which does not have > allocatable components the problem with dynamic_dispatch_4.f03 > disappears :), thank you very much. In the afternoon I'll reorganize > the code. > > Bye. > > Alessandro -- The knack of flying is learning how to throw yourself at the ground and miss. --Hitchhikers Guide to the Galaxy