Index: ordered.c
===================================================================
--- ordered.c	(revision 181770)
+++ ordered.c	(working copy)
@@ -199,6 +199,9 @@ gomp_ordered_sync (void)
   if (team == NULL || team->nthreads == 1)
     return;
 
+  /* There is an implicit flush on entry to an ordered region. */
+  __atomic_thread_fence (MEMMODEL_RELEASE);
+
   /* ??? I believe it to be safe to access this data without taking the
      ws->lock.  The only presumed race condition is with the previous
      thread on the queue incrementing ordered_cur such that it points
Index: critical.c
===================================================================
--- critical.c	(revision 181770)
+++ critical.c	(working copy)
@@ -33,6 +33,8 @@ static gomp_mutex_t default_lock;
 void
 GOMP_critical_start (void)
 {
+  /* There is an implicit flush on entry to a critical region. */
+  __atomic_thread_fence (MEMMODEL_RELEASE);
   gomp_mutex_lock (&default_lock);
 }
 
