xref: /aosp_15_r20/external/clang/test/SemaCUDA/function-target.cu (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -fcuda-is-device -verify %s
3*67e74705SXin Li 
4*67e74705SXin Li #include "Inputs/cuda.h"
5*67e74705SXin Li 
6*67e74705SXin Li __host__ void h1h(void);
7*67e74705SXin Li __device__ void h1d(void); // expected-note {{candidate function not viable: call to __device__ function from __host__ function}}
8*67e74705SXin Li __host__ __device__ void h1hd(void);
9*67e74705SXin Li __global__ void h1g(void);
10*67e74705SXin Li 
11*67e74705SXin Li struct h1ds { // expected-note {{requires 1 argument}}
12*67e74705SXin Li   __device__ h1ds(); // expected-note {{candidate constructor not viable: call to __device__ function from __host__ function}}
13*67e74705SXin Li };
14*67e74705SXin Li 
h1(void)15*67e74705SXin Li __host__ void h1(void) {
16*67e74705SXin Li   h1h();
17*67e74705SXin Li   h1d(); // expected-error {{no matching function}}
18*67e74705SXin Li   h1hd();
19*67e74705SXin Li   h1g<<<1, 1>>>();
20*67e74705SXin Li   h1ds x; // expected-error {{no matching constructor}}
21*67e74705SXin Li }
22*67e74705SXin Li 
23*67e74705SXin Li __host__ void d1h(void); // expected-note {{candidate function not viable: call to __host__ function from __device__ function}}
24*67e74705SXin Li __device__ void d1d(void);
25*67e74705SXin Li __host__ __device__ void d1hd(void);
26*67e74705SXin Li __global__ void d1g(void); // expected-note {{'d1g' declared here}}
27*67e74705SXin Li 
d1(void)28*67e74705SXin Li __device__ void d1(void) {
29*67e74705SXin Li   d1h(); // expected-error {{no matching function}}
30*67e74705SXin Li   d1d();
31*67e74705SXin Li   d1hd();
32*67e74705SXin Li   d1g<<<1, 1>>>(); // expected-error {{reference to __global__ function 'd1g' in __device__ function}}
33*67e74705SXin Li }
34