aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorLouis Krupp <louis.krupp@zoho.com>2018-01-16 01:09:11 +0000
committerLouis Krupp <lkrupp@gcc.gnu.org>2018-01-16 01:09:11 +0000
commit75a3c61ae44b7820baf7946c3ddf3632adedcccf (patch)
treebc36aeb6e8b943718802996c56770e959baf1a07 /gcc/fortran/resolve.c
parentc662b64cf93dbb8b0ef52acc9cc241afb2d6f221 (diff)
downloadgcc-75a3c61ae44b7820baf7946c3ddf3632adedcccf.zip
gcc-75a3c61ae44b7820baf7946c3ddf3632adedcccf.tar.gz
gcc-75a3c61ae44b7820baf7946c3ddf3632adedcccf.tar.bz2
re PR fortran/82257 (f951: Internal compiler error segmentation fault)
2018-01-15 Louis Krupp <louis.krupp@zoho.com> PR fortran/82257 * interface.c (compare_rank): Don't try to retrieve CLASS_DATA from symbol marked unlimited polymorphic. * resolve.c (resolve_structure_cons): Likewise. * misc.c (gfc_typename): Don't dereference derived->components if it's NULL. 2018-01-15 Louis Krupp <louis.krupp@zoho.com> PR fortran/82257 * gfortran.dg/unlimited_polymorphic_28.f90: New test. From-SVN: r256720
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 6756871..1ecfe05 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1289,7 +1289,9 @@ resolve_structure_cons (gfc_expr *expr, int init)
}
rank = comp->as ? comp->as->rank : 0;
- if (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->as)
+ if (comp->ts.type == BT_CLASS
+ && !comp->ts.u.derived->attr.unlimited_polymorphic
+ && CLASS_DATA (comp)->as)
rank = CLASS_DATA (comp)->as->rank;
if (cons->expr->expr_type != EXPR_NULL && rank != cons->expr->rank