Nathan, Thanks for taking an interesting in improving gfortran. A scan of the bug database certainly suggests we can use the help particularly with coarray bugs. Before we can go much further, do you have a copyright assignment on file the FSF. If not, please see https://gcc.gnu.org/contribute.html
-- steve On Wed, Jan 16, 2019 at 06:16:12PM -0600, Nathan Weeks wrote: > Hi all, > > To facilitate more complete Fortran 2018 failed images support, I'm > particularly interested in interested in seeing PR 87939 eventually > resolved (i.e., allow STAT= and ERRMSG= specifiers in FORM TEAM, > CHANGE TEAM, SYNC TEAM, END TEAM, and CRITICAL statements). To get the > ball rolling (I realize that the boat has been missed for this kind of > change in GCC 9 trunk), I've attempted the following patch (which, > since it was convenient to do while modifying FORM TEAM-related code, > also adds the NEW_INDEX= specifier to the FORM TEAM statement as > desired in PR 87326). > > This is the first gfortran patch I've attempted, and I certainly could > have made some noob mistakes, so verbose feedback would be > appreciated. > > A few comments: > > * In resolve.c, the newly-added functions that type check STAT= and > ERRMSG= arguments for FORM TEAM, CHANGE TEAM, and SYNC TEAM also add > (previously-absent) type checking for their TEAM_TYPE arguments. If > it's more appropriate, I could separate this change into its own PR. > > * The existing -fcoarray=lib implementation of CRITICAL acquires a > LOCK on a lock variable on image 1 (in the current team). However, a > CRITICAL statement stat-value of STAT_FAILED_IMAGE (i.e., the image > that enter the CRITICAL construct failed) is analogous to the LOCK > stat-value of STAT_UNLOCKED_FAILED_IMAGE (i.e., the image that > acquired the lock failed---see section 11.6.11 (7 & 10) in Fortran > 2018 draft N2146), whereas a LOCK STAT_FAILED_IMAGE means the image on > which the lock variable resides has failed (no analog in the CRITICAL > statement, which is oblivious to this underlying implementation). So > in addition to adding the stat value STAT_UNLOCKED_FAILED_IMAGE to > libgfortran.h & libcaf.h, I had CRITICAL swap a LOCK > STAT_UNLOCKED_FAILED_IMAGE for STAT_FAILED_IMAGE, and (perhaps > unimaginatively) a LOCK STAT_FAILED_IMAGE for > STAT_UNLOCKED_FAILED_IMAGE (which, while it has no defined meaning for > a CRITICAL statement, fits the definition of a "processor-dependent > value other than STAT_FAILED_IMAGE"). > > * A couple negative tests for syntax errors (coarray_critical_2.f90 & > team_end_2.f90) fail due to spurious "Error: Expecting END PROGRAM > statement at (1)" errors that are also emitted by gfortran 8.2.0 as > well. > > Thanks, > > -- > Nathan > > frontend: > > 2019-01-16 Nathan Weeks <we...@iastate.edu> > > PR fortran/87939 > PR fortran/87326 > * gfortran.h: Add an additional gfc_expr member to struct gfc_code. > * libcaf.h: Add support for STAT_UNLOCKED_FAILED_IMAGE. > * match.c (gfc_match_critical): Add STAT= and ERRMSG=. > (gfc_match_change_team): Likewise. > (gfc_match_end_team): Likewise. > (gfc_match_sync_team): Likewise. > (gfc_match_form_team): Add STAT=, ERRMSG=, and NEW_INDEX=. > * resolve.c (resolve_form_team): New. Type check team-variable > argument in > addition to new STAT= and ERRMSG= arguments. > (resolve_change_sync_team): New. Adds type checking for team-value > argument. > (resolve_end_team): New. > (resolve_critical): Add STAT= and ERRMSG=. > * trans-decl.c (gfc_build_builtin_function_decls): Additional stat, > errmsg, and errmsg_len arguments to _gfortran_caf_form_team(), > _gfortran_caf_change_team(), _gfortran_caf_end_team(), and > _gfortran_caf_sync_team(), and additional new_index argument to > _gfortran_caf_form_team(). > * trans-stmt.c (gfc_trans_form_team): Support STAT=, ERRMSG=, and > NEW_INDEX=. > (gfc_trans_change_team): Support STAT= and ERRMSG=. > (gfc_trans_end_team): Likewise. > (gfc_trans_sync_team): Likewise. > (gfc_trans_critical): Likewise. Also support assigning > STAT_FAILED_IMAGE > to a stat-variable. > > libgfortran: > > 2019-01-16 Nathan Weeks <we...@iastate.edu> > > PR fortran/87939 > * libgfortran.h: Add support for STAT_UNLOCKED_FAILED_IMAGE > > testsuite: > > 2019-01-16 Nathan Weeks <we...@iastate.edu> > > PR fortran/87939 > PR fortran/87326 > * gfortran.dg/coarray_critical_2.f90: New test > * gfortran.dg/coarray_critical_3.f90: New test > * gfortran.dg/coarray_critical_4.f90: New test > * gfortran.dg/team_change_2.f90: New test > * gfortran.dg/team_change_3.f90: New test > * gfortran.dg/team_end_2.f90: New test > * gfortran.dg/team_end_3.f90: New test > * gfortran.dg/team_form_2.f90: New test > * gfortran.dg/team_form_3.f90: New test > * gfortran.dg/team_sync_1.f90: New test > * gfortran.dg/team_sync_2.f90: New test -- Steve 20170425 https://www.youtube.com/watch?v=VWUpyCsUKR4 20161221 https://www.youtube.com/watch?v=IbCHE-hONow