]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: Fix coarray in associate not linking [PR85510]
authorAndre Vehreschild <vehre@gcc.gnu.org>
Mon, 22 Jul 2024 13:31:37 +0000 (15:31 +0200)
committerAndre Vehreschild <vehre@gcc.gnu.org>
Mon, 12 Aug 2024 08:44:35 +0000 (10:44 +0200)
PR fortran/85510

gcc/fortran/ChangeLog:

* resolve.cc (resolve_variable): Mark the variable as host
associated only, when it is not in an associate block.
* trans-decl.cc (generate_coarray_init): Remove incorrect unused
flag on parameter.

gcc/testsuite/ChangeLog:

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

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

index eb3085a05ca25f746d1c52849c98d6932d47451f..8e88aac2fe0e7630b964e8a36ae2aca7cf986a23 100644 (file)
@@ -6114,10 +6114,12 @@ resolve_variable (gfc_expr *e)
   /* If a symbol has been host_associated mark it.  This is used latter,
      to identify if aliasing is possible via host association.  */
   if (sym->attr.flavor == FL_VARIABLE
-       && gfc_current_ns->parent
-       && (gfc_current_ns->parent == sym->ns
-             || (gfc_current_ns->parent->parent
-                   && gfc_current_ns->parent->parent == sym->ns)))
+      && (!sym->ns->code || sym->ns->code->op != EXEC_BLOCK
+         || !sym->ns->code->ext.block.assoc)
+      && gfc_current_ns->parent
+      && (gfc_current_ns->parent == sym->ns
+         || (gfc_current_ns->parent->parent
+             && gfc_current_ns->parent->parent == sym->ns)))
     sym->attr.host_assoc = 1;
 
   if (gfc_current_ns->proc_name
index ca6a515a1800a5760e128dba90d8ffbd29f6c0f5..6692ac7ef4c3c6252b048cbe0770dd6148c99bb0 100644 (file)
@@ -5950,7 +5950,7 @@ generate_coarray_sym_init (gfc_symbol *sym)
    coarrays.  */
 
 static void
-generate_coarray_init (gfc_namespace * ns __attribute((unused)))
+generate_coarray_init (gfc_namespace *ns)
 {
   tree fndecl, tmp, decl, save_fn_decl;
 
diff --git a/gcc/testsuite/gfortran.dg/coarray/pr85510.f90 b/gcc/testsuite/gfortran.dg/coarray/pr85510.f90
new file mode 100644 (file)
index 0000000..c6777ca
--- /dev/null
@@ -0,0 +1,19 @@
+!{ dg-do run }
+
+! Contributed by Damian Rouson  <damian@archaeologic.codes>
+! Check that PR fortran/85510 links.
+
+module foo
+contains
+  subroutine bar()
+    integer, save :: i[*] = 1
+    associate(n=>1)
+      if (i[1] /= 1) stop 1
+    end associate
+  end subroutine
+end module
+
+use foo
+call bar()
+end
+