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