diff options
author | Mikael Morin <mikael@gcc.gnu.org> | 2015-03-14 12:23:27 +0000 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2015-03-14 12:23:27 +0000 |
commit | 375e632759babad9111f2c4eadcb69a9fe95906f (patch) | |
tree | dc76c5bb540c6def56c50e9ceb2ae6bb0cc715f0 /gcc/fortran | |
parent | d88981fc3e1d9b1394a45074ead47d0ced23212b (diff) | |
download | gcc-375e632759babad9111f2c4eadcb69a9fe95906f.zip gcc-375e632759babad9111f2c4eadcb69a9fe95906f.tar.gz gcc-375e632759babad9111f2c4eadcb69a9fe95906f.tar.bz2 |
re PR fortran/61138 (Wrong code with pointer-bounds remapping)
PR fortran/61138
fortran/
* trans-expr.c (gfc_trans_pointer_assignment): Clear DESCRIPTOR_ONLY
field before reusing LSE.
testsuite/
gfortran.dg/pointer_remapping_9.f90: New.
From-SVN: r221436
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d7d8543..30107c9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2015-03-14 Mikael Morin <mikael@gcc.gnu.org> + + PR fortran/61138 + * trans-expr.c (gfc_trans_pointer_assignment): Clear DESCRIPTOR_ONLY + field before reusing LSE. + 2015-03-11 Janne Blomqvist <jb@gcc.gnu.org> PR libfortran/65200 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 353d012..8af8be2 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -7335,6 +7335,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) bound, bound, 0, GFC_ARRAY_POINTER_CONT, false); tmp = gfc_create_var (tmp, "ptrtemp"); + lse.descriptor_only = 0; lse.expr = tmp; lse.direct_byref = 1; gfc_conv_expr_descriptor (&lse, expr2); @@ -7350,6 +7351,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) else if (expr2->expr_type == EXPR_VARIABLE) { /* Assign directly to the LHS's descriptor. */ + lse.descriptor_only = 0; lse.direct_byref = 1; gfc_conv_expr_descriptor (&lse, expr2); strlen_rhs = lse.string_length; @@ -7401,6 +7403,7 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gfc_expr * expr2) /* Assign to a temporary descriptor and then copy that temporary to the pointer. */ tmp = gfc_create_var (TREE_TYPE (desc), "ptrtemp"); + lse.descriptor_only = 0; lse.expr = tmp; lse.direct_byref = 1; gfc_conv_expr_descriptor (&lse, expr2); |