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