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