Viewing file: bitfields-1.c (3.33 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#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" } */ }
|