blob: 8bbe76bdbf3ebdee5a3df204af9be6186df571d7 [file] [log] [blame]
#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" } */
}