diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 4c1a3c528e7..671a21ebfc6 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2007-01-18 Roger Sayle + + * trans-expr.c (copyable_array_p): Consider user derived types without + allocatable components to be copyable. + 2007-01-18 Roger Sayle * trans-stmt.c (compute_overall_iter_number): Enhance to precompute diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index c6ebf3e8b31..3f186a1e02d 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3b88a022fec..dc33ec9f571 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-01-18 Roger Sayle + + * gfortran.dg/array_memcpy_4.f90: New test case. + 2007-01-18 Josh Conner 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 index 00000000000..0f8b5cb15b0 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/array_memcpy_4.f90 @@ -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" } }