diff options
Diffstat (limited to 'test/Analysis/traversal-algorithm.mm')
-rw-r--r-- | test/Analysis/traversal-algorithm.mm | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/test/Analysis/traversal-algorithm.mm b/test/Analysis/traversal-algorithm.mm new file mode 100644 index 0000000000..49e72249e0 --- /dev/null +++ b/test/Analysis/traversal-algorithm.mm @@ -0,0 +1,97 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=debug.DumpTraversal -std=c++11 %s | FileCheck -check-prefix=DFS %s + +int a(); +int b(); +int c(); + +int work(); + +void test(id input) { + if (a()) { + if (a()) + b(); + else + c(); + } else { + if (b()) + a(); + else + c(); + } + + if (a()) + work(); +} + +// This ordering assumes that true cases happen before the false cases. + +// BFS: 10 IfStmt +// BFS-NEXT: 11 IfStmt +// BFS-NEXT: 16 IfStmt +// BFS-NEXT: 22 IfStmt +// BFS-NEXT: 22 IfStmt +// BFS-NEXT: 22 IfStmt +// BFS-NEXT: 22 IfStmt +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- +// BFS-NEXT: --END PATH-- + +// And this ordering assumes that false cases happen before the true cases. + +// DFS: 10 IfStmt +// DFS-NEXT: 16 IfStmt +// DFS-NEXT: 22 IfStmt +// DFS-NEXT: --END PATH-- +// DFS-NEXT: --END PATH-- +// DFS-NEXT: 22 IfStmt +// DFS-NEXT: --END PATH-- +// DFS-NEXT: --END PATH-- +// DFS-NEXT: 11 IfStmt +// DFS-NEXT: 22 IfStmt +// DFS-NEXT: --END PATH-- +// DFS-NEXT: --END PATH-- +// DFS-NEXT: 22 IfStmt +// DFS-NEXT: --END PATH-- +// DFS-NEXT: --END PATH-- + + +void testLoops(id input) { + while (a()) { + work(); + work(); + work(); + } + + for (int i = 0; i != b(); ++i) { + work(); + } + + for (id x in input) { + work(); + work(); + work(); + } + + int z[] = {1,2,3}; + for (int y : z) { + work(); + work(); + work(); + } +} + +// BFS: 64 WhileStmt +// BFS: 70 ForStmt +// BFS-NOT-NEXT: ObjCForCollectionStmt +// BFS: 74 ObjCForCollectionStmt +// BFS: 81 CXXForRangeStmt + +// DFS: 64 While +// DFS-NEXT: 70 ForStmt +// DFS-NEXT: 74 ObjCForCollectionStmt +// DFS-NEXT: 81 CXXForRangeStmt |