1// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpTraversal -analyzer-max-loop 4 -std=c++11 %s | FileCheck -check-prefix=DFS %s 2 3int a(); 4int b(); 5int c(); 6 7int work(); 8 9void 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 26void 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