https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101602
--- Comment #4 from Marshall Ward <marshall.ward at gmail dot com> --- Thank you Michael, that is very informative, particularly with respect to LOCAL_INIT vs FIRSTPRIVATE. If we could just get support for LOCAL, then we may be to start using do-concurrent in our production codes. Perhaps there is a possibility of only adding support for LOCAL and SHARED, and raising an error if LOCAL_INIT appears? I have no experience with the GCC source, but I can see where this should appear in the parser: diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc index ba23bcd9692..439839295a1 100644 --- a/gcc/fortran/match.cc +++ b/gcc/fortran/match.cc @@ -2642,36 +2642,38 @@ gfc_match_do (void) if (gfc_match (" concurrent") == MATCH_YES) { gfc_forall_iterator *head; gfc_expr *mask; if (!gfc_notify_std (GFC_STD_F2008, "DO CONCURRENT construct at %C")) return MATCH_ERROR; mask = NULL; head = NULL; m = match_forall_header (&head, &mask); if (m == MATCH_NO) return m; if (m == MATCH_ERROR) goto concurr_cleanup; + /* TODO: Parse local, local_init, shared */ + if (gfc_match_eos () != MATCH_YES) goto concurr_cleanup; if (label != NULL && !gfc_reference_st_label (label, ST_LABEL_DO_TARGET)) goto concurr_cleanup; new_st.label1 = label; new_st.op = EXEC_DO_CONCURRENT; new_st.expr1 = mask; new_st.ext.forall_iterator = head; return MATCH_YES; concurr_cleanup: gfc_syntax_error (ST_DO); gfc_free_expr (mask); gfc_free_forall_iterator (head); I'm a little lost on how to associate these blocks with OpenMP constructs, however.