1*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.DumpTraversal %s | FileCheck %s 2*67e74705SXin Li // RUN: %clang_cc1 -analyze -analyzer-checker=core,debug.DumpTraversal -DUSE_EXPR %s | FileCheck %s 3*67e74705SXin Li 4*67e74705SXin Li int a(); 5*67e74705SXin Li int b(); 6*67e74705SXin Li int c(); 7*67e74705SXin Li 8*67e74705SXin Li #ifdef USE_EXPR 9*67e74705SXin Li #define CHECK(x) ((x) & 1) 10*67e74705SXin Li #else 11*67e74705SXin Li #define CHECK(x) (x) 12*67e74705SXin Li #endif 13*67e74705SXin Li 14*67e74705SXin Li // CHECK: --BEGIN FUNCTION-- testRemoveDeadBindings()15*67e74705SXin Livoid testRemoveDeadBindings() { 16*67e74705SXin Li int i = a(); 17*67e74705SXin Li if (CHECK(i)) 18*67e74705SXin Li a(); 19*67e74705SXin Li else 20*67e74705SXin Li b(); 21*67e74705SXin Li 22*67e74705SXin Li // At this point the symbol bound to 'i' is dead. 23*67e74705SXin Li // The effects of a() and b() are identical (they both invalidate globals). 24*67e74705SXin Li // We should unify the two paths here and only get one end-of-path node. 25*67e74705SXin Li c(); 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li // CHECK: --END FUNCTION-- 29*67e74705SXin Li // CHECK-NOT: --END FUNCTION-- 30