|  | // RUN: %clang_analyze_cc1 -analyzer-checker=core -verify %s | 
|  | // expected-no-diagnostics | 
|  | class B { | 
|  | public: | 
|  | bool m; | 
|  | ~B() {} // The destructor ensures that the binary logical operator below is wrapped in the ExprWithCleanups. | 
|  | }; | 
|  | B foo(); | 
|  | int getBool(); | 
|  | int *getPtr(); | 
|  | int test() { | 
|  | int r = 0; | 
|  | for (int x = 0; x< 10; x++) { | 
|  | int *p = getPtr(); | 
|  | // Liveness info is not computed correctly due to the following expression. | 
|  | // This happens due to CFG being special cased for short circuit operators. | 
|  | // PR18159 | 
|  | if (p != 0 && getBool() && foo().m && getBool()) { | 
|  | r = *p; // no warning | 
|  | } | 
|  | } | 
|  | return r; | 
|  | } |