1 // RUN: %clang_cc1 -fsyntax-only -verify -triple aarch64 -target-feature +bf16 %s
2 
test_cast_from_float(float in)3 __bf16 test_cast_from_float(float in) {
4   return (__bf16)in; // expected-error {{cannot type-cast to __bf16}}
5 }
6 
test_cast_from_float_literal(void)7 __bf16 test_cast_from_float_literal(void) {
8   return (__bf16)1.0f; // expected-error {{cannot type-cast to __bf16}}
9 }
10 
test_cast_from_int(int in)11 __bf16 test_cast_from_int(int in) {
12   return (__bf16)in; // expected-error {{cannot type-cast to __bf16}}
13 }
14 
test_cast_from_int_literal(void)15 __bf16 test_cast_from_int_literal(void) {
16   return (__bf16)1; // expected-error {{cannot type-cast to __bf16}}
17 }
18 
test_cast_bfloat(__bf16 in)19 __bf16 test_cast_bfloat(__bf16 in) {
20   return (__bf16)in; // this one should work
21 }
22 
test_cast_to_float(__bf16 in)23 float test_cast_to_float(__bf16 in) {
24   return (float)in; // expected-error {{cannot type-cast from __bf16}}
25 }
26 
test_cast_to_int(__bf16 in)27 int test_cast_to_int(__bf16 in) {
28   return (int)in; // expected-error {{cannot type-cast from __bf16}}
29 }
30 
test_implicit_from_float(float in)31 __bf16 test_implicit_from_float(float in) {
32   return in; // expected-error {{returning 'float' from a function with incompatible result type '__bf16'}}
33 }
34 
test_implicit_from_float_literal(void)35 __bf16 test_implicit_from_float_literal(void) {
36   return 1.0f; // expected-error {{returning 'float' from a function with incompatible result type '__bf16'}}
37 }
38 
test_implicit_from_int(int in)39 __bf16 test_implicit_from_int(int in) {
40   return in; // expected-error {{returning 'int' from a function with incompatible result type '__bf16'}}
41 }
42 
test_implicit_from_int_literal(void)43 __bf16 test_implicit_from_int_literal(void) {
44   return 1; // expected-error {{returning 'int' from a function with incompatible result type '__bf16'}}
45 }
46 
test_implicit_bfloat(__bf16 in)47 __bf16 test_implicit_bfloat(__bf16 in) {
48   return in; // this one should work
49 }
50 
test_implicit_to_float(__bf16 in)51 float test_implicit_to_float(__bf16 in) {
52   return in; // expected-error {{returning '__bf16' from a function with incompatible result type 'float'}}
53 }
54 
test_implicit_to_int(__bf16 in)55 int test_implicit_to_int(__bf16 in) {
56   return in; // expected-error {{returning '__bf16' from a function with incompatible result type 'int'}}
57 }
58 
test_cond(__bf16 a,__bf16 b,_Bool which)59 __bf16 test_cond(__bf16 a, __bf16 b, _Bool which) {
60   // Conditional operator _should_ be supported, without nonsense
61   // complaints like 'types __bf16 and __bf16 are not compatible'
62   return which ? a : b;
63 }
64 
test_cond_float(__bf16 a,__bf16 b,_Bool which)65 __bf16 test_cond_float(__bf16 a, __bf16 b, _Bool which) {
66   return which ? a : 1.0f; // expected-error {{incompatible operand types ('__bf16' and 'float')}}
67 }
68 
test_cond_int(__bf16 a,__bf16 b,_Bool which)69 __bf16 test_cond_int(__bf16 a, __bf16 b, _Bool which) {
70   return which ? a : 1; // expected-error {{incompatible operand types ('__bf16' and 'int')}}
71 }
72