xref: /llvm-project/clang/test/Frontend/fixed_point_unknown_conversions.c (revision 8f7caae00af070fb13416dbed207f3fe18e043e8)
1 // RUN: %clang_cc1 -verify -ffixed-point %s
2 
3 void func() {
4   _Bool b;
5   char c;
6   int i;
7   float f;
8   double d;
9   double _Complex dc;
10   int _Complex ic;
11   struct S {
12     int i;
13   } s;
14   enum E {
15     A
16   } e;
17   int *ptr;
18   typedef int int_t;
19   int_t i2;
20 
21   _Accum accum;
22   _Fract fract = accum; // ok
23   _Accum *accum_ptr;
24 
25   accum = f;       // expected-error{{conversion between fixed point and 'float' is not yet supported}}
26   accum = d;       // expected-error{{conversion between fixed point and 'double' is not yet supported}}
27   accum = dc;      // expected-error{{conversion between fixed point and '_Complex double' is not yet supported}}
28   accum = ic;      // expected-error{{conversion between fixed point and '_Complex int' is not yet supported}}
29   accum = s;       // expected-error{{assigning to '_Accum' from incompatible type 'struct S'}}
30   accum = ptr;     // expected-error{{assigning to '_Accum' from incompatible type 'int *'}}
31   accum_ptr = ptr; // expected-warning{{incompatible pointer types assigning to '_Accum *' from 'int *'}}
32 
33   f = accum;       // expected-error{{conversion between fixed point and 'float' is not yet supported}}
34   d = accum;       // expected-error{{conversion between fixed point and 'double' is not yet supported}}
35   dc = accum;      // expected-error{{conversion between fixed point and '_Complex double' is not yet supported}}
36   ic = accum;      // expected-error{{conversion between fixed point and '_Complex int' is not yet supported}}
37   s = accum;       // expected-error{{assigning to 'struct S' from incompatible type '_Accum'}}
38   ptr = accum;     // expected-error{{assigning to 'int *' from incompatible type '_Accum'}}
39   ptr = accum_ptr; // expected-warning{{incompatible pointer types assigning to 'int *' from '_Accum *'}}
40 }
41