| /* { 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)) bool GetC (int *c) { |
| |
| A details_str; |
| if (get_url (&details_str)) |
| { |
| *c = get_time (); |
| return true; |
| } |
| |
| return false; |
| } |
| |
| void do_sth(); |
| void do_sth2(); |
| |
| void P (int64 t) |
| { |
| int cc; |
| if (!GetC (&cc)) /* return flag checked properly */ |
| return; |
| |
| if (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); |
| } |