------- Comment #1 from pault at gcc dot gnu dot org 2007-02-20 05:34 ------- Confirmed:
The first call to checkv produces checkv (&ires, &parm.10, 0B); With prototype: checkv (ires, a1, opt1), the call to size1 is *ires = _gfortran_size1 (&parm.6, *opt1); with the obvious consequences. Paul As an aside, Thomas, it seems to me that the fix is relatively easy: trans-intrinsic.c:2702 actual = actual->next; if (actual->expr) { gfc_init_se (&argse, NULL); gfc_conv_expr_type (&argse, actual->expr, gfc_array_index_type); gfc_add_block_to_block (&se->pre, &argse.pre); args = gfc_chainon_list (args, argse.expr); fndecl = gfor_fndecl_size1; } else fndecl = gfor_fndecl_size0; We need a tree conditional that effects this: fndecl = argse.pre == 0B ? gfor_fndecl_size0 : gfor_fndecl_size1 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30865