[gcc/devel/gfortran-test] Revert "Fortran: Andre's tweak"

Jerry DeLisle jvdelisle@gcc.gnu.org
Tue Sep 2 23:00:52 GMT 2025


https://gcc.gnu.org/g:3cb2c2fcdf3bd2f05afea27b6ccfb4734f6f88a0

commit 3cb2c2fcdf3bd2f05afea27b6ccfb4734f6f88a0
Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date:   Tue Sep 2 15:49:09 2025 -0700

    Revert "Fortran: Andre's tweak"
    
    This reverts commit cb4b73da237153871fb840a3a31a79354933a8bb.

Diff:
---
 gcc/fortran/coarray.cc | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/gcc/fortran/coarray.cc b/gcc/fortran/coarray.cc
index b3271e56ad20..c611b5399687 100644
--- a/gcc/fortran/coarray.cc
+++ b/gcc/fortran/coarray.cc
@@ -696,6 +696,22 @@ check_add_new_component (gfc_symbol *type, gfc_expr *e, gfc_symbol *add_data)
 	    check_add_new_component (type, actual->expr, add_data);
 	  break;
 	case EXPR_FUNCTION:
+	  if ((e->symtree->n.sym->attr.pure
+	       && e->symtree->n.sym->attr.elemental)
+	      || (e->value.function.isym && e->value.function.isym->pure
+		  && e->value.function.isym->elemental))
+	    {
+	      /* Only allow pure and elemental function calls in a coarray
+		 accessor, because all other may have side effects or access
+		 pointers, which may not be possible in the accessor running on
+		 another host.  */
+	      for (gfc_actual_arglist *actual = e->value.function.actual;
+		   actual; actual = actual->next)
+		check_add_new_component (type, actual->expr, add_data);
+	    }
+	  else
+	    /* Extract the expression, evaluate it and add a temporary with its
+	       value to the helper structure.  */
 	    check_add_new_comp_handle_array (e, type, add_data);
 	  break;
 	case EXPR_VARIABLE:


More information about the Gcc-cvs mailing list