]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: Assign allocated caf-memory to scalar members [PR84870]
authorAndre Vehreschild <vehre@gcc.gnu.org>
Thu, 19 Sep 2024 13:09:52 +0000 (15:09 +0200)
committerAndre Vehreschild <vehre@gcc.gnu.org>
Tue, 24 Sep 2024 11:15:37 +0000 (13:15 +0200)
Allocating a coarray required an array-descriptor.  For scalars a
temporary descriptor was created.  Assigning the allocated memory from
the temporary descriptor back to the scalar is now added.

gcc/fortran/ChangeLog:

PR fortran/84870

* trans-array.cc (duplicate_allocatable_coarray): For scalar
allocatable components the memory allocated is now assigned to
the component's pointer.

gcc/testsuite/ChangeLog:

* gfortran.dg/coarray/alloc_comp_10.f90: New test.

gcc/fortran/trans-array.cc
gcc/testsuite/gfortran.dg/coarray/alloc_comp_10.f90 [new file with mode: 0644]

index 7d8274ab57187671c4fd3d0066a502b960edae63..0b8ef0b5e018f943e0bb8af81814d08f6e08c32d 100644 (file)
@@ -9505,6 +9505,7 @@ duplicate_allocatable_coarray (tree dest, tree dest_tok, tree src, tree type,
                                  gfc_build_addr_expr (NULL_TREE, dest_tok),
                                  NULL_TREE, NULL_TREE, NULL_TREE,
                                  GFC_CAF_COARRAY_ALLOC_REGISTER_ONLY);
+      gfc_add_modify (&block, dest, gfc_conv_descriptor_data_get (dummy_desc));
       null_data = gfc_finish_block (&block);
 
       gfc_init_block (&block);
@@ -9514,6 +9515,7 @@ duplicate_allocatable_coarray (tree dest, tree dest_tok, tree src, tree type,
                                  gfc_build_addr_expr (NULL_TREE, dest_tok),
                                  NULL_TREE, NULL_TREE, NULL_TREE,
                                  GFC_CAF_COARRAY_ALLOC);
+      gfc_add_modify (&block, dest, gfc_conv_descriptor_data_get (dummy_desc));
 
       tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
       tmp = build_call_expr_loc (input_location, tmp, 3, dest, src,
diff --git a/gcc/testsuite/gfortran.dg/coarray/alloc_comp_10.f90 b/gcc/testsuite/gfortran.dg/coarray/alloc_comp_10.f90
new file mode 100644 (file)
index 0000000..a31d005
--- /dev/null
@@ -0,0 +1,24 @@
+!{ dg-do run }
+
+! Check that copying of memory for allocated scalar is assigned
+! to coarray object.
+
+! Contributed by G. Steinmetz  <gscfq@t-online.de>
+
+program p
+  type t
+    integer, allocatable :: a
+  end type
+  type t2
+    type(t), allocatable :: b
+  end type
+  type(t2) :: x, y[*]
+
+  x%b = t(1)
+  y = x
+  y%b%a = 2
+
+  if (x%b%a /= 1) stop 1
+  if (y%b%a /= 2) stop 2
+end
+