OSDN Git Service

PR fortran/36059
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 May 2008 21:44:36 +0000 (21:44 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 14 May 2008 21:44:36 +0000 (21:44 +0000)
        * trans-decl.c (gfc_build_dummy_array_decl): Don't repack
        arrays that have the TARGET attribute.

        * gfortran.dg/repack_arrays_1.f90: New test.

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

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

index c38717c..c39b86e 100644 (file)
@@ -1,5 +1,11 @@
 2008-05-14  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
+       PR fortran/36059
+       * trans-decl.c (gfc_build_dummy_array_decl): Don't repack
+       arrays that have the TARGET attribute.
+
+2008-05-14  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
        PR fortran/36186
        * simplify.c (only_convert_cmplx_boz): New function.
        (gfc_simplify_cmplx, gfc_simplify_complex, gfc_simplify_dcmplx):
index 6e0b542..aa3712c 100644 (file)
@@ -733,7 +733,10 @@ gfc_build_dummy_array_decl (gfc_symbol * sym, tree dummy)
       /* Create a descriptorless array pointer.  */
       as = sym->as;
       packed = PACKED_NO;
-      if (!gfc_option.flag_repack_arrays)
+
+      /* Even when -frepack-arrays is used, symbols with TARGET attribute
+        are not repacked.  */
+      if (!gfc_option.flag_repack_arrays || sym->attr.target)
        {
          if (as->type == AS_ASSUMED_SIZE)
            packed = PACKED_FULL;
index 9abe367..02ef0b5 100644 (file)
@@ -1,5 +1,10 @@
 2008-05-14  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
+       PR fortran/36059
+       * gfortran.dg/repack_arrays_1.f90: New test.
+
+2008-05-14  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
        PR fortran/36186
        * gfortran.dg/boz_11.f90: New test.
        * gfortran.dg/boz_12.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/repack_arrays_1.f90 b/gcc/testsuite/gfortran.dg/repack_arrays_1.f90
new file mode 100644 (file)
index 0000000..adf20aa
--- /dev/null
@@ -0,0 +1,24 @@
+! { dg-do run }
+! { dg-options "-frepack-arrays" }
+!
+! Check that arrays marked with TARGET attribute are not repacked.
+!
+program test2
+   use iso_c_binding
+   implicit none
+   real, target :: x(7)
+   type(c_ptr) cp1, cp2
+
+   x = 42
+   if (.not. c_associated(c_loc(x(3)),point(x(::2)))) call abort
+contains
+  function point(x)
+    use iso_c_binding
+    real, intent(in), target :: x(:)
+    type(c_ptr) point
+    real, pointer :: p
+
+    p => x(2)
+    point = c_loc(p)
+  end function point
+end program test2