blob: 3fabfc359b7a6074c9ed5386c417b57e677e28d2 [file] [log] [blame]
Eli Bendersky291a57e2014-09-25 23:59:08 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3#include "Inputs/cuda.h"
4
5//------------------------------------------------------------------------------
6// Test 1: host method called from device function
7
8struct S1 {
9 void method() {}
10};
11
12__device__ void foo1(S1& s) {
13 s.method(); // expected-error {{reference to __host__ function 'method' in __device__ function}}
14}
15
16//------------------------------------------------------------------------------
17// Test 2: host method called from device function, for overloaded method
18
19struct S2 {
20 void method(int) {} // expected-note {{candidate function not viable: call to __host__ function from __device__ function}}
21 void method(float) {} // expected-note {{candidate function not viable: call to __host__ function from __device__ function}}
22};
23
24__device__ void foo2(S2& s, int i, float f) {
25 s.method(f); // expected-error {{no matching member function}}
26}
27
28//------------------------------------------------------------------------------
29// Test 3: device method called from host function
30
31struct S3 {
32 __device__ void method() {}
33};
34
35void foo3(S3& s) {
36 s.method(); // expected-error {{reference to __device__ function 'method' in __host__ function}}
37}
38
39//------------------------------------------------------------------------------
40// Test 4: device method called from host&device function
41
42struct S4 {
43 __device__ void method() {}
44};
45
46__host__ __device__ void foo4(S4& s) {
Justin Lebar25c4a812016-03-29 16:24:16 +000047 s.method();
Eli Bendersky291a57e2014-09-25 23:59:08 +000048}
49
50//------------------------------------------------------------------------------
51// Test 5: overloaded operators
52
53struct S5 {
54 S5() {}
55 S5& operator=(const S5&) {return *this;} // expected-note {{candidate function not viable}}
56};
57
58__device__ void foo5(S5& s, S5& t) {
59 s = t; // expected-error {{no viable overloaded '='}}
60}
61
62//------------------------------------------------------------------------------
63// Test 6: call method through pointer
64
65struct S6 {
66 void method() {}
67};
68
69__device__ void foo6(S6* s) {
70 s->method(); // expected-error {{reference to __host__ function 'method' in __device__ function}}
71}