/* { dg-additional-options "-fdump-tree-gimple" } */

#include <stdint.h>
#include <omp.h>

int
main ()
{
  int x, *xbuf[10];
  omp_allocator_handle_t my_alloc;
  const omp_alloctrait_t trait[1]= {{omp_atk_alignment,128}};

  #pragma omp target uses_allocators(omp_low_lat_mem_alloc) map(tofrom: x, xbuf) defaultmap(none)
    #pragma omp parallel allocate(allocator(omp_low_lat_mem_alloc), align(128): x, xbuf) if(0) firstprivate(x, xbuf)
      {
	if ((uintptr_t) &x % 128 != 0)
	  __builtin_abort ();
	if ((uintptr_t) xbuf % 128 != 0)
	  __builtin_abort ();
      }

  my_alloc = (omp_allocator_handle_t) 0xABCD;

  #pragma omp target uses_allocators(traits(trait): my_alloc) defaultmap(none) map(tofrom: x, xbuf)
    #pragma omp parallel allocate(allocator(my_alloc): x, xbuf) if(0) firstprivate(x, xbuf)
      {
	if ((uintptr_t) &x % 128 != 0)
	  __builtin_abort ();
	if ((uintptr_t) xbuf % 128 != 0)
	  __builtin_abort ();
      }

  if (my_alloc != (omp_allocator_handle_t) 0xABCD)
    __builtin_abort ();

  /* The following creates an allocator with empty traits + default mem space. */
  #pragma omp target uses_allocators(my_alloc) map(tofrom: x, xbuf) defaultmap(none)
    #pragma omp parallel allocate(allocator(my_alloc), align(128): x, xbuf) if(0) firstprivate(x, xbuf)
      {
	if ((uintptr_t) &x % 128 != 0)
	  __builtin_abort ();
	if ((uintptr_t) xbuf % 128 != 0)
	  __builtin_abort ();
      }

  if (my_alloc != (omp_allocator_handle_t) 0xABCD)
    __builtin_abort ();

  return 0;
}

/* { dg-final { scan-tree-dump-times "#pragma omp target .* uses_allocators\\(memspace\\(\\), traits\\(trait\\) : my_alloc\\)" 1 "gimple" } } */
/* { dg-final { scan-tree-dump-times "#pragma omp target .* uses_allocators\\(memspace\\(\\), traits\\(\\) : my_alloc\\)" 1 "gimple" } } */
