From 8111a921e9c63612e5b608439f2130276e845e0e Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Sun, 6 May 2007 15:12:01 +0000 Subject: [PATCH] re PR fortran/31540 ([Regression 4.2 only] character((constant expression)) for external function) 2007-05-06 Paul Thomas PR fortran/31540 * resolve.c (resolve_fl_procedure): Resolve constant character lengths. 2007-05-06 Paul Thomas PR fortran/31540 * gfortran.dg/char_result_4.f90: New test. From-SVN: r124475 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/resolve.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9435165ffc3..361ffcc04be 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-05-06 Paul Thomas + + PR fortran/31540 + * resolve.c (resolve_fl_procedure): Resolve constant character + lengths. + 2007-05-05 Jerry DeLisle PR fortran/31251 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 55f1390d03b..4ec9a921c4a 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -5812,6 +5812,11 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) if (sym->ts.type == BT_CHARACTER) { gfc_charlen *cl = sym->ts.cl; + + if (cl && cl->length && gfc_is_constant_expr (cl->length) + && resolve_charlen (cl) == FAILURE) + return FAILURE; + if (!cl || !cl->length || cl->length->expr_type != EXPR_CONSTANT) { if (sym->attr.proc == PROC_ST_FUNCTION) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bcec964d959..2b74f7cc8f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-05-06 Paul Thomas + + PR fortran/31540 + * gfortran.dg/char_result_4.f90: New test. + 2007-06-05 Revital Eres PR 30957