]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Analysis/traversal-algorithm.mm
Vendor import of clang trunk r300422:
[FreeBSD/FreeBSD.git] / test / Analysis / traversal-algorithm.mm
1 // RUN: %clang_analyze_cc1 -analyzer-checker=debug.DumpTraversal -analyzer-max-loop 4 -std=c++11 %s | FileCheck -check-prefix=DFS %s
2
3 int a();
4 int b();
5 int c();
6
7 int work();
8
9 void test(id input) {
10   if (a()) {
11     if (a())
12       b();
13     else
14       c();
15   } else {
16     if (b())
17       a();
18     else
19       c();
20   }
21
22   if (a())
23     work();
24 }
25
26 void testLoops(id input) {
27   while (a()) {
28     work();
29     work();
30     work();
31   }
32
33   for (int i = 0; i != b(); ++i) {
34     work();
35   }
36
37   for (id x in input) {
38     work();
39     work();
40     work();
41   }
42
43   int z[] = {1,2,3};
44   for (int y : z) {
45     work();
46     work();
47     work();
48   }
49 }
50
51 // This ordering assumes that false cases happen before the true cases.
52
53 // DFS:27 WhileStmt
54 // DFS-next:33 ForStmt
55 // DFS-next:37 ObjCForCollectionStmt
56 // DFS-next:44 CXXForRangeStmt
57 // DFS-next:44 CXXForRangeStmt
58 // DFS-next:44 CXXForRangeStmt
59 // DFS-next:44 CXXForRangeStmt
60 // DFS-next:--END PATH--
61 // DFS-next:37 ObjCForCollectionStmt
62 // DFS-next:37 ObjCForCollectionStmt
63 // DFS-next:44 CXXForRangeStmt
64 // DFS-next:44 CXXForRangeStmt
65 // DFS-next:44 CXXForRangeStmt
66 // DFS-next:44 CXXForRangeStmt
67 // DFS-next:--END PATH--
68 // DFS-next:37 ObjCForCollectionStmt
69 // DFS-next:37 ObjCForCollectionStmt
70 // DFS-next:44 CXXForRangeStmt
71 // DFS-next:37 ObjCForCollectionStmt
72 // DFS-next:37 ObjCForCollectionStmt
73 // DFS-next:44 CXXForRangeStmt
74 // DFS-next:37 ObjCForCollectionStmt
75 // DFS-next:33 ForStmt
76 // DFS-next:37 ObjCForCollectionStmt
77 // DFS-next:44 CXXForRangeStmt
78 // DFS-next:44 CXXForRangeStmt
79 // DFS-next:44 CXXForRangeStmt
80 // DFS-next:44 CXXForRangeStmt
81 // DFS-next:--END PATH--
82 // DFS-next:37 ObjCForCollectionStmt
83 // DFS-next:33 ForStmt
84 // DFS-next:37 ObjCForCollectionStmt
85 // DFS-next:44 CXXForRangeStmt
86 // DFS-next:44 CXXForRangeStmt
87 // DFS-next:44 CXXForRangeStmt
88 // DFS-next:44 CXXForRangeStmt
89 // DFS-next:--END PATH--
90 // DFS-next:37 ObjCForCollectionStmt
91 // DFS-next:33 ForStmt
92 // DFS-next:37 ObjCForCollectionStmt
93 // DFS-next:44 CXXForRangeStmt
94 // DFS-next:44 CXXForRangeStmt
95 // DFS-next:44 CXXForRangeStmt
96 // DFS-next:44 CXXForRangeStmt
97 // DFS-next:--END PATH--
98 // DFS-next:37 ObjCForCollectionStmt
99 // DFS-next:27 WhileStmt
100 // DFS-next:33 ForStmt
101 // DFS-next:37 ObjCForCollectionStmt
102 // DFS-next:44 CXXForRangeStmt
103 // DFS-next:44 CXXForRangeStmt
104 // DFS-next:44 CXXForRangeStmt
105 // DFS-next:44 CXXForRangeStmt
106 // DFS-next:--END PATH--
107 // DFS-next:37 ObjCForCollectionStmt
108 // DFS-next:33 ForStmt
109 // DFS-next:37 ObjCForCollectionStmt
110 // DFS-next:44 CXXForRangeStmt
111 // DFS-next:44 CXXForRangeStmt
112 // DFS-next:44 CXXForRangeStmt
113 // DFS-next:44 CXXForRangeStmt
114 // DFS-next:--END PATH--
115 // DFS-next:37 ObjCForCollectionStmt
116 // DFS-next:33 ForStmt
117 // DFS-next:37 ObjCForCollectionStmt
118 // DFS-next:44 CXXForRangeStmt
119 // DFS-next:44 CXXForRangeStmt
120 // DFS-next:44 CXXForRangeStmt
121 // DFS-next:44 CXXForRangeStmt
122 // DFS-next:--END PATH--
123 // DFS-next:37 ObjCForCollectionStmt
124 // DFS-next:33 ForStmt
125 // DFS-next:37 ObjCForCollectionStmt
126 // DFS-next:44 CXXForRangeStmt
127 // DFS-next:44 CXXForRangeStmt
128 // DFS-next:44 CXXForRangeStmt
129 // DFS-next:44 CXXForRangeStmt
130 // DFS-next:--END PATH--
131 // DFS-next:37 ObjCForCollectionStmt
132 // DFS-next:27 WhileStmt
133 // DFS-next:33 ForStmt
134 // DFS-next:37 ObjCForCollectionStmt
135 // DFS-next:44 CXXForRangeStmt
136 // DFS-next:44 CXXForRangeStmt
137 // DFS-next:44 CXXForRangeStmt
138 // DFS-next:44 CXXForRangeStmt
139 // DFS-next:--END PATH--
140 // DFS-next:37 ObjCForCollectionStmt
141 // DFS-next:33 ForStmt
142 // DFS-next:37 ObjCForCollectionStmt
143 // DFS-next:44 CXXForRangeStmt
144 // DFS-next:44 CXXForRangeStmt
145 // DFS-next:44 CXXForRangeStmt
146 // DFS-next:44 CXXForRangeStmt
147 // DFS-next:--END PATH--
148 // DFS-next:37 ObjCForCollectionStmt
149 // DFS-next:33 ForStmt
150 // DFS-next:37 ObjCForCollectionStmt
151 // DFS-next:44 CXXForRangeStmt
152 // DFS-next:44 CXXForRangeStmt
153 // DFS-next:44 CXXForRangeStmt
154 // DFS-next:44 CXXForRangeStmt
155 // DFS-next:--END PATH--
156 // DFS-next:37 ObjCForCollectionStmt
157 // DFS-next:33 ForStmt
158 // DFS-next:37 ObjCForCollectionStmt
159 // DFS-next:44 CXXForRangeStmt
160 // DFS-next:44 CXXForRangeStmt
161 // DFS-next:44 CXXForRangeStmt
162 // DFS-next:44 CXXForRangeStmt
163 // DFS-next:--END PATH--
164 // DFS-next:37 ObjCForCollectionStmt
165 // DFS-next:27 WhileStmt
166 // DFS-next:33 ForStmt
167 // DFS-next:37 ObjCForCollectionStmt
168 // DFS-next:44 CXXForRangeStmt
169 // DFS-next:44 CXXForRangeStmt
170 // DFS-next:44 CXXForRangeStmt
171 // DFS-next:44 CXXForRangeStmt
172 // DFS-next:--END PATH--
173 // DFS-next:37 ObjCForCollectionStmt
174 // DFS-next:33 ForStmt
175 // DFS-next:37 ObjCForCollectionStmt
176 // DFS-next:44 CXXForRangeStmt
177 // DFS-next:44 CXXForRangeStmt
178 // DFS-next:44 CXXForRangeStmt
179 // DFS-next:44 CXXForRangeStmt
180 // DFS-next:--END PATH--
181 // DFS-next:37 ObjCForCollectionStmt
182 // DFS-next:33 ForStmt
183 // DFS-next:37 ObjCForCollectionStmt
184 // DFS-next:44 CXXForRangeStmt
185 // DFS-next:44 CXXForRangeStmt
186 // DFS-next:44 CXXForRangeStmt
187 // DFS-next:44 CXXForRangeStmt
188 // DFS-next:--END PATH--
189 // DFS-next:37 ObjCForCollectionStmt
190 // DFS-next:33 ForStmt
191 // DFS-next:37 ObjCForCollectionStmt
192 // DFS-next:44 CXXForRangeStmt
193 // DFS-next:44 CXXForRangeStmt
194 // DFS-next:44 CXXForRangeStmt
195 // DFS-next:44 CXXForRangeStmt
196 // DFS-next:--END PATH--
197 // DFS-next:37 ObjCForCollectionStmt
198 // DFS-next:10 IfStmt
199 // DFS-next:16 IfStmt
200 // DFS-next:22 IfStmt
201 // DFS-next:--END PATH--
202 // DFS-next:--END PATH--
203 // DFS-next:22 IfStmt
204 // DFS-next:--END PATH--
205 // DFS-next:--END PATH--
206 // DFS-next:11 IfStmt
207 // DFS-next:22 IfStmt
208 // DFS-next:--END PATH--
209 // DFS-next:--END PATH--
210 // DFS-next:22 IfStmt
211 // DFS-next:--END PATH--
212 // DFS-next:--END PATH--
213