44 lines · plain
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 - %s4// RUN: %clang_cc1 -triple x86_64 -verify -verify-ignore-unexpected=note\5// RUN: -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -o - -x c++ %s6// RUN: %clang_cc1 -triple x86_64 -verify=dev -verify-ignore-unexpected=note\7// RUN: -fcuda-is-device -o - %s8 9#if __CUDA__10#include "Inputs/cuda.h"11__device__ void cu_devf();12#endif13 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 target29void 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 target34 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#endif44