------- Comment #10 from pault at gcc dot gnu dot org 2007-11-01 18:07 ------- FX,
I believe that the fix is something like: Index: gcc/fortran/trans-array.c =================================================================== *** gcc/fortran/trans-array.c (revision 129505) --- gcc/fortran/trans-array.c (working copy) *************** gfc_conv_array_parameter (gfc_se * se, g *** 4965,4972 **** if (expr->expr_type == EXPR_ARRAY && expr->ts.type == BT_CHARACTER) { get_array_ctor_strlen (&se->pre, expr->value.constructor, &tmp); ! expr->ts.cl->backend_decl = gfc_evaluate_now (tmp, &se->pre); ! se->string_length = expr->ts.cl->backend_decl; } /* Is this the result of the enclosing procedure? */ --- 4972,4979 ---- if (expr->expr_type == EXPR_ARRAY && expr->ts.type == BT_CHARACTER) { get_array_ctor_strlen (&se->pre, expr->value.constructor, &tmp); ! expr->ts.cl->backend_decl = tmp; ! se->string_length = gfc_evaluate_now (tmp, &se->pre); } /* Is this the result of the enclosing procedure? */ Fixing the value of a cl->backend_decl has the observed consequences because, in some cases like this one, the expr->ts.cl is a copy of a variable cl. This survives dg.expr=gfortran.dg/char* but beyond that I am not in a position to go. Please make use of it as you will. Cheers Paul PS It's my fault! -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33881