1 | // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -analyzer-inline-max-stack-depth=3 -analyzer-config ipa-always-inline-size=3 -verify %s |
2 | |
3 | void clang_analyzer_eval(int); |
4 | int nested5() { |
5 | if (5 < 3) |
6 | return 0; |
7 | else |
8 | if (3 == 3) |
9 | return 0; |
10 | return 0; |
11 | } |
12 | int nested4() { |
13 | return nested5(); |
14 | } |
15 | int nested3() { |
16 | return nested4(); |
17 | } |
18 | int nested2() { |
19 | return nested3(); |
20 | } |
21 | int nested1() { |
22 | return nested2(); |
23 | } |
24 | |
25 | void testNested() { |
26 | clang_analyzer_eval(nested1() == 0); // expected-warning{{TRUE}} |
27 | } |
28 | |
29 | // Make sure we terminate a recursive path. |
30 | int recursive() { |
31 | return recursive(); |
32 | } |
33 | int callRecursive() { |
34 | return recursive(); |
35 | } |
36 | |
37 | int mutuallyRecursive1(); |
38 | |
39 | int mutuallyRecursive2() { |
40 | return mutuallyRecursive1(); |
41 | } |
42 | |
43 | int mutuallyRecursive1() { |
44 | return mutuallyRecursive2(); |
45 | } |
46 | int callMutuallyRecursive() { |
47 | return mutuallyRecursive1(); |
48 | } |
49 | |