diff options
author | Janus Weil <janus@gcc.gnu.org> | 2016-12-04 21:31:26 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2016-12-04 21:31:26 +0100 |
commit | aa7cfe40579670e5bc0df3220181aad0bee763ab (patch) | |
tree | 31043207b5865f80e620542d9f0a6a89e68e505c /gcc/fortran/intrinsic.c | |
parent | 5dcf45618031c9d0e44ba306102a6562eed879d3 (diff) | |
download | gcc-aa7cfe40579670e5bc0df3220181aad0bee763ab.zip gcc-aa7cfe40579670e5bc0df3220181aad0bee763ab.tar.gz gcc-aa7cfe40579670e5bc0df3220181aad0bee763ab.tar.bz2 |
re PR fortran/78618 (ICE in gfc_check_rank, at fortran/check.c:3670)
2016-12-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/78618
* intrinsic.c (gfc_convert_type_warn): Do not set the full typespec for
the conversion symbol, but only type and kind. Set the full typespec
for the expression.
(gfc_convert_chartype): Ditto.
From-SVN: r243232
Diffstat (limited to 'gcc/fortran/intrinsic.c')
-rw-r--r-- | gcc/fortran/intrinsic.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index fdc11d8..fb83402 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -4984,12 +4984,14 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag) new_expr->value.function.name = sym->lib_name; new_expr->value.function.isym = sym; new_expr->where = old_where; + new_expr->ts = *ts; new_expr->rank = rank; new_expr->shape = gfc_copy_shape (shape, rank); gfc_get_ha_sym_tree (sym->name, &new_expr->symtree); new_expr->symtree->n.sym->result = new_expr->symtree->n.sym; - new_expr->symtree->n.sym->ts = *ts; + new_expr->symtree->n.sym->ts.type = ts->type; + new_expr->symtree->n.sym->ts.kind = ts->kind; new_expr->symtree->n.sym->attr.flavor = FL_PROCEDURE; new_expr->symtree->n.sym->attr.function = 1; new_expr->symtree->n.sym->attr.elemental = 1; @@ -5055,11 +5057,13 @@ gfc_convert_chartype (gfc_expr *expr, gfc_typespec *ts) new_expr->value.function.name = sym->lib_name; new_expr->value.function.isym = sym; new_expr->where = old_where; + new_expr->ts = *ts; new_expr->rank = rank; new_expr->shape = gfc_copy_shape (shape, rank); gfc_get_ha_sym_tree (sym->name, &new_expr->symtree); - new_expr->symtree->n.sym->ts = *ts; + new_expr->symtree->n.sym->ts.type = ts->type; + new_expr->symtree->n.sym->ts.kind = ts->kind; new_expr->symtree->n.sym->attr.flavor = FL_PROCEDURE; new_expr->symtree->n.sym->attr.function = 1; new_expr->symtree->n.sym->attr.elemental = 1; |