diff options
Diffstat (limited to 'final/runtime/test/api/omp_alloc_null_fb.c')
-rw-r--r-- | final/runtime/test/api/omp_alloc_null_fb.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/final/runtime/test/api/omp_alloc_null_fb.c b/final/runtime/test/api/omp_alloc_null_fb.c new file mode 100644 index 0000000..9528c46 --- /dev/null +++ b/final/runtime/test/api/omp_alloc_null_fb.c @@ -0,0 +1,35 @@ +// RUN: %libomp-compile-and-run + +#include <stdio.h> +#include <omp.h> + +int main() { + omp_alloctrait_t at[2]; + omp_allocator_handle_t a; + void *p[2]; + at[0].key = OMP_ATK_POOL_SIZE; + at[0].value = 2 * 1024 * 1024; + at[1].key = OMP_ATK_FALLBACK; + at[1].value = OMP_ATV_NULL_FB; + a = omp_init_allocator(omp_large_cap_mem_space, 2, at); + printf("allocator large created: %p\n", a); + #pragma omp parallel num_threads(2) + { + int i = omp_get_thread_num(); + #pragma omp barrier + p[i] = omp_alloc(1024 * 1024, a); + #pragma omp barrier + printf("th %d, ptr %p\n", i, p[i]); + omp_free(p[i], a); + } + // As an allocator has some small memory overhead + // exactly one of the two pointers should be NULL + // because of NULL fallback requested + if ((p[0] == NULL && p[1] != NULL) || (p[0] != NULL && p[1] == NULL)) { + printf("passed\n"); + return 0; + } else { + printf("failed: pointers %p %p\n", p[0], p[1]); + return 1; + } +} |