| 1 | // RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp -ferror-limit 100 -o - %s |
| 2 | |
| 3 | // RUN: %clang_cc1 -triple x86_64-apple-macos10.7.0 -verify -fopenmp-simd -ferror-limit 100 -o - %s |
| 4 | |
| 5 | struct St{ |
| 6 | int a; |
| 7 | }; |
| 8 | |
| 9 | int sss; |
| 10 | #pragma omp allocate(sss) allocat // expected-warning {{extra tokens at the end of '#pragma omp allocate' are ignored}} |
| 11 | #pragma omp allocate(sss) allocate(sss) // expected-error {{unexpected OpenMP clause 'allocate' in directive '#pragma omp allocate'}} |
| 12 | #pragma omp allocate(sss) allocator // expected-error {{expected '(' after 'allocator'}} |
| 13 | #pragma omp allocate(sss) allocator(0, // expected-error {{expected ')'}} expected-error {{omp_allocator_handle_t type not found; include <omp.h>}} expected-note {{to match this '('}} |
| 14 | #pragma omp allocate(sss) allocator(0,sss // expected-error {{expected ')'}} expected-error {{omp_allocator_handle_t type not found; include <omp.h>}} expected-note {{to match this '('}} |
| 15 | #pragma omp allocate(sss) allocator(0,sss) // expected-error {{expected ')'}} expected-error {{omp_allocator_handle_t type not found; include <omp.h>}} expected-note {{to match this '('}} |
| 16 | #pragma omp allocate(sss) allocator(sss) // expected-error {{omp_allocator_handle_t type not found; include <omp.h>}} |
| 17 | |
| 18 | typedef void **omp_allocator_handle_t; |
| 19 | extern const omp_allocator_handle_t omp_default_mem_alloc; |
| 20 | extern const omp_allocator_handle_t omp_large_cap_mem_alloc; |
| 21 | extern const omp_allocator_handle_t omp_const_mem_alloc; |
| 22 | extern const omp_allocator_handle_t omp_high_bw_mem_alloc; |
| 23 | extern const omp_allocator_handle_t omp_low_lat_mem_alloc; |
| 24 | extern const omp_allocator_handle_t omp_cgroup_mem_alloc; |
| 25 | extern const omp_allocator_handle_t omp_pteam_mem_alloc; |
| 26 | extern const omp_allocator_handle_t omp_thread_mem_alloc; |
| 27 | |
| 28 | struct St1{ |
| 29 | int a; |
| 30 | static int b; |
| 31 | #pragma omp allocate(b) allocator(sss) // expected-error {{initializing 'const omp_allocator_handle_t' (aka 'void **const') with an expression of incompatible type 'int'}} expected-note {{previous allocator is specified here}} |
| 32 | #pragma omp allocate(b) |
| 33 | #pragma omp allocate(b) allocator(omp_thread_mem_alloc) // expected-warning {{allocate directive specifies 'omp_thread_mem_alloc' allocator while previously used default}} |
| 34 | } d; // expected-note 2 {{'d' defined here}} |
| 35 | |
| 36 | // expected-error@+1 {{expected one of the predefined allocators for the variables with the static storage: 'omp_default_mem_alloc', 'omp_large_cap_mem_alloc', 'omp_const_mem_alloc', 'omp_high_bw_mem_alloc', 'omp_low_lat_mem_alloc', 'omp_cgroup_mem_alloc', 'omp_pteam_mem_alloc' or 'omp_thread_mem_alloc'}} |
| 37 | #pragma omp allocate(d) allocator(nullptr) |
| 38 | extern void **allocator; |
| 39 | // expected-error@+1 {{expected one of the predefined allocators for the variables with the static storage: 'omp_default_mem_alloc', 'omp_large_cap_mem_alloc', 'omp_const_mem_alloc', 'omp_high_bw_mem_alloc', 'omp_low_lat_mem_alloc', 'omp_cgroup_mem_alloc', 'omp_pteam_mem_alloc' or 'omp_thread_mem_alloc'}} |
| 40 | #pragma omp allocate(d) allocator(allocator) |
| 41 | #pragma omp allocate(d) allocator(omp_thread_mem_alloc) // expected-note {{previous allocator is specified here}} |
| 42 | #pragma omp allocate(d) // expected-warning {{allocate directive specifies default allocator while previously used 'omp_thread_mem_alloc'}} |
| 43 | |
| 44 | int c; |
| 45 | #pragma omp allocate(c) allocator(omp_thread_mem_alloc) // expected-note {{previous allocator is specified here}} |
| 46 | #pragma omp allocate(c) allocator(omp_high_bw_mem_alloc) // expected-warning {{allocate directive specifies 'omp_high_bw_mem_alloc' allocator while previously used 'omp_thread_mem_alloc'}} |
| 47 | |
| 48 | |