17229d0011766c174beffe6a846d78f448f845b39Anna Zaks// RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.ExprInspection -analyzer-inline-max-stack-depth=3 -analyzer-config ipa-always-inline-size=3 -verify %s 27229d0011766c174beffe6a846d78f448f845b39Anna Zaks 37229d0011766c174beffe6a846d78f448f845b39Anna Zaksvoid clang_analyzer_eval(int); 47229d0011766c174beffe6a846d78f448f845b39Anna Zaksint nested5() { 54ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks if (5 < 3) 64ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks return 0; 74ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks else 84ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks if (3 == 3) 94ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks return 0; 107229d0011766c174beffe6a846d78f448f845b39Anna Zaks return 0; 117229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 127229d0011766c174beffe6a846d78f448f845b39Anna Zaksint nested4() { 137229d0011766c174beffe6a846d78f448f845b39Anna Zaks return nested5(); 147229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 157229d0011766c174beffe6a846d78f448f845b39Anna Zaksint nested3() { 167229d0011766c174beffe6a846d78f448f845b39Anna Zaks return nested4(); 177229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 187229d0011766c174beffe6a846d78f448f845b39Anna Zaksint nested2() { 197229d0011766c174beffe6a846d78f448f845b39Anna Zaks return nested3(); 207229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 217229d0011766c174beffe6a846d78f448f845b39Anna Zaksint nested1() { 227229d0011766c174beffe6a846d78f448f845b39Anna Zaks return nested2(); 237229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 247229d0011766c174beffe6a846d78f448f845b39Anna Zaks 257229d0011766c174beffe6a846d78f448f845b39Anna Zaksvoid testNested() { 267229d0011766c174beffe6a846d78f448f845b39Anna Zaks clang_analyzer_eval(nested1() == 0); // expected-warning{{TRUE}} 277229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 287229d0011766c174beffe6a846d78f448f845b39Anna Zaks 297229d0011766c174beffe6a846d78f448f845b39Anna Zaks// Make sure we terminate a recursive path. 307229d0011766c174beffe6a846d78f448f845b39Anna Zaksint recursive() { 317229d0011766c174beffe6a846d78f448f845b39Anna Zaks return recursive(); 327229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 337229d0011766c174beffe6a846d78f448f845b39Anna Zaksint callRecursive() { 347229d0011766c174beffe6a846d78f448f845b39Anna Zaks return recursive(); 357229d0011766c174beffe6a846d78f448f845b39Anna Zaks} 364ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks 374ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaksint mutuallyRecursive1(); 384ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks 394ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaksint mutuallyRecursive2() { 404ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks return mutuallyRecursive1(); 414ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks} 424ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks 434ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaksint mutuallyRecursive1() { 444ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks return mutuallyRecursive2(); 454ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks} 464ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaksint callMutuallyRecursive() { 474ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks return mutuallyRecursive1(); 484ea9b89ff6dc50d5404eb56cad5e5870bce49ef2Anna Zaks} 49