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