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

commit 3cb2c2fcdf3bd2f05afea27b6ccfb4734f6f88a0
Author: Jerry DeLisle <jvdeli...@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:

Reply via email to