/* { dg-do compile } */ /* { dg-options "-Wuninitialized -O2" } */ typedef long long int64; void incr (); bool is_valid (int); int get_time (); class A { public: A (); ~A () { if (I) delete I; } private: int* I; }; bool get_url (A *); class M { public: __attribute__ ((always_inline)) int GetC (int *c) { A details_str; if (!get_url (&details_str)) { incr (); return 1; } *c = get_time (); return -1; } void do_sth(); void do_sth2(); void P (int64 t) { int cc; /* { dg-bogus "uninitialized" "uninitialized variable warning" } */ if (GetC (&cc) >= 0 ) return; if (t && cc <= 0 ) /* { dg-bogus "uninitialized" "uninitialized variable warning" } */ { this->do_sth(); return; } do_sth2(); } }; M* m; void foo(int x) { m = new M; m->P(x); }