blob: 0e0db927c2c18fabb9a11e258a9becb261e11ea7 [file] [log] [blame]
/* { dg-require-effective-target lto } */
/* { dg-additional-options "-flto" } */
/* { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } } */
/* { dg-additional-sources requires-4-aux.c } */
/* Same as requires-4.c, but uses heap memory for 'a'. */
/* Check no diagnostic by device-compiler's or host compiler's lto1.
Other file uses: 'requires reverse_offload', but that's inactive as
there are no declare target directives, device constructs nor device routines */
/* Depending on offload device capabilities, it may print something like the
following (only) if GOMP_DEBUG=1:
"devices present but 'omp requires unified_address, unified_shared_memory, reverse_offload' cannot be fulfilled"
and in that case does host-fallback execution.
No offload devices support USM at present, so we may verify host-fallback
execution by presence of separate memory spaces. */
#pragma omp requires unified_address,unified_shared_memory
int *a;
extern void foo (void);
int
main (void)
{
a = (int *) __builtin_calloc (sizeof (int), 10);
#pragma omp target map(to: a)
for (int i = 0; i < 10; i++)
a[i] = i;
for (int i = 0; i < 10; i++)
if (a[i] != i)
__builtin_abort ();
foo ();
__builtin_free (a);
return 0;
}