diff options
author | Harald Anlauf <anlauf@gmx.de> | 2019-02-24 20:03:28 +0000 |
---|---|---|
committer | Harald Anlauf <anlauf@gcc.gnu.org> | 2019-02-24 20:03:28 +0000 |
commit | cdd1793162ce3a8dc1c0d067f1af173eee98da0f (patch) | |
tree | f8023f584e66c89d7f50649bb609e9124f0aab15 /gcc/fortran/class.c | |
parent | 953e25c44acc2458d854b1442d7775d997aaf187 (diff) | |
download | gcc-cdd1793162ce3a8dc1c0d067f1af173eee98da0f.zip gcc-cdd1793162ce3a8dc1c0d067f1af173eee98da0f.tar.gz gcc-cdd1793162ce3a8dc1c0d067f1af173eee98da0f.tar.bz2 |
re PR fortran/89266 (ICE with TRANSFER of len=0 character array constructor)
2019-02-24 Harald Anlauf <anlauf@gmx.de>
PR fortran/89266
PR fortran/88326
* target-memory.c (gfc_element_size): Return false if element size
cannot be determined; element size is returned separately.
(gfc_target_expr_size): Return false if expression size cannot be
determined; expression size is returned separately.
* target-memory.h: Adjust prototypes.
* check.c (gfc_calculate_transfer_sizes): Adjust references to
gfc_target_expr_size, gfc_element_size.
* arith.c (hollerith2representation): Likewise.
* class.c (find_intrinsic_vtab): Likewise.
* simplify.c (gfc_simplify_sizeof): Likewise.
PR fortran/89266
PR fortran/88326
* gfortran.dg/pr89266.f90: New test.
* gfortran.dg/pr88326.f90: New test.
From-SVN: r269177
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r-- | gcc/fortran/class.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index bcbe631..3f23556 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -2674,6 +2674,7 @@ find_intrinsic_vtab (gfc_typespec *ts) gfc_namespace *sub_ns; gfc_namespace *contained; gfc_expr *e; + size_t e_size; gfc_get_symbol (name, ns, &vtype); if (!gfc_add_flavor (&vtype->attr, FL_DERIVED, NULL, @@ -2708,11 +2709,13 @@ find_intrinsic_vtab (gfc_typespec *ts) e = gfc_get_expr (); e->ts = *ts; e->expr_type = EXPR_VARIABLE; + if (ts->type == BT_CHARACTER) + e_size = ts->kind; + else + gfc_element_size (e, &e_size); c->initializer = gfc_get_int_expr (gfc_size_kind, NULL, - ts->type == BT_CHARACTER - ? ts->kind - : gfc_element_size (e)); + e_size); gfc_free_expr (e); /* Add component _extends. */ |