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.

Reply via email to