blob: 8429b2f4dc68de23c295e6841fa7530c294043cc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#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);
}
|