1 // RUN: %clang_cc1 -analyze -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 214