1 // RUN: %clang_cc1 -triple x86_64 -verify=expected,dev \ 2 // RUN: -verify-ignore-unexpected=note \ 3 // RUN: -fopenmp -fopenmp-version=50 -o - %s 4 // RUN: %clang_cc1 -triple x86_64 -verify -verify-ignore-unexpected=note\ 5 // RUN: -fopenmp -fopenmp-version=50 -o - -x c++ %s 6 // RUN: %clang_cc1 -triple x86_64 -verify=dev -verify-ignore-unexpected=note\ 7 // RUN: -fcuda-is-device -o - %s 8 9 #if __CUDA__ 10 #include "Inputs/cuda.h" 11 __device__ void cu_devf(); 12 #endif 13 bazz()14void bazz() {} 15 #pragma omp declare target to(bazz) device_type(nohost) bazzz()16void bazzz() {bazz();} 17 #pragma omp declare target to(bazzz) device_type(nohost) any()18void any() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}} host1()19void host1() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}} 20 #pragma omp declare target to(host1) device_type(host) host2()21void host2() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}} 22 #pragma omp declare target to(host2) device()23void device() {host1();} 24 #pragma omp declare target to(device) device_type(nohost) host3()25void host3() {host1();} 26 #pragma omp declare target to(host3) 27 28 #pragma omp declare target any1()29void any1() {any();} any2()30void any2() {host1();} any3()31void any3() {device();} // expected-error {{function with 'device_type(nohost)' is not available on host}} any4()32void any4() {any2();} 33 #pragma omp end declare target 34 any5()35void any5() {any();} any6()36void any6() {host1();} any7()37void any7() {device();} // expected-error {{function with 'device_type(nohost)' is not available on host}} any8()38void any8() {any2();} 39 40 #if __CUDA__ cu_hostf()41void cu_hostf() { cu_devf(); } // dev-error {{no matching function for call to 'cu_devf'}} cu_devf2()42__device__ void cu_devf2() { cu_hostf(); } // dev-error{{no matching function for call to 'cu_hostf'}} 43 #endif 44