1 // RUN: %clang_cc1 -triple x86_64 -verify=expected,dev \
2 // RUN: -verify-ignore-unexpected=note \
3 // RUN: -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -o - %s
4 // RUN: %clang_cc1 -triple x86_64 -verify -verify-ignore-unexpected=note\
5 // RUN: -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -o - -x c++ %s
6 // RUN: %clang_cc1 -triple x86_64 -verify=dev -verify-ignore-unexpected=note\
7 // RUN: -fcuda-is-device -o - %s
10 #include "Inputs/cuda.h"
11 __device__ void cu_devf();
15 #pragma omp declare target to(bazz) device_type(nohost)
16 void bazzz() {bazz();}
17 #pragma omp declare target to(bazzz) device_type(nohost)
18 void any() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
19 void host1() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
20 #pragma omp declare target to(host1) device_type(host)
21 void host2() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
22 #pragma omp declare target to(host2)
23 void device() {host1();}
24 #pragma omp declare target to(device) device_type(nohost)
25 void host3() {host1();}
26 #pragma omp declare target to(host3)
28 #pragma omp declare target
30 void any2() {host1();}
31 void any3() {device();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
33 #pragma omp end declare target
36 void any6() {host1();}
37 void any7() {device();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
41 void cu_hostf() { cu_devf(); } // dev-error {{no matching function for call to 'cu_devf'}}
42 __device__ void cu_devf2() { cu_hostf(); } // dev-error{{no matching function for call to 'cu_hostf'}}