int foo (int, int, int *);
int bar (int, int, int *);
int foobar (int, int, int *);
#pragma omp declare variant (foo) \
  match (construct={parallel,for},\
	 device={isa(avx512f,avx512vl),kind(host,cpu)},\
	 implementation={vendor(score(0):gnu),unified_shared_memory},\
	 user={condition(score(0):0)})
#pragma omp declare variant (foo) \
  match (construct={parallel,for},\
	 device={isa(avx512f,avx512vl),kind(host,cpu)},\
	 implementation={vendor(score(0):gnu),self_maps},\
	 user={condition(score(0):0)})
#pragma omp declare variant (bar) \
  match (device={arch(x86_64,powerpc64),isa(avx512f,popcntb)}, \
	 implementation={atomic_default_mem_order(seq_cst),made_up_selector("foo", 13, "bar")}, \
	 user={condition(3-3)})
/* { dg-warning "unknown selector 'made_up_selector'" "" { target *-*-* } .-2 } */
int baz (int, int, int *);

int
qux (void)
{
  int i = 3;
  return baz (1, 2, &i);
}

int quux (int);

void
corge (void)
{
  int i;
  #pragma omp declare variant (quux) match (construct={parallel,for})
  extern int waldo (int);
  waldo (5);
  #pragma omp parallel for
  for (i = 0; i < 3; i++)
    waldo (6);
  #pragma omp parallel
  #pragma omp taskgroup
  #pragma omp for
  for (i = 0; i < 3; i++)
    waldo (7);
  #pragma omp parallel
  #pragma omp master    
  waldo (8);
}

#pragma omp declare variant (bar) match \
  (implementation={atomic_default_mem_order(relaxed), \
		   unified_address, unified_shared_memory, \
		   dynamic_allocators, reverse_offload})
int baz2 (int x, int y, int *z)
{
  return x + y + *z;
}

#pragma omp declare variant (bar) match \
  (implementation={atomic_default_mem_order(score(3): acq_rel)})
int baz3 (int, int, int *);
