]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* trans-expr.c (copyable_array_p): Consider user derived types without
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Jan 2007 18:19:39 +0000 (18:19 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 18 Jan 2007 18:19:39 +0000 (18:19 +0000)
allocatable components to be copyable.

* gfortran.dg/array_memcpy_4.f90: New test case.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@120906 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 4c1a3c528e74a41045357f4f89db94ff59f6290d..671a21ebfc62afc532002f515c878a25e14f0f9a 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-18  Roger Sayle  <roger@eyesopen.com>
+
+       * trans-expr.c (copyable_array_p): Consider user derived types without
+       allocatable components to be copyable.
+
 2007-01-18  Roger Sayle  <roger@eyesopen.com>
 
        * trans-stmt.c (compute_overall_iter_number): Enhance to precompute
index c6ebf3e8b31d9ffdd0075aad6ea7536f870712e6..3f186a1e02d0ea6b96414aba38f297a815152424 100644 (file)
@@ -3815,6 +3815,12 @@ copyable_array_p (gfc_expr * expr)
     case BT_LOGICAL:
       return true;
 
+    case BT_CHARACTER:
+      return false;
+
+    case BT_DERIVED:
+      return !expr->ts.derived->attr.alloc_comp;
+
     default:
       break;
     }
index 3b88a022fec9bb54d0fc851138ca940cee614e64..dc33ec9f571d7a8d6268de83c9f2fd130252de4b 100644 (file)
@@ -1,3 +1,7 @@
+2007-01-18  Roger Sayle  <roger@eyesopen.com>
+
+       * gfortran.dg/array_memcpy_4.f90: New test case.
+
 2007-01-18  Josh Conner  <jconner@apple.com>
 
        PR target/30485
diff --git a/gcc/testsuite/gfortran.dg/array_memcpy_4.f90 b/gcc/testsuite/gfortran.dg/array_memcpy_4.f90
new file mode 100644 (file)
index 0000000..0f8b5cb
--- /dev/null
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! { dg-options "-O2 -fdump-tree-original" }
+  type t
+    logical valid
+    integer :: x, y
+  end type
+  type (t) :: s(5)
+  type (t) :: d(5)
+
+  d = s
+end
+! { dg-final { scan-tree-dump-times "d = " 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }