diff options
author | Janus Weil <janus@gcc.gnu.org> | 2018-08-25 17:41:34 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2018-08-25 17:41:34 +0200 |
commit | 3d6fc627f6cb78ecf280622c05eed59e9150a5c7 (patch) | |
tree | 06d8adf521a462ffce4c28e2e3c335cee13a6d1e /gcc/fortran/resolve.c | |
parent | efa57feec8e47a9f6e4b62a21658f614b4aeb7d5 (diff) | |
download | gcc-3d6fc627f6cb78ecf280622c05eed59e9150a5c7.zip gcc-3d6fc627f6cb78ecf280622c05eed59e9150a5c7.tar.gz gcc-3d6fc627f6cb78ecf280622c05eed59e9150a5c7.tar.bz2 |
re PR fortran/86545 (ICE in transfer_expr on invalid WRITE statement)
fix PR 86545
2018-08-25 Janus Weil <janus@gcc.gnu.org>
PR fortran/86545
* resolve.c (resolve_transfer): Correctly determine typespec for
generic function calls, in order to throw a proper error.
2018-08-25 Janus Weil <janus@gcc.gnu.org>
PR fortran/86545
* gfortran.dg/generic_35.f90: New test case.
From-SVN: r263854
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r-- | gcc/fortran/resolve.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 43a8470..ded2762 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9280,7 +9280,6 @@ resolve_select_type (gfc_code *code, gfc_namespace *old_ns) static void resolve_transfer (gfc_code *code) { - gfc_typespec *ts; gfc_symbol *sym, *derived; gfc_ref *ref; gfc_expr *exp; @@ -9316,7 +9315,9 @@ resolve_transfer (gfc_code *code) _("item in READ"))) return; - ts = exp->expr_type == EXPR_STRUCTURE ? &exp->ts : &exp->symtree->n.sym->ts; + const gfc_typespec *ts = exp->expr_type == EXPR_STRUCTURE + || exp->expr_type == EXPR_FUNCTION + ? &exp->ts : &exp->symtree->n.sym->ts; /* Go to actual component transferred. */ for (ref = exp->ref; ref; ref = ref->next) |