PF fortran/88364
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 16 Dec 2018 14:32:46 +0000 (14:32 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sun, 16 Dec 2018 14:32:46 +0000 (14:32 +0000)
2018-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PF fortran/88364
* trans-expr.c (gfc_conv_expr_reference): Do not add clobber if
the expression contains a reference.

2018-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/88363
* intent_out_13.f90: New test.

From-SVN: r267187

gcc/fortran/ChangeLog
gcc/fortran/trans-expr.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/intent_out_13.f90 [new file with mode: 0644]

index 0034c3b714c56c39204e1aa7a6f9d2e91f23b7dd..7220c9cb5816973edf07270e4baf5734ac3c6dfc 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PF fortran/88364
+       * trans-expr.c (gfc_conv_expr_reference): Do not add clobber if
+       the expression contains a reference.
+
 2018-12-15  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/87944
@@ -9,7 +15,7 @@
        PR fortran/88138
        * decl.c (variable_decl): Check that a derived isn't being assigned
        an incompatible entity in an initialization.
+
 2018-12-12  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/88463
index 64bda4c1e69e568a3b99d4b3f2add0e91e6ed272..16a713551f0a2e57a70f15dc23dea660ec0f030a 100644 (file)
@@ -8152,7 +8152,7 @@ gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr, bool add_clobber)
          gfc_add_block_to_block (&se->pre, &se->post);
          se->expr = var;
        }
-      else if (add_clobber)
+      else if (add_clobber && expr->ref == NULL)
        {
          tree clobber;
          tree var;
index d7ca87718ef48448c8dc634d076bfc0a7cd4372f..f47385bb761bbda6aa88345b1ea6764460bb88ce 100644 (file)
@@ -1,3 +1,8 @@
+2018-12-16  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/88363
+       * intent_out_13.f90: New test.
+
 2018-12-15  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/88483
diff --git a/gcc/testsuite/gfortran.dg/intent_out_13.f90 b/gcc/testsuite/gfortran.dg/intent_out_13.f90
new file mode 100644 (file)
index 0000000..ebbc5b7
--- /dev/null
@@ -0,0 +1,22 @@
+! { dg-do run }
+! PR 88364 -- too much was clobbered on call.
+module pr88364
+  implicit none
+  type t
+    integer :: b = -1
+    integer :: c = 2
+  end type t
+contains
+  subroutine f1 (x)
+    integer, intent(out) :: x
+    x = 5
+  end subroutine f1
+  subroutine f2 ()
+    type(t) :: x
+    call f1 (x%b)
+    if (x%b .ne. 5 .or. x%c .ne. 2) stop 1
+  end subroutine f2
+end module pr88364
+  use pr88364
+  call f2
+end