aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorMikael Morin <mikael@gcc.gnu.org>2015-03-14 12:23:27 +0000
committerMikael Morin <mikael@gcc.gnu.org>2015-03-14 12:23:27 +0000
commit375e632759babad9111f2c4eadcb69a9fe95906f (patch)
treedc76c5bb540c6def56c50e9ceb2ae6bb0cc715f0 /gcc/fortran
parentd88981fc3e1d9b1394a45074ead47d0ced23212b (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c3
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);