1*b8ac93c7SKristof Umann // RUN: %clang_analyze_cc1 -verify %s \ 2*b8ac93c7SKristof Umann // RUN: -analyzer-checker=core \ 3*b8ac93c7SKristof Umann // RUN: -analyzer-config widen-loops=true \ 4*b8ac93c7SKristof Umann // RUN: -analyzer-config track-conditions=false \ 5*b8ac93c7SKristof Umann // RUN: -analyzer-max-loop 2 -analyzer-output=text 6*b8ac93c7SKristof Umann 7*b8ac93c7SKristof Umann namespace pr43102 { 8*b8ac93c7SKristof Umann class A { 9*b8ac93c7SKristof Umann public: 10*b8ac93c7SKristof Umann void m_fn1(); 11*b8ac93c7SKristof Umann }; 12*b8ac93c7SKristof Umann bool g; fn1()13*b8ac93c7SKristof Umannvoid fn1() { 14*b8ac93c7SKristof Umann A a; 15*b8ac93c7SKristof Umann A *b = &a; 16*b8ac93c7SKristof Umann 17*b8ac93c7SKristof Umann for (;;) { // expected-note{{Loop condition is true. Entering loop body}} 18*b8ac93c7SKristof Umann // expected-note@-1{{Loop condition is true. Entering loop body}} 19*b8ac93c7SKristof Umann // expected-note@-2{{Value assigned to 'b'}} 20*b8ac93c7SKristof Umann // no crash during bug report construction 21*b8ac93c7SKristof Umann 22*b8ac93c7SKristof Umann g = !b; // expected-note{{Assuming 'b' is null}} 23*b8ac93c7SKristof Umann b->m_fn1(); // expected-warning{{Called C++ object pointer is null}} 24*b8ac93c7SKristof Umann // expected-note@-1{{Called C++ object pointer is null}} 25*b8ac93c7SKristof Umann } 26*b8ac93c7SKristof Umann } 27*b8ac93c7SKristof Umann } // end of namespace pr43102 28