| // { dg-do run } |
| // prms-id: 12306 |
| |
| void *ptr1, *ptr2; |
| int fail = 0; |
| |
| extern "C" int printf(const char *...); |
| |
| class RWSlist { }; |
| |
| class RWSlistIterator { |
| public: |
| RWSlist *slist; |
| RWSlistIterator(RWSlist& s) { } |
| void toLast() { |
| if (ptr1 != (RWSlistIterator*)this) |
| fail = 5; |
| if (ptr2 != &(*this).slist) |
| fail = 6; |
| |
| if (0) printf("at %x %x\n", (RWSlistIterator*)this, &(*this).slist); |
| } |
| }; |
| |
| class RWCollectable { |
| }; |
| |
| class RWSlistCollectables : public RWSlist { |
| public: |
| RWSlistCollectables() { } |
| RWSlistCollectables(RWCollectable* a) { } |
| }; |
| |
| class RWIterator { }; |
| |
| class RWSlistCollectablesIterator : public RWIterator, public RWSlistIterator { |
| public: |
| RWSlistCollectablesIterator(RWSlistCollectables& s) : RWSlistIterator(s) { } |
| }; |
| |
| class Sim_Event_Manager { |
| public: |
| RWSlistCollectables scheduled_events_; |
| RWSlistCollectablesIterator last_posted_event_position_; |
| Sim_Event_Manager(); |
| void post_event(); |
| }; |
| |
| Sim_Event_Manager::Sim_Event_Manager () |
| :last_posted_event_position_(scheduled_events_) |
| { |
| } |
| |
| void Sim_Event_Manager::post_event () { |
| ptr1 = (RWSlistIterator*)&last_posted_event_position_; |
| ptr2 = &((RWSlistIterator*)&last_posted_event_position_)->slist; |
| if (0) printf("at %x %x\n", (RWSlistIterator*)&last_posted_event_position_, |
| &((RWSlistIterator*)&last_posted_event_position_)->slist); |
| if (ptr1 != (RWSlistIterator*)&last_posted_event_position_) |
| fail = 1; |
| if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist) |
| fail = 2; |
| if (0) printf("at %x ?%x\n", (RWSlistIterator*)&last_posted_event_position_, |
| &((RWSlistIterator&)last_posted_event_position_).slist); |
| if (ptr1 != (RWSlistIterator*)&last_posted_event_position_) |
| fail = 3; |
| if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist) |
| fail = 4; |
| last_posted_event_position_.toLast(); |
| } |
| |
| int main(int argc, char **argv) { |
| Sim_Event_Manager foo; |
| foo.post_event(); |
| return fail; |
| } |