1 // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s
2 // expected-no-diagnostics
3 class B {
4 public:
5   bool m;
~B()6   ~B() {} // The destructor ensures that the binary logical operator below is wrapped in the ExprWithCleanups.
7 };
8 B foo();
9 int getBool();
10 int *getPtr();
test()11 int test() {
12   int r = 0;
13   for (int x = 0; x< 10; x++) {
14     int *p = getPtr();
15     // Liveness info is not computed correctly due to the following expression.
16     // This happens due to CFG being special cased for short circuit operators.
17     // PR18159
18     if (p != 0 && getBool() && foo().m && getBool()) {
19       r = *p; // no warning
20     }
21   }
22   return r;
23 }
24