PATCH 11/22] Coarray caf_shmem final patch set
Jerry D <[email protected]>
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
Ref: https://gcc.gnu.org/pipermail/fortran/2026-February/063551.html See attached. Awaiting approval.
caf_shmem-11-of-22.patch
(text/x-patch, 1.7 KB)
From 6efe898d9fd0176457cd71d41acfe9aeec9d9a12 Mon Sep 17 00:00:00 2001 From: Andre Vehreschild <[email protected]> Date: Wed, 4 Feb 2026 13:40:41 +0100 Subject: [PATCH] Fortran: Fix coarray assignment when rhs is complicated. PR fortran/121360 gcc/fortran/ChangeLog: * resolve.cc: Introduce temporary holding rhs when lhs is a coarray expresssion. --- gcc/fortran/resolve.cc | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc index 655db8a1c9c..2e7d3962194 100644 --- a/gcc/fortran/resolve.cc +++ b/gcc/fortran/resolve.cc @@ -14264,10 +14264,33 @@ start: code->ext.actual = gfc_get_actual_arglist (); code->ext.actual->expr = code->expr1; code->ext.actual->next = gfc_get_actual_arglist (); - code->ext.actual->next->expr = code->expr2; + if (code->expr2->expr_type != EXPR_VARIABLE + && code->expr2->expr_type != EXPR_CONSTANT) + { + /* Convert assignments of expr1[...] = expr2 into + tvar = expr2 + expr1[...] = tvar + when expr2 is not trivial. */ + gfc_expr *tvar = get_temp_from_expr (code->expr2, ns); + gfc_code next_code = *code; + gfc_code *rhs_code + = build_assignment (EXEC_ASSIGN, tvar, code->expr2, NULL, + NULL, code->expr2->where); + *code = *rhs_code; + code->next = rhs_code; + *rhs_code = next_code; + + rhs_code->ext.actual->next->expr = tvar; + rhs_code->expr1 = NULL; + rhs_code->expr2 = NULL; + } + else + { + code->ext.actual->next->expr = code->expr2; - code->expr1 = NULL; - code->expr2 = NULL; + code->expr1 = NULL; + code->expr2 = NULL; + } break; } -- 2.53.0