comparison gcc/testsuite/gcc.dg/analyzer/paths-6.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 #include <stdlib.h>
2 #include "analyzer-decls.h"
3
4 /* Verify that ordering of writes doesn't matter when merging states. */
5
6 /* Test with locals. */
7
8 void test_1 (int flag)
9 {
10 int a, b;
11 if (flag)
12 {
13 a = 3;
14 b = 4;
15 }
16 else
17 {
18 b = 4;
19 a = 3;
20 }
21
22 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
23 __analyzer_eval (a == 3); /* { dg-warning "TRUE" } */
24 __analyzer_eval (b == 4); /* { dg-warning "TRUE" } */
25 }
26
27 /* Test with globals. */
28
29 int f, g, h;
30 void test_2 (int flag)
31 {
32 if (flag)
33 {
34 f = 3;
35 g = 4;
36 }
37 else
38 {
39 g = 4;
40 f = 3;
41 }
42
43 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
44 __analyzer_eval (f == 3); /* { dg-warning "TRUE" } */
45 __analyzer_eval (g == 4); /* { dg-warning "TRUE" } */
46 }
47
48 /* All 6 orderings of writes to 3 globals. */
49
50 void test_3 (int i)
51 {
52 switch (i)
53 {
54 default:
55 case 0:
56 f = 3;
57 g = 4;
58 h = 5;
59 break;
60
61 case 1:
62 f = 3;
63 h = 5;
64 g = 4;
65 break;
66
67 case 2:
68 g = 4;
69 f = 3;
70 h = 5;
71 break;
72
73 case 3:
74 g = 4;
75 h = 5;
76 f = 3;
77 break;
78
79 case 4:
80 h = 5;
81 f = 3;
82 g = 4;
83 break;
84
85 case 5:
86 h = 5;
87 g = 4;
88 f = 3;
89 break;
90 }
91
92 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */
93 __analyzer_eval (f == 3); /* { dg-warning "TRUE" } */
94 __analyzer_eval (g == 4); /* { dg-warning "TRUE" } */
95 __analyzer_eval (h == 5); /* { dg-warning "TRUE" } */
96 }
97
98 void test_4 (int flag)
99 {
100 void *p, *q;
101 if (flag)
102 {
103 p = malloc (256);
104 q = malloc (256);
105 }
106 else
107 {
108 q = malloc (256);
109 p = malloc (256);
110 }
111 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
112 free (p);
113 free (q);
114 }