diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2018-02-25 12:41:26 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2018-02-25 12:41:26 +0000 |
commit | 8fba26f48f4224ca9f2faab0b2a28e20784a119c (patch) | |
tree | 7736367a759834239d9df93cb718fb1e4d2b44fe /gcc/fortran | |
parent | 6ef1366a5516de64a6fcf35014359aba9d631c9a (diff) | |
download | gcc-8fba26f48f4224ca9f2faab0b2a28e20784a119c.zip gcc-8fba26f48f4224ca9f2faab0b2a28e20784a119c.tar.gz gcc-8fba26f48f4224ca9f2faab0b2a28e20784a119c.tar.bz2 |
re PR fortran/84523 (Runtime crash deallocating allocatable array within derived type)
2018-02-25 Paul Thomas <pault@gcc.gnu.org>
PR fortran/84523
* trans-intrinsic.c (gfc_conv_allocated): If the argument se
has a pre block, add it to the expression pre block.
2018-02-25 Paul Thomas <pault@gcc.gnu.org>
PR fortran/84523
* gfortran.dg/pr84523.f90: New test.
From-SVN: r257970
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 78e3c2e..2c2aa2b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2018-02-25 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/84523 + * trans-intrinsic.c (gfc_conv_allocated): If the argument se + has a pre block, add it to the expression pre block. + 2018-02-25 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/78238 diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index c4a3775..816f3b9 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -7606,6 +7606,11 @@ gfc_conv_allocated (gfc_se *se, gfc_expr *expr) tmp = fold_build2_loc (input_location, NE_EXPR, logical_type_node, tmp, fold_convert (TREE_TYPE (tmp), null_pointer_node)); } + + /* Components of pointer array references sometimes come back with a pre block. */ + if (arg1se.pre.head) + gfc_add_block_to_block (&se->pre, &arg1se.pre); + se->expr = convert (gfc_typenode_for_spec (&expr->ts), tmp); } |