// 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; | |
} |