aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-array.cc
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2025-03-06 15:14:24 +0100
committerAndre Vehreschild <vehre@gcc.gnu.org>2025-03-12 14:34:39 +0100
commitbaa9b2b8d2eef7177118652d93ca0e7c933ba174 (patch)
tree05ee062e27555cf0f9628478ff6b092d7c5cd31d /gcc/fortran/trans-array.cc
parent52e297a3aa91ade5ee248fb728cf3b2f0ef320e7 (diff)
downloadgcc-baa9b2b8d2eef7177118652d93ca0e7c933ba174.zip
gcc-baa9b2b8d2eef7177118652d93ca0e7c933ba174.tar.gz
gcc-baa9b2b8d2eef7177118652d93ca0e7c933ba174.tar.bz2
Fortran: Add F2018 TEAM_NUMBER to coindexed expressions [PR98903]
Add missing parsing and code generation for a[..., TEAM_NUMBER=...] as defined from F2015 onwards. Because F2015 is not used as dedicated standard in GFortran add it to the F2018 standard feature set. PR fortran/98903 gcc/fortran/ChangeLog: * array.cc (gfc_copy_array_ref): Copy team, team_type and stat. (match_team_or_stat): Match a single team(_number)= or stat=. (gfc_match_array_ref): Add switching to image_selector_parsing and error handling when indices come after named arguments. * coarray.cc (move_coarray_ref): Move also team_type. * expr.cc (gfc_free_ref_list): Free team and stat expression. (gfc_find_team_co): Find team or team_number in array-ref. * gfortran.h (enum gfc_array_ref_team_type): New enum to distinguish unset, team or team_number expression. (gfc_find_team_co): Default searching to team= expressions. * resolve.cc (resolve_array_ref): Check for type correctness of team(_number) and stats in coindices. * trans-array.cc (gfc_conv_array_ref): Ensure stat is cleared when fcoarray=single is used. * trans-intrinsic.cc (conv_stat_and_team): Including team_number in conversion. (gfc_conv_intrinsic_caf_get): Propagate team_number to ABI routine. (conv_caf_send_to_remote): Same. (conv_caf_sendget): Same. gcc/testsuite/ChangeLog: * gfortran.dg/coarray/coindexed_2.f90: New test. * gfortran.dg/coarray/coindexed_3.f08: New test. * gfortran.dg/coarray/coindexed_4.f08: New test.
Diffstat (limited to 'gcc/fortran/trans-array.cc')
-rw-r--r--gcc/fortran/trans-array.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 9250304..8ab290b 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -4198,6 +4198,15 @@ gfc_conv_array_ref (gfc_se * se, gfc_array_ref * ar, gfc_expr *expr,
gfc_symbol * sym = expr->symtree->n.sym;
char *var_name = NULL;
+ if (ar->stat)
+ {
+ gfc_se statse;
+
+ gfc_init_se (&statse, NULL);
+ gfc_conv_expr_lhs (&statse, ar->stat);
+ gfc_add_block_to_block (&se->pre, &statse.pre);
+ gfc_add_modify (&se->pre, statse.expr, integer_zero_node);
+ }
if (ar->dimen == 0)
{
gcc_assert (ar->codimen || sym->attr.select_rank_temporary