aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2018-08-25 17:41:34 +0200
committerJanus Weil <janus@gcc.gnu.org>2018-08-25 17:41:34 +0200
commit3d6fc627f6cb78ecf280622c05eed59e9150a5c7 (patch)
tree06d8adf521a462ffce4c28e2e3c335cee13a6d1e /gcc/fortran/resolve.c
parentefa57feec8e47a9f6e4b62a21658f614b4aeb7d5 (diff)
downloadgcc-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.c5
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)