diff options
author | Andre Vehreschild <vehre@gcc.gnu.org> | 2025-03-06 15:14:24 +0100 |
---|---|---|
committer | Andre Vehreschild <vehre@gcc.gnu.org> | 2025-03-12 14:34:39 +0100 |
commit | baa9b2b8d2eef7177118652d93ca0e7c933ba174 (patch) | |
tree | 05ee062e27555cf0f9628478ff6b092d7c5cd31d /gcc/fortran/trans-array.cc | |
parent | 52e297a3aa91ade5ee248fb728cf3b2f0ef320e7 (diff) | |
download | gcc-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.cc | 9 |
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 |