llvm-project
43 строки · 1.8 Кб
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
8
9#if __CUDA__
10#include "Inputs/cuda.h"
11__device__ void cu_devf();
12#endif
13
14void bazz() {}
15#pragma omp declare target to(bazz) device_type(nohost)
16void bazzz() {bazz();}
17#pragma omp declare target to(bazzz) device_type(nohost)
18void any() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
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)
21void host2() {bazz();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
22#pragma omp declare target to(host2)
23void device() {host1();}
24#pragma omp declare target to(device) device_type(nohost)
25void host3() {host1();}
26#pragma omp declare target to(host3)
27
28#pragma omp declare target
29void any1() {any();}
30void any2() {host1();}
31void any3() {device();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
32void any4() {any2();}
33#pragma omp end declare target
34
35void any5() {any();}
36void any6() {host1();}
37void any7() {device();} // expected-error {{function with 'device_type(nohost)' is not available on host}}
38void any8() {any2();}
39
40#if __CUDA__
41void 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'}}
43#endif
44