#include #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); }