// { dg-do compile { target c++11 } }
typedef enum omp_allocator_handle_t
: __UINTPTR_TYPE__
{
  omp_null_allocator = 0,
  omp_default_mem_alloc = 1,
  omp_large_cap_mem_alloc = 2,
  omp_const_mem_alloc = 3,
  omp_high_bw_mem_alloc = 4,
  omp_low_lat_mem_alloc = 5,
  omp_cgroup_mem_alloc = 6,
  omp_pteam_mem_alloc = 7,
  omp_thread_mem_alloc = 8,
  __omp_allocator_handle_t_max__ = __UINTPTR_MAX__
} omp_allocator_handle_t;
typedef enum omp_sync_hint_t {
omp_sync_hint_none = 0x0,
omp_lock_hint_none = omp_sync_hint_none,
omp_sync_hint_uncontended = 0x1,
omp_lock_hint_uncontended = omp_sync_hint_uncontended,
omp_sync_hint_contended = 0x2,
omp_lock_hint_contended = omp_sync_hint_contended,
omp_sync_hint_nonspeculative = 0x4,
omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative,
omp_sync_hint_speculative = 0x8,
omp_lock_hint_speculative = omp_sync_hint_speculative
} omp_sync_hint_t;
typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
  char __omp_depend_t__[2 * sizeof (void *)];
} omp_depend_t;
int t;
#pragma omp threadprivate (t)
#pragma omp declare target
int f, l, ll, r, r2;
void
foo (int d, int m, int i1, int i2, int p, int *idp, int s,
     int nte, int tl, int nth, int g, int nta, int fi, int pp, int *q, int ntm)
{
  [[omp::directive (distribute parallel for
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) order(concurrent) allocate (omp_default_mem_alloc:f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute parallel for simd
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    if (parallel: i2) if(simd: i1) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) nontemporal(ntm)
    safelen(8) simdlen(4) aligned(q: 32) order(concurrent) allocate (omp_default_mem_alloc:f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute simd
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    safelen(8) simdlen(4) aligned(q: 32) reduction(+:r) if(i1) nontemporal(ntm)
    order(concurrent) allocate (omp_default_mem_alloc:f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    allocate (omp_default_mem_alloc:f) order(concurrent))]]
  for (int i = 0; i < 64; i++)
    ll++;
}
void
qux (int p)
{
  [[omp::directive (loop bind(teams) order(concurrent)
    private (p) lastprivate (l) collapse(1) reduction(+:r))]]
  for (l = 0; l < 64; ++l)
    ll++;
}
#pragma omp end declare target
void
baz (int d, int m, int i1, int i2, int p, int *idp, int s,
     int nte, int tl, int nth, int g, int nta, int fi, int pp, int *q, int ntm)
{
  [[omp::directive (distribute parallel for
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) copyin(t) allocate (p))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute parallel for
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) order(concurrent) allocate (p))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute parallel for simd
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    if (parallel: i2) if(simd: i1) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) nontemporal(ntm)
    safelen(8) simdlen(4) aligned(q: 32) copyin(t) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute parallel for simd
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    if (parallel: i2) if(simd: i1) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) nontemporal(ntm)
    safelen(8) simdlen(4) aligned(q: 32) order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (distribute simd
    private (p) firstprivate (f) collapse(1) dist_schedule(static, 16)
    safelen(8) simdlen(4) aligned(q: 32) reduction(+:r) if(i1) nontemporal(ntm)
    order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (loop bind(parallel) order(concurrent)
    private (p) lastprivate (l) collapse(1) reduction(+:r))]]
  for (l = 0; l < 64; ++l)
    ll++;
}
void
bar (int d, int m, int i1, int i2, int i3, int p, int *idp, int hda, int s,
     int nte, int tl, int nth, int g, int nta, int fi, int pp, int *q, int *dd, int ntm,
     const char *msg, int n1, int n2)
{
  [[omp::directive (nothing)]];
  [[omp::directive (error at (execution) severity (warning) message (msg))]];
  [[omp::directive (for simd
    private (p) firstprivate (f) lastprivate (l) linear (ll:1) reduction(+:r) schedule(static, 4) collapse(1) nowait
    safelen(8) simdlen(4) aligned(q: 32) nontemporal(ntm) if(i1) order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (for
    private (p) firstprivate (f) lastprivate (l) linear (ll:1) reduction(+:r) schedule(static, 4) collapse(1) nowait
    order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (simd
    private (p) lastprivate (l) linear (ll:1) reduction(+:r) collapse(1) safelen(8) simdlen(4) aligned(q: 32)
    nontemporal(ntm) if(i1) order(concurrent))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel for
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) copyin(t) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) linear (ll:1) ordered schedule(static, 4) collapse(1) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel for
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) copyin(t) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) linear (ll:1) schedule(static, 4) collapse(1) order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel for simd
    private (p) firstprivate (f) if (i2) default(shared) shared(s) copyin(t) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) linear (ll:1) schedule(static, 4) collapse(1)
    safelen(8) simdlen(4) aligned(q: 32) nontemporal(ntm) order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel sections
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) copyin(t) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) allocate (f))]]
  {
    [[omp::directive (section)]]
    {}
    [[omp::sequence (omp::directive (section))]]
    {}
  }
  [[omp::directive (sections private (p) firstprivate (f) reduction(+:r) lastprivate (l) allocate (f) nowait)]]
  {
    ;
    [[omp::sequence (sequence (directive (section)))]]
    ;
    [[omp::directive (section)]]
    {}
  }
  [[omp::directive (barrier)]];
  [[omp::sequence (omp::directive (single private (p) firstprivate (f) allocate (f) nowait))]]
    ;
  [[omp::sequence (directive (barrier))]];
  [[omp::sequence (directive (parallel private (p)),
    omp::directive (single copyprivate (p) firstprivate (f) allocate (f)))]]
    p = 6;
  [[omp::directive (target parallel
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    nowait depend(inout: dd[0]) allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
    ;
  [[omp::directive (target parallel for
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) linear (ll:1) ordered schedule(static, 4) collapse(1) nowait depend(inout: dd[0])
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (target parallel for
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) linear (ll:1) schedule(static, 4) collapse(1) nowait depend(inout: dd[0]) order(concurrent)
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (omp::directive (target parallel for simd
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) linear (ll:1) schedule(static, 4) collapse(1)
    safelen(8) simdlen(4) aligned(q: 32) nowait depend(inout: dd[0]) nontemporal(ntm) if (simd: i3) order(concurrent)
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (target teams
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl) nowait depend(inout: dd[0])
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda)))]]
    ;
  [[omp::sequence (directive (target
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    nowait depend(inout: dd[0]) allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda)))]]
    ;
  [[omp::sequence (omp::directive (target teams distribute
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) order(concurrent)
    collapse(1) dist_schedule(static, 16) nowait depend(inout: dd[0]) allocate (omp_default_mem_alloc:f) in_reduction(+:r2)
    has_device_addr (hda)))]]
  for (int i = 0; i < 64; i++)
    ;
  [[omp::directive (target teams distribute parallel for
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) nowait depend(inout: dd[0]) order(concurrent)
     allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (target teams distribute parallel for simd
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) order(concurrent)
    safelen(8) simdlen(4) aligned(q: 32) nowait depend(inout: dd[0]) nontemporal(ntm) if (simd: i3)
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (target teams distribute simd
    device(d) map (tofrom: m) if (i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16) order(concurrent)
    safelen(8) simdlen(4) aligned(q: 32) nowait depend(inout: dd[0]) nontemporal(ntm)
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (target simd
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    safelen(8) simdlen(4) lastprivate (l) linear(ll: 1) aligned(q: 32) reduction(+:r)
    nowait depend(inout: dd[0]) nontemporal(ntm) if(simd:i3) order(concurrent)
    allocate (omp_default_mem_alloc:f) in_reduction(+:r2) has_device_addr (hda))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (taskgroup task_reduction(+:r2) allocate (r2)),
    omp::directive (taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) if(simd: i2) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) in_reduction(+:r2) nontemporal(ntm)
    order(concurrent) allocate (f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (omp::directive (taskgroup task_reduction(+:r) allocate (r)),
    directive (taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(i1) final(fi) mergeable nogroup priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) in_reduction(+:r) nontemporal(ntm)
    order(concurrent) allocate (f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (taskwait)]];
  [[omp::directive (taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) if(taskloop: i1) final(fi) priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(+:r) if (simd: i3) nontemporal(ntm)
    order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (taskgroup task_reduction(+:r2) allocate (r2)),
    omp::directive (taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) in_reduction(+:r2) allocate (f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (taskgroup task_reduction(+:r2) allocate (r2)),
    omp::directive (task
    private (p) firstprivate (f) shared (s) default(shared) untied if(task: i1) final(fi) mergeable priority (pp)
    in_reduction(+:r2) allocate (f)))]]
    ;
  [[omp::directive (taskyield)]];
  [[omp::directive (target data if (target data: i1) device(d) map (tofrom: m) use_device_ptr (q) use_device_addr (p))]]
  ;
  [[omp::directive (target enter data if (target enter data: i1) device(d) map (to: m) depend(inout: dd[0]) nowait)]]
  ;
  [[omp::directive (target exit data if (target exit data: i1) device(d) map (from: m) depend(inout: dd[0]) nowait)]]
  ;
  [[omp::directive (target update if (target update: i1) device(d) to (m) depend(inout: dd[0]) nowait)]]
  ;
  [[omp::directive (target update if (target update: i1) device(d) from (m) depend(inout: dd[0]) nowait)]]
  ;
  [[omp::directive (taskwait)]];
  [[omp::sequence (directive (target nowait depend(inout: dd[0]) in_reduction(+:r2)),
    directive (teams distribute
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16) allocate (omp_default_mem_alloc: f) order(concurrent)))]]
  for (int i = 0; i < 64; i++)
    ;
  [[omp::directive (teams
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    allocate (omp_default_mem_alloc: f))]]
    ;
  [[omp::sequence (omp::directive (target),
    omp::directive (teams distribute parallel for
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) order(concurrent) allocate (omp_default_mem_alloc: f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (target),
    directive (teams distribute parallel for simd
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) order(concurrent)
    safelen(8) simdlen(4) aligned(q: 32) if (simd: i3) nontemporal(ntm)
    allocate (omp_default_mem_alloc: f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (target),
    directive (teams distribute simd
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16) order(concurrent)
    safelen(8) simdlen(4) aligned(q: 32) if(i3) nontemporal(ntm)
    allocate (omp_default_mem_alloc: f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (teams distribute parallel for
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) copyin(t) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (teams distribute parallel for
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16) order(concurrent)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (teams distribute parallel for simd
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4)
    safelen(8) simdlen(4) aligned(q: 32) if (simd: i3) nontemporal(ntm) copyin(t)
    allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (teams distribute parallel for simd
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16)
    if (parallel: i2) num_threads (nth) proc_bind(spread)
    lastprivate (l) schedule(static, 4) order(concurrent)
    safelen(8) simdlen(4) aligned(q: 32) if (simd: i3) nontemporal(ntm)
    allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (teams distribute simd
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte-1:nte) thread_limit(tl)
    collapse(1) dist_schedule(static, 16) order(concurrent)
    safelen(8) simdlen(4) aligned(q: 32) if(i3) nontemporal(ntm) allocate(f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel master
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) reduction(+:r)
    num_threads (nth) proc_bind(spread) copyin(t) allocate (f))]]
    ;
  [[omp::directive (parallel masked
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) reduction(+:r)
    num_threads (nth) proc_bind(spread) copyin(t) allocate (f) filter (d))]]
    ;
  [[omp::directive (parallel
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) reduction(+:r)
    num_threads (nth) proc_bind(spread) copyin(t) allocate (f))]]
    ;
  [[omp::sequence (directive (taskgroup task_reduction (+:r2) allocate (r2)),
    omp::directive (master taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) in_reduction(+:r2) allocate (f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (taskgroup task_reduction (+:r2) allocate (r2)),
    omp::directive (masked taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) in_reduction(+:r2) allocate (f) filter (d)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (master)]];
  [[omp::directive (masked)]];
  [[omp::directive (masked filter (d))]];
  [[omp::sequence (omp::directive (taskgroup task_reduction (+:r2) allocate (r2)),
    directive (master taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) if(simd: i2) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) in_reduction(+:r2) nontemporal(ntm)
    order(concurrent) allocate (f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (omp::directive (taskgroup task_reduction (+:r2) allocate (r2)),
    directive (masked taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) if(simd: i2) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) in_reduction(+:r2) nontemporal(ntm)
    order(concurrent) allocate (f) filter (d)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel master taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) if (parallel: i2) num_threads (nth) proc_bind(spread) copyin(t) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel masked taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) if (parallel: i2) num_threads (nth) proc_bind(spread) copyin(t) allocate (f) filter (d))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel master taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) if(simd: i2) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) nontemporal(ntm) if (parallel: i2) num_threads (nth) proc_bind(spread) copyin(t)
    order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel masked taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) grainsize (g) collapse(1) untied if(taskloop: i1) if(simd: i2) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) nontemporal(ntm) if (parallel: i2) num_threads (nth) proc_bind(spread) copyin(t)
    order(concurrent) allocate (f) filter (d))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (taskgroup task_reduction (+:r2) allocate (r2)),
    directive (master taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) in_reduction(+:r2)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (directive (taskgroup task_reduction (+:r2) allocate (r2)),
    directive (masked taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) in_reduction(+:r2) filter (d)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (omp::directive (taskgroup task_reduction (+:r2) allocate (r2)),
    omp::directive (master taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) in_reduction(+:r2) nontemporal(ntm)
    order(concurrent) allocate (f)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::sequence (omp::directive (taskgroup task_reduction (+:r2) allocate (r2)),
    omp::directive (masked taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) in_reduction(+:r2) nontemporal(ntm)
    order(concurrent) allocate (f) filter (d)))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel master taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) num_threads (nth) proc_bind(spread) copyin(t) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel masked taskloop
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    reduction(default, +:r) num_threads (nth) proc_bind(spread) copyin(t) allocate (f) filter (d))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel master taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) nontemporal(ntm) num_threads (nth) proc_bind(spread) copyin(t)
    order(concurrent) allocate (f))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (parallel masked taskloop simd
    private (p) firstprivate (f) lastprivate (l) shared (s) default(shared) num_tasks (nta) collapse(1) untied if(i1) final(fi) mergeable priority (pp)
    safelen(8) simdlen(4) linear(ll: 1) aligned(q: 32) reduction(default, +:r) nontemporal(ntm) num_threads (nth) proc_bind(spread) copyin(t)
    order(concurrent) allocate (f) filter (d))]]
  for (int i = 0; i < 64; i++)
    ll++;
  [[omp::directive (loop bind(thread) order(concurrent)
    private (p) lastprivate (l) collapse(1) reduction(+:r))]]
  for (l = 0; l < 64; ++l)
    ll++;
  [[omp::directive (parallel loop
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) copyin(t) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) collapse(1) bind(parallel) order(concurrent) allocate (f))]]
  for (l = 0; l < 64; l++)
    ll++;
  [[omp::directive (parallel loop
    private (p) firstprivate (f) if (parallel: i2) default(shared) shared(s) copyin(t) reduction(+:r) num_threads (nth) proc_bind(spread)
    lastprivate (l) collapse(1) allocate (f))]]
  for (l = 0; l < 64; l++)
    ll++;
  [[omp::directive (teams loop
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl)
    collapse(1) lastprivate (l) bind(teams) allocate (f))]]
  for (l = 0; l < 64; ++l)
    ;
  [[omp::directive (teams loop
    private(p) firstprivate (f) shared(s) default(shared) reduction(+:r) num_teams(nte - 1:nte) thread_limit(tl)
    collapse(1) lastprivate (l) order(concurrent) allocate (f))]]
  for (l = 0; l < 64; ++l)
    ;
  [[omp::directive (target parallel loop
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    nowait depend(inout: dd[0]) lastprivate (l) bind(parallel) order(concurrent) collapse(1)
    allocate (omp_default_mem_alloc: f) in_reduction(+:r2) has_device_addr (hda))]]
  for (l = 0; l < 64; ++l)
    ;
  [[omp::directive (target parallel loop
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    if (parallel: i2) default(shared) shared(s) reduction(+:r) num_threads (nth) proc_bind(spread)
    nowait depend(inout: dd[0]) lastprivate (l) order(concurrent) collapse(1)
    allocate (omp_default_mem_alloc: f) in_reduction(+:r2) has_device_addr (hda))]]
  for (l = 0; l < 64; ++l)
    ;
  [[omp::directive (target teams loop
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte) thread_limit(tl) nowait depend(inout: dd[0])
    lastprivate (l) bind(teams) collapse(1)
    allocate (omp_default_mem_alloc: f) in_reduction(+:r2) has_device_addr (hda))]]
  for (l = 0; l < 64; ++l)
    ;
  [[omp::directive (target teams loop
    device(d) map (tofrom: m) if (target: i1) private (p) firstprivate (f) defaultmap(tofrom: scalar) is_device_ptr (idp)
    shared(s) default(shared) reduction(+:r) num_teams(nte - 1 : nte) thread_limit(tl) nowait depend(inout: dd[0])
    lastprivate (l) order(concurrent) collapse(1)
    allocate (omp_default_mem_alloc: f) in_reduction(+:r2) has_device_addr (hda))]]
  for (l = 0; l < 64; ++l)
    ;
  [[omp::directive (critical)]] {
  }
  [[omp::directive (critical (foobar) hint(omp_sync_hint_none))]]
  ;
  [[omp::directive (taskwait depend (inout: dd[0]))]]
  ;
  [[omp::directive (taskgroup task_reduction(+:r2) allocate (r2))]]
  ;
  [[omp::directive (atomic update seq_cst hint(omp_sync_hint_none))]]
  p++;
  [[omp::directive (atomic read hint(omp_sync_hint_none) relaxed)]]
  f = p;
  [[omp::directive (atomic write release hint(omp_sync_hint_none))]]
  p = f;
  [[omp::directive (flush)]]
  ;
  [[omp::directive (flush acq_rel)]]
  ;
  [[omp::directive (flush acquire)]]
  ;
  [[omp::directive (flush release)]]
  ;
  [[omp::directive (flush seq_cst)]]
  ;
  [[omp::directive (flush (p, f))]]
  ;
  [[omp::directive (simd
    private (p) lastprivate (l) linear (ll:1) reduction(+:r) collapse(1) safelen(8) simdlen(4) aligned(q: 32)
    nontemporal(ntm) if(i1))]]
  for (int i = 0; i < 64; i++)
    [[omp::directive (ordered simd)]]
      ll++;
  [[omp::directive (for
    private (p) firstprivate (f) lastprivate (l) linear (ll:1) reduction(+:r) schedule(static, 4) collapse(1) nowait
    ordered allocate (f))]]
  for (int i = 0; i < 64; i++)
    [[omp::directive (ordered threads)]]
      ll++;
  [[omp::directive(for ordered (1))]]
  for (l = 0; l < 64; l++)
    {
      [[omp::directive(ordered depend (sink: l - 1))]];
      [[omp::directive(ordered depend (source))]];
    }
  extern omp_depend_t depobj;
  [[omp::directive (depobj(depobj) depend(in : dd[0]))]];
  [[omp::directive (parallel)]] {
    if (p) {
      [[omp::directive (cancel parallel)]];
    } else {
      [[omp::directive (cancellation point parallel)]];
    }
  }
  [[omp::directive (scope private (p) firstprivate (f) reduction(+:r) nowait
    allocate (omp_default_mem_alloc: r))]]
    ;
  [[omp::directive (scope private (p) firstprivate (f) reduction(task, +:r)
    allocate (omp_default_mem_alloc: f))]]
    ;
  extern int t2;
  [[omp::directive (threadprivate (t2))]];
  extern int t2;
  [[omp::directive (declare reduction (dr: int: omp_out += omp_in) initializer (omp_priv = 0))]]
  ;
  [[omp::directive (parallel)]]
  if (0)
    ;
  [[omp::directive (parallel)]]
  while (0)
    ;
  [[omp::directive (parallel)]]
  switch (0) { case 1: break; default: break; }
  [[omp::directive (assume no_openmp no_openmp_routines no_parallelism
			   absent (atomic, barrier, cancel, cancellation point)
			   absent (critical, depobj)
			   absent (distribute, flush, loop, masked, master, nothing, ordered)
			   absent (parallel, scan, scope, section, sections, simd, single, task)
			   absent (taskgroup, taskloop, taskwait, taskyield)
			   absent (target, teams, for, error) holds (n1 < n2))]]
  if (0)
    ;
  [[omp::sequence (omp::directive (assume contains (simd)),
		   omp::directive (for simd))]]
  for (int i = 0; i < 64; i++)
    ;
}
void corge1 ();
void
corge ()
{
  [[omp::directive (declare variant (corge1) match (construct={parallel,for}))]]
  extern void corge2 ();
  [[omp::sequence (directive (parallel), directive (for))]]
  for (int i = 0; i < 5; i++)
    corge2 ();
  [[omp::directive (declare simd simdlen(4) linear(l) aligned(p:4) uniform(p) inbranch),
    omp::directive (declare simd simdlen(8) notinbranch)]]
  extern int corge3 (int l, int *p);
  [[omp::directive (declare simd simdlen(4) linear(l) aligned(p:4) uniform(p) inbranch),
    omp::directive (declare simd simdlen(8) notinbranch)]]
  extern int corge4 (int l, int *p);
  [[omp::sequence (directive (declare simd simdlen(4) linear(l) aligned(p:4) uniform(p) inbranch),
    omp::directive (declare simd simdlen(8) notinbranch))]]
  extern int corge5 (int l, int *p);
  [[omp::directive (declare target)]];
  extern void corge6 ();
  [[omp::directive (end declare target)]];
}
int
garply (int a, int *c, int *d, int *e, int *f)
{
  int i;
  [[omp::directive (simd reduction (inscan, +: a))]]
  for (i = 0; i < 64; i++)
    {
      d[i] = a;
      [[omp::directive (scan exclusive (a))]]
      a += c[i];
    }
  [[omp::directive (simd reduction (inscan, +: a))]]
  for (i = 0; i < 64; i++)
    {
      a += c[i];
      [[omp::sequence (omp::sequence (omp::directive (scan inclusive (a))))]]
      d[i] = a;
    }
  return a;
}