| // |
| // 11588.cpp |
| // |
| |
| #include <iostream> |
| |
| class StgInfoTable {}; |
| |
| class StgHeader |
| { |
| private: |
| StgInfoTable* info; |
| public: |
| StgHeader() |
| { |
| info = new StgInfoTable(); |
| } |
| ~StgHeader() |
| { |
| delete info; |
| } |
| }; |
| |
| class StgClosure |
| { |
| private: |
| StgHeader header; |
| StgClosure* payload[1]; |
| public: |
| StgClosure(bool make_payload = true) |
| { |
| if (make_payload) |
| payload[0] = new StgClosure(false); |
| else |
| payload[0] = NULL; |
| } |
| ~StgClosure() |
| { |
| if (payload[0]) |
| delete payload[0]; |
| } |
| }; |
| |
| typedef unsigned long long int ptr_type; |
| |
| int main() |
| { |
| StgClosure* r14_ = new StgClosure(); |
| r14_ = (StgClosure*)(((ptr_type)r14_ | 0x01)); // set the LSB to 1 for tagging |
| ptr_type r14 = (ptr_type)r14_; |
| int x = 0; |
| x = 3; |
| return (x-1); // Set breakpoint here. |
| } |