1 // This test is adapted from test_parallel_for_allocate.c in SOLLVE V&V.
2 // https://github.com/SOLLVE/sollve_vv/blob/master/tests/5.0/parallel_for/test_parallel_for_allocate.c
3 // RUN: %libomp-compile-and-run
5 // Support for allocate was added in GCC 11
6 // UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8, gcc-9, gcc-10
15 int main(int argc
, char *argv
[]) {
19 int successful_alloc
= 0;
21 omp_memspace_handle_t x_memspace
= omp_default_mem_space
;
22 omp_alloctrait_t x_traits
[1] = {omp_atk_alignment
, 64};
23 omp_allocator_handle_t x_alloc
= omp_init_allocator(x_memspace
, 1, x_traits
);
25 for (int i
= 0; i
< N
; i
++) {
26 for (int j
= 0; j
< N
; j
++) {
31 #pragma omp parallel for allocate(x_alloc: x) private(x) shared(result)
32 for (int i
= 0; i
< N
; i
++) {
33 x
= (int *)malloc(N
* sizeof(int));
35 #pragma omp simd simdlen(16) aligned(x : 64)
36 for (int j
= 0; j
< N
; j
++) {
39 for (int j
= 0; j
< N
; j
++) {
47 errors
+= successful_alloc
< 1;
49 for (int i
= 0; i
< N
; i
++) {
50 for (int j
= 0; j
< N
; j
++) {
51 errors
+= result
[i
][j
] != i
* j
;
55 omp_destroy_allocator(x_alloc
);