diff options
author | Louis Krupp <louis.krupp@zoho.com> | 2018-01-16 01:09:11 +0000 |
---|---|---|
committer | Louis Krupp <lkrupp@gcc.gnu.org> | 2018-01-16 01:09:11 +0000 |
commit | 75a3c61ae44b7820baf7946c3ddf3632adedcccf (patch) | |
tree | bc36aeb6e8b943718802996c56770e959baf1a07 /gcc/fortran/resolve.c | |
parent | c662b64cf93dbb8b0ef52acc9cc241afb2d6f221 (diff) | |
download | gcc-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.c | 4 |
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 |