aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2018-12-23 17:35:13 +0000
committerPaul Thomas <pault@gcc.gnu.org>2018-12-23 17:35:13 +0000
commit18246c420fd53a12be68b4ddfcfebf1e80056435 (patch)
tree7712c58d4bd1cef990d916718af0885e33701c5e /gcc/fortran/resolve.c
parentb71bbbe2b22460ff9200613784e631496fcfc054 (diff)
downloadgcc-18246c420fd53a12be68b4ddfcfebf1e80056435.zip
gcc-18246c420fd53a12be68b4ddfcfebf1e80056435.tar.gz
gcc-18246c420fd53a12be68b4ddfcfebf1e80056435.tar.bz2
re PR fortran/77703 (ICE on assignment to pointer function)
2018-12-23 Paul Thomas <pault@gcc.gnu.org> PR fortran/77703 * resolve.c (get_temp_from_expr): Use the string length of constant character expressions. 2018-12-23 Paul Thomas <pault@gcc.gnu.org> PR fortran/77703 * gfortran.dg/ptr_func_assign_5.f08 : New test. From-SVN: r267379
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 9ce01c7..ec8070f 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -10637,6 +10637,11 @@ get_temp_from_expr (gfc_expr *e, gfc_namespace *ns)
gfc_get_sym_tree (name, ns, &tmp, false);
gfc_add_type (tmp->n.sym, &e->ts, NULL);
+ if (e->expr_type == EXPR_CONSTANT && e->ts.type == BT_CHARACTER)
+ tmp->n.sym->ts.u.cl->length = gfc_get_int_expr (gfc_charlen_int_kind,
+ NULL,
+ e->value.character.length);
+
as = NULL;
ref = NULL;
aref = NULL;