xref: /llvm-project/clang/test/Analysis/fixed-point.c (revision 443b46e6d3139c1306caddd06efa674dcea9f38f)
1*443b46e6Seinvbri // RUN: %clang_analyze_cc1 -ffixed-point \
2*443b46e6Seinvbri // RUN:   -analyzer-checker=core,debug.ExprInspection -verify %s
3*443b46e6Seinvbri 
4*443b46e6Seinvbri // expected-no-diagnostics
5*443b46e6Seinvbri 
6*443b46e6Seinvbri // Check that getAPSIntType does not crash
7*443b46e6Seinvbri // when using fixed point types.
8*443b46e6Seinvbri 
9*443b46e6Seinvbri enum Kind { en_0 = 1 };
10*443b46e6Seinvbri 
_enum(int c)11*443b46e6Seinvbri void _enum(int c) {
12*443b46e6Seinvbri   (void)((enum Kind) c >> 4);
13*443b46e6Seinvbri }
14*443b46e6Seinvbri 
_inttype(int c)15*443b46e6Seinvbri void _inttype(int c) {
16*443b46e6Seinvbri   (void)(c >> 4);
17*443b46e6Seinvbri }
18*443b46e6Seinvbri 
_accum(int c)19*443b46e6Seinvbri void _accum(int c) {
20*443b46e6Seinvbri   (void)((_Accum) c >> 4);
21*443b46e6Seinvbri }
22*443b46e6Seinvbri 
_fract(int c)23*443b46e6Seinvbri void _fract(int c) {
24*443b46e6Seinvbri   (void)((_Fract) c >> 4);
25*443b46e6Seinvbri }
26*443b46e6Seinvbri 
_long_fract(int c)27*443b46e6Seinvbri void _long_fract(int c) {
28*443b46e6Seinvbri   (void)((long _Fract) c >> 4);
29*443b46e6Seinvbri }
30*443b46e6Seinvbri 
_unsigned_accum(int c)31*443b46e6Seinvbri void _unsigned_accum(int c) {
32*443b46e6Seinvbri   (void)((unsigned _Accum) c >> 4);
33*443b46e6Seinvbri }
34*443b46e6Seinvbri 
_short_unsigned_accum(int c)35*443b46e6Seinvbri void _short_unsigned_accum(int c) {
36*443b46e6Seinvbri   (void)((short unsigned _Accum) c >> 4);
37*443b46e6Seinvbri }
38*443b46e6Seinvbri 
_unsigned_fract(int c)39*443b46e6Seinvbri void _unsigned_fract(int c) {
40*443b46e6Seinvbri   (void)((unsigned _Fract) c >> 4);
41*443b46e6Seinvbri }
42*443b46e6Seinvbri 
sat_accum(int c)43*443b46e6Seinvbri void sat_accum(int c) {
44*443b46e6Seinvbri   (void)((_Sat _Accum) c >> 4);
45*443b46e6Seinvbri }
46*443b46e6Seinvbri 
sat_fract(int c)47*443b46e6Seinvbri void sat_fract(int c) {
48*443b46e6Seinvbri   (void)((_Sat _Fract) c >> 4);
49*443b46e6Seinvbri }
50*443b46e6Seinvbri 
sat_long_fract(int c)51*443b46e6Seinvbri void sat_long_fract(int c) {
52*443b46e6Seinvbri   (void)((_Sat long _Fract) c >> 4);
53*443b46e6Seinvbri }
54*443b46e6Seinvbri 
sat_unsigned_accum(int c)55*443b46e6Seinvbri void sat_unsigned_accum(int c) {
56*443b46e6Seinvbri   (void)((_Sat unsigned _Accum) c >> 4);
57*443b46e6Seinvbri }
58*443b46e6Seinvbri 
sat_short_unsigned_accum(int c)59*443b46e6Seinvbri void sat_short_unsigned_accum(int c) {
60*443b46e6Seinvbri   (void)((_Sat short unsigned _Accum) c >> 4);
61*443b46e6Seinvbri }
62*443b46e6Seinvbri 
sat_unsigned_fract(int c)63*443b46e6Seinvbri void sat_unsigned_fract(int c) {
64*443b46e6Seinvbri   (void)((_Sat unsigned _Fract) c >> 4);
65*443b46e6Seinvbri }
66