| #include "analyzer-decls.h" |
| |
| typedef unsigned char u8; |
| typedef unsigned __INT16_TYPE__ u16; |
| typedef unsigned __INT32_TYPE__ u32; |
| |
| struct st1 |
| { |
| u16 nonzero_offset; |
| unsigned int f0 : 1; |
| unsigned int f1 : 1; |
| unsigned int f2 : 1; |
| unsigned int f3 : 1; |
| unsigned int f4 : 1; |
| unsigned int f5 : 1; |
| unsigned int f6 : 1; |
| unsigned int f7 : 1; |
| }; |
| |
| void test_1 (void) |
| { |
| struct st1 s; |
| s.f0 = 0; |
| __analyzer_eval (s.f0 == 0); /* { dg-warning "TRUE" } */ |
| s.f0 = 1; |
| __analyzer_eval (s.f0 == 1); /* { dg-warning "TRUE" } */ |
| |
| s.f1 = 0; |
| __analyzer_eval (s.f1 == 0); /* { dg-warning "TRUE" } */ |
| s.f1 = 1; |
| __analyzer_eval (s.f1 == 1); /* { dg-warning "TRUE" } */ |
| |
| /* etc */ |
| |
| s.f6 = 0; |
| __analyzer_eval (s.f6 == 0); /* { dg-warning "TRUE" } */ |
| s.f6 = 1; |
| __analyzer_eval (s.f6 == 1); /* { dg-warning "TRUE" } */ |
| |
| s.f7 = 0; |
| __analyzer_eval (s.f7 == 0); /* { dg-warning "TRUE" } */ |
| s.f7 = 1; |
| __analyzer_eval (s.f7 == 1); /* { dg-warning "TRUE" } */ |
| }; |
| |
| void test_2 (_Bool v0, _Bool v1, _Bool v2, _Bool v3, |
| _Bool v4, _Bool v5, _Bool v6, _Bool v7) |
| { |
| struct st1 s; |
| s.f0 = v0; |
| s.f1 = v1; |
| s.f2 = v2; |
| s.f3 = v3; |
| s.f4 = v4; |
| s.f5 = v5; |
| s.f6 = v6; |
| s.f7 = v7; |
| |
| __analyzer_eval (s.f0 == v0); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f1 == v1); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f2 == v2); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f3 == v3); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f4 == v4); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f5 == v5); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f6 == v6); /* { dg-warning "TRUE" } */ |
| __analyzer_eval (s.f7 == v7); /* { dg-warning "TRUE" } */ |
| }; |
| |
| struct st3 |
| { |
| unsigned int f01 : 2; |
| unsigned int f23 : 2; |
| unsigned int f34 : 2; |
| unsigned int f56 : 2; |
| }; |
| |
| void test_3 (void) |
| { |
| struct st3 s; |
| s.f01 = 0; |
| __analyzer_eval (s.f01 == 0); /* { dg-warning "TRUE" } */ |
| s.f01 = 1; |
| __analyzer_eval (s.f01 == 1); /* { dg-warning "TRUE" } */ |
| s.f01 = 2; |
| __analyzer_eval (s.f01 == 2); /* { dg-warning "TRUE" } */ |
| s.f01 = 3; |
| __analyzer_eval (s.f01 == 3); /* { dg-warning "TRUE" } */ |
| |
| /* etc */ |
| |
| s.f56 = 0; |
| __analyzer_eval (s.f56 == 0); /* { dg-warning "TRUE" } */ |
| s.f56 = 1; |
| __analyzer_eval (s.f56 == 1); /* { dg-warning "TRUE" } */ |
| s.f56 = 2; |
| __analyzer_eval (s.f56 == 2); /* { dg-warning "TRUE" } */ |
| s.f56 = 3; |
| __analyzer_eval (s.f56 == 3); /* { dg-warning "TRUE" } */ |
| }; |
| |
| /* A signed bitfield. */ |
| |
| struct st4 |
| { |
| signed int f012 : 3; |
| signed int f345 : 3; |
| }; |
| |
| void test_4 (void) |
| { |
| struct st4 s; |
| s.f345 = -4; |
| __analyzer_eval (s.f345 == -4); /* { dg-warning "TRUE" } */ |
| s.f345 = -3; |
| __analyzer_eval (s.f345 == -3); /* { dg-warning "TRUE" } */ |
| s.f345 = -2; |
| __analyzer_eval (s.f345 == -2); /* { dg-warning "TRUE" } */ |
| s.f345 = -1; |
| __analyzer_eval (s.f345 == -1); /* { dg-warning "TRUE" } */ |
| s.f345 = 0; |
| __analyzer_eval (s.f345 == 0); /* { dg-warning "TRUE" } */ |
| s.f345 = 1; |
| __analyzer_eval (s.f345 == 1); /* { dg-warning "TRUE" } */ |
| s.f345 = 2; |
| __analyzer_eval (s.f345 == 2); /* { dg-warning "TRUE" } */ |
| s.f345 = 3; |
| __analyzer_eval (s.f345 == 3); /* { dg-warning "TRUE" } */ |
| }; |
| |
| /* A zero bitfield to break up padding. */ |
| |
| struct st5 |
| { |
| unsigned f0 : 5; |
| unsigned :0; |
| unsigned f1 : 16; |
| }; |
| |
| void test_5 (void) |
| { |
| struct st5 s; |
| s.f1 = 0xcafe; |
| __analyzer_eval (s.f1 == 0xcafe); /* { dg-warning "TRUE" } */ |
| } |