blob: 8429b2f4dc68de23c295e6841fa7530c294043cc [file] [log] [blame]
#include <string.h>
#include "analyzer-decls.h"
extern void check_init_char (char v);
extern void check_init_int (int v);
void test_1 (void)
{
union
{
char c[16];
int i[4];
} v;
memset (&v, 0, sizeof (v));
v.c[5] = 42;
check_init_int (v.c[0]);
check_init_int (v.c[4]);
check_init_int (v.c[6]);
check_init_int (v.i[1]);
}
void test_2 (void)
{
/* Intersection of byte ranges within "v". */
union
{
struct {
int a;
char b;
char c;
} __attribute__((packed)) icc;
struct {
char a;
int b;
char c;
} __attribute__((packed)) cic;
struct {
char a;
char b;
int c;
} __attribute__((packed)) cci;
} v;
v.icc.a = 1066;
v.icc.b = 42;
v.icc.c = 17;
__analyzer_eval (v.icc.a == 1066); /* { dg-warning "TRUE" } */
__analyzer_eval (v.icc.b == 42); /* { dg-warning "TRUE" } */
__analyzer_eval (v.icc.c == 17); /* { dg-warning "TRUE" } */
check_init_int (v.icc.a);
check_init_char (v.icc.b);
check_init_char (v.icc.c);
check_init_char (v.cic.a);
check_init_int (v.cic.b);
check_init_char (v.cic.c);
check_init_char (v.cci.a);
check_init_char (v.cci.b);
check_init_int (v.cci.c);
v.cic.a = 42;
v.cic.b = 1066;
v.cic.c = 17;
__analyzer_eval (v.cic.a == 42); /* { dg-warning "TRUE" } */
__analyzer_eval (v.cic.b == 1066); /* { dg-warning "TRUE" } */
__analyzer_eval (v.cic.c == 17); /* { dg-warning "TRUE" } */
check_init_int (v.icc.a);
check_init_char (v.icc.b);
check_init_char (v.icc.c);
check_init_char (v.cic.a);
check_init_int (v.cic.b);
check_init_char (v.cic.c);
check_init_char (v.cci.a);
check_init_char (v.cci.b);
check_init_int (v.cci.c);
v.cci.a = 42;
v.cci.b = 17;
v.cci.c = 1066;
__analyzer_eval (v.cci.a == 42); /* { dg-warning "TRUE" } */
__analyzer_eval (v.cci.b == 17); /* { dg-warning "TRUE" } */
__analyzer_eval (v.cci.c == 1066); /* { dg-warning "TRUE" } */
check_init_int (v.icc.a);
check_init_char (v.icc.b);
check_init_char (v.icc.c);
check_init_char (v.cic.a);
check_init_int (v.cic.b);
check_init_char (v.cic.c);
check_init_char (v.cci.a);
check_init_char (v.cci.b);
check_init_int (v.cci.c);
}