| /* { dg-options "-O2 " } */ |
| |
| class Parent |
| { |
| public: |
| Parent *object; |
| |
| Parent() |
| { |
| object = this; |
| } |
| |
| virtual void recurse (int t) = 0; |
| }; |
| |
| class Child : public Parent |
| { |
| |
| Parent * |
| get_object () |
| { |
| return this; |
| } |
| |
| public: |
| virtual void |
| recurse (int t) |
| { |
| if (t != 10) |
| for (int i = 0; i < 5; ++i) |
| get_object()->recurse(t + 1); |
| }; |
| }; |
| |
| Parent * |
| create_object () |
| { |
| Child *mod = new Child; |
| return mod; |
| } |
| |
| int |
| main (int argc, char **argv) |
| { |
| Parent *parent = create_object (); |
| |
| for (int i = 0; i < 5; ++i) |
| { |
| parent->recurse (0); |
| } |
| |
| return 0; |
| } |
| |