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 Umann void 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