1 // RUN: %clang_cc1 -triple spir64 -fsycl-is-device -verify -fsyntax-only %s 2 // RUN: %clang_cc1 -triple x86_64-linux-gnu -fsycl-is-device -fsyntax-only %s 3 4 typedef __float128 BIGTY; 5 6 template <class T> 7 class Z { 8 public: 9 // expected-note@+1 {{'field' defined here}} 10 T field; 11 // expected-note@+1 2{{'field1' defined here}} 12 __float128 field1; 13 using BIGTYPE = __float128; 14 // expected-note@+1 {{'bigfield' defined here}} 15 BIGTYPE bigfield; 16 }; 17 18 void host_ok(void) { 19 __float128 A; 20 int B = sizeof(__float128); 21 Z<__float128> C; 22 C.field1 = A; 23 } 24 25 void usage() { 26 // expected-note@+1 3{{'A' defined here}} 27 __float128 A; 28 Z<__float128> C; 29 // expected-error@+3 2{{expression requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 30 // expected-error@+2 {{'A' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 31 // expected-error@+1 {{'field1' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 32 C.field1 = A; 33 // expected-error@+2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__float128') type support, but target 'spir64' does not support it}} 34 // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__float128') type support, but target 'spir64' does not support it}} 35 C.bigfield += 1.0; 36 37 // expected-error@+1 {{'A' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 38 auto foo1 = [=]() { 39 __float128 AA; 40 // expected-note@+2 {{'BB' defined here}} 41 // expected-error@+1 {{'A' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 42 auto BB = A; 43 // expected-error@+2 {{expression requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 44 // expected-error@+1 {{'BB' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 45 BB += 1; 46 47 float F1 = 0.1f; 48 float F2 = 0.1f; 49 // expected-error@+1 3{{expression requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 50 float F3 = ((__float128)F1 * (__float128)F2) / 2.0f; 51 }; 52 53 // expected-note@+1 {{called by 'usage'}} 54 foo1(); 55 } 56 57 template <typename t> 58 void foo2(){}; 59 60 // expected-note@+3 {{'P' defined here}} 61 // expected-error@+2 {{'P' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 62 // expected-note@+1 2{{'foo' defined here}} 63 __float128 foo(__float128 P) { return P; } 64 65 template <typename Name, typename Func> 66 __attribute__((sycl_kernel)) void kernel(Func kernelFunc) { 67 // expected-note@+1 5{{called by 'kernel}} 68 kernelFunc(); 69 } 70 71 int main() { 72 // expected-note@+1 {{'CapturedToDevice' defined here}} 73 __float128 CapturedToDevice = 1; 74 host_ok(); 75 kernel<class variables>([=]() { 76 decltype(CapturedToDevice) D; 77 // expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 78 auto C = CapturedToDevice; 79 Z<__float128> S; 80 // expected-error@+2 {{expression requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 81 // expected-error@+1 {{'field1' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 82 S.field1 += 1; 83 // expected-error@+2 {{expression requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 84 // expected-error@+1 {{'field' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 85 S.field = 1; 86 }); 87 88 kernel<class functions>([=]() { 89 // expected-note@+1 2{{called by 'operator()'}} 90 usage(); 91 // expected-note@+1 {{'BBBB' defined here}} 92 BIGTY BBBB; 93 // expected-note@+3 {{called by 'operator()'}} 94 // expected-error@+2 {{'BBBB' requires 128 bit size 'BIGTY' (aka '__float128') type support, but target 'spir64' does not support it}} 95 // expected-error@+1 2{{'foo' requires 128 bit size '__float128' type support, but target 'spir64' does not support it}} 96 auto A = foo(BBBB); 97 }); 98 99 kernel<class ok>([=]() { 100 Z<__float128> S; 101 foo2<__float128>(); 102 auto A = sizeof(CapturedToDevice); 103 }); 104 105 return 0; 106 } 107