From 239b48db1b238cf5395570604ca4400e74025ab4 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Wed, 23 May 2012 22:35:30 +0200 Subject: re PR fortran/51055 (deferred length character allocation: allocate(character(len=i)::s) rejected) 2012-05-23 Tobias Burnus PR fortran/51055 PR fortran/45170 * match.c (gfc_match_allocate): Set length_from_typespec for characters. * resolve.c (resolve_charlen): If set, don't check whether the len is a specification expression. 2012-05-23 Tobias Burnus PR fortran/51055 PR fortran/45170 * gfortran.dg/allocate_with_typespec_6.f90: New. From-SVN: r187811 --- gcc/fortran/resolve.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'gcc/fortran/resolve.c') diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 9814c14..a56d3f7 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9945,12 +9945,24 @@ resolve_charlen (gfc_charlen *cl) cl->resolved = 1; - specification_expr = 1; - if (resolve_index_expr (cl->length) == FAILURE) + if (cl->length_from_typespec) { - specification_expr = 0; - return FAILURE; + if (gfc_resolve_expr (cl->length) == FAILURE) + return FAILURE; + + if (gfc_simplify_expr (cl->length, 0) == FAILURE) + return FAILURE; + } + else + { + specification_expr = 1; + + if (resolve_index_expr (cl->length) == FAILURE) + { + specification_expr = 0; + return FAILURE; + } } /* "If the character length parameter value evaluates to a negative -- cgit v1.1