diff options
author | Harald Anlauf <anlauf@gmx.de> | 2019-03-13 21:33:27 +0000 |
---|---|---|
committer | Harald Anlauf <anlauf@gcc.gnu.org> | 2019-03-13 21:33:27 +0000 |
commit | edaff7c9448c4e4bdc4e4a42f5813ee543a1df31 (patch) | |
tree | 63e431971014e2cb9e412402010f1b4ec6e604f1 /gcc/fortran/trans-expr.c | |
parent | 1e05d1854cd6d63cda5828c50735d029ce198ff2 (diff) | |
download | gcc-edaff7c9448c4e4bdc4e4a42f5813ee543a1df31.zip gcc-edaff7c9448c4e4bdc4e4a42f5813ee543a1df31.tar.gz gcc-edaff7c9448c4e4bdc4e4a42f5813ee543a1df31.tar.bz2 |
re PR fortran/87045 (pointer to array of character)
2019-03-13 Harald Anlauf <anlauf@gmx.de>
PR fortran/87045
* trans-expr.c (gfc_trans_pointer_assignment): Move check for same
string length so that we do not get false errors for deferred
length.
PR fortran/87045
* gfortran.dg/pr87045.f90: New test.
From-SVN: r269664
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 9019c55..9575f39 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -9278,16 +9278,6 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) } } - /* Check string lengths if applicable. The check is only really added - to the output code if -fbounds-check is enabled. */ - if (expr1->ts.type == BT_CHARACTER && expr2->expr_type != EXPR_NULL) - { - gcc_assert (expr2->ts.type == BT_CHARACTER); - gcc_assert (strlen_lhs && strlen_rhs); - gfc_trans_same_strlen_check ("pointer assignment", &expr1->where, - strlen_lhs, strlen_rhs, &block); - } - /* If rank remapping was done, check with -fcheck=bounds that the target is at least as large as the pointer. */ if (rank_remap && (gfc_option.rtcheck & GFC_RTCHECK_BOUNDS)) @@ -9322,6 +9312,16 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) gfc_add_modify (&block, tmp, build_zero_cst (TREE_TYPE (tmp))); } + /* Check string lengths if applicable. The check is only really added + to the output code if -fbounds-check is enabled. */ + if (expr1->ts.type == BT_CHARACTER && expr2->expr_type != EXPR_NULL) + { + gcc_assert (expr2->ts.type == BT_CHARACTER); + gcc_assert (strlen_lhs && strlen_rhs); + gfc_trans_same_strlen_check ("pointer assignment", &expr1->where, + strlen_lhs, strlen_rhs, &block); + } + gfc_add_block_to_block (&block, &lse.post); if (rank_remap) gfc_add_block_to_block (&block, &rse.post); |