diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-06-06 21:41:29 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-06-06 21:41:29 +0000 |
commit | 9658d116f335629a3fae673474412cf8044d3d3e (patch) | |
tree | cf424c5bd45816ab5d8c05cc95c18f6595632012 /gcc/fortran | |
parent | c63f44a8d7361a32004f0114daff3670ffc424d7 (diff) | |
download | gcc-9658d116f335629a3fae673474412cf8044d3d3e.zip gcc-9658d116f335629a3fae673474412cf8044d3d3e.tar.gz gcc-9658d116f335629a3fae673474412cf8044d3d3e.tar.bz2 |
re PR fortran/85641 (ICE with string concatenate)
2018-06-06 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85641
* frontend-passes.c (is_fe_temp): Add prototype.
(realloc_string_callback): Early return for frontend-generated
temporary.
2018-06-06 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85641
* gfortran.dg/realloc_on_assign_30.f90: New test.
From-SVN: r261248
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/frontend-passes.c | 5 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 23a4065..e69ff8e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2018-06-06 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/85641 + * frontend-passes.c (is_fe_temp): Add prototype. + (realloc_string_callback): Early return for frontend-generated + temporary. + 2018-06-05 Cesar Philippidis <cesar@codesourcery.com> PR fortran/85701 diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c index 40e88b1..c13366c 100644 --- a/gcc/fortran/frontend-passes.c +++ b/gcc/fortran/frontend-passes.c @@ -57,6 +57,8 @@ static bool has_dimen_vector_ref (gfc_expr *); static int matmul_temp_args (gfc_code **, int *,void *data); static int index_interchange (gfc_code **, int*, void *); +static bool is_fe_temp (gfc_expr *e); + #ifdef CHECKING_P static void check_locus (gfc_namespace *); #endif @@ -254,6 +256,9 @@ realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, || !expr1->ts.deferred) return 0; + if (is_fe_temp (expr1)) + return 0; + expr2 = gfc_discard_nops (co->expr2); if (expr2->expr_type == EXPR_VARIABLE) |