From 88b8971f9cf7c07de72c8b3fe6d4e691bcef7898 Mon Sep 17 00:00:00 2001 From: Paul Thomas Date: Wed, 24 Aug 2016 19:33:14 +0000 Subject: re PR fortran/77358 ([F08] deferred-length character function returns zero-length string) 2016-08-24 Paul Thomas PR fortran/77358 * resolve.c (resolve_fl_procedure): Use the correct gfc_charlen for deferred character length module procedures. 2016-08-24 Paul Thomas PR fortran/77358 * gfortran.dg/submodule_17.f08: New test. From-SVN: r239740 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/resolve.c | 7 +++++++ 2 files changed, 13 insertions(+) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6dc44e6..93eb48a 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2016-08-24 Paul Thomas + + PR fortran/77358 + * resolve.c (resolve_fl_procedure): Use the correct gfc_charlen + for deferred character length module procedures. + 2016-08-23 Fritz Reese * decl.c (gfc_match_structure_decl): Make gfc_structure_id static. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index b7036a8..0a92efe 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -11884,6 +11884,13 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) iface = sym->ts.interface; sym->ts.interface = NULL; + /* Make sure that the result uses the correct charlen for deferred + length results. */ + if (iface && sym->result + && iface->ts.type == BT_CHARACTER + && iface->ts.deferred) + sym->result->ts.u.cl = iface->ts.u.cl; + if (iface == NULL) goto check_formal; -- cgit v1.1