aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/class.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2013-01-05 13:20:08 +0000
committerMikael Morin <mikael@gcc.gnu.org>2013-01-05 13:20:08 +0000
commitd00be3a3a3747f72ebe0dd45ade214c5e4944f0a (patch)
tree38bcf78f6b520d21c46b008748295d557020b2a4 /gcc/fortran/class.c
parent9e04287b861dc1cc8f19dce11b9c3147213c34b7 (diff)
downloadgcc-d00be3a3a3747f72ebe0dd45ade214c5e4944f0a.zip
gcc-d00be3a3a3747f72ebe0dd45ade214c5e4944f0a.tar.gz
gcc-d00be3a3a3747f72ebe0dd45ade214c5e4944f0a.tar.bz2
re PR fortran/55827 (ICE with multiple fortran modules and character lenght determined by an interfaced pure function)
2013-01-05 Steven G. Kargl <kargl@gcc.gnu.org> Mikael Morin <mikael@gcc.gnu.org> PR fortran/55827 * class.c (gfc_fix_class_refs): Adapt ts initialization for the case e->symtree == NULL. * trans-expr.c (gfc_conv_function_expr): Init sym earlier. Use it. 2013-01-05 Steven G. Kargl <kargl@gcc.gnu.org> Mikael Morin <mikael@gcc.gnu.org> PR fortran/55827 * gfortran.dg/use_22.f90: New test. Co-Authored-By: Mikael Morin <mikael@gcc.gnu.org> From-SVN: r194928
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r--gcc/fortran/class.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 1b1e85d..0d34e78 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -165,7 +165,23 @@ gfc_fix_class_refs (gfc_expr *e)
&& e->value.function.isym != NULL))
return;
- ts = &e->symtree->n.sym->ts;
+ if (e->expr_type == EXPR_VARIABLE)
+ ts = &e->symtree->n.sym->ts;
+ else
+ {
+ gfc_symbol *func;
+
+ gcc_assert (e->expr_type == EXPR_FUNCTION);
+ if (e->value.function.esym != NULL)
+ func = e->value.function.esym;
+ else
+ func = e->symtree->n.sym;
+
+ if (func->result != NULL)
+ ts = &func->result->ts;
+ else
+ ts = &func->ts;
+ }
for (ref = &e->ref; *ref != NULL; ref = &(*ref)->next)
{