| void GC() () |
| { |
| __asm__ __volatile__(""); |
| invisible (); |
| } |
| |
| |
| void suppressedFunction() () |
| { |
| GC (); |
| } |
| |
| |
| void halfSuppressedFunction() () |
| { |
| GC (); |
| } |
| |
| |
| void unsuppressedFunction() () |
| { |
| GC (); |
| } |
| |
| |
| Cell* f() () |
| { |
| struct Cell * D.2218; |
| struct GCInDestructor kaboom; |
| struct Cell cell; |
| struct Cell * cell1; |
| struct Cell * cell2; |
| struct Cell * cell3; |
| struct Cell * cell4; |
| struct Cell * cell5; |
| struct Cell * cell6; |
| |
| try |
| { |
| try |
| { |
| cell1 = &cell; |
| cell2 = &cell; |
| cell3 = &cell; |
| cell4 = &cell; |
| { |
| struct AutoSuppressGC nogc; |
| |
| try |
| { |
| AutoSuppressGC::AutoSuppressGC (&nogc); |
| try |
| { |
| suppressedFunction (); |
| halfSuppressedFunction (); |
| } |
| finally |
| { |
| AutoSuppressGC::~AutoSuppressGC (&nogc); |
| } |
| } |
| finally |
| { |
| nogc = {CLOBBER}; |
| } |
| } |
| foo (cell1); |
| halfSuppressedFunction (); |
| foo (cell2); |
| unsuppressedFunction (); |
| { |
| struct AutoSuppressGC nogc; |
| |
| try |
| { |
| AutoSuppressGC::AutoSuppressGC (&nogc); |
| try |
| { |
| |
| } |
| finally |
| { |
| AutoSuppressGC::~AutoSuppressGC (&nogc); |
| } |
| } |
| finally |
| { |
| nogc = {CLOBBER}; |
| } |
| } |
| foo (cell3); |
| cell5 = &cell; |
| foo (cell5); |
| cell6 = &cell; |
| D.2218 = cell6; |
| return D.2218; |
| } |
| finally |
| { |
| GCInDestructor::~GCInDestructor (&kaboom); |
| } |
| } |
| finally |
| { |
| kaboom = {CLOBBER}; |
| cell = {CLOBBER}; |
| } |
| } |
| |
| |
| AutoSuppressGC::AutoSuppressGC() (struct AutoSuppressGC * const this) |
| { |
| struct AutoSuppressGC_Child * D.2227; |
| |
| D.2227 = &this->helpImBeingSuppressed; |
| AutoSuppressGC_Child::AutoSuppressGC_Child (D.2227); |
| try |
| { |
| |
| } |
| catch |
| { |
| D.2227 = &this->helpImBeingSuppressed; |
| AutoSuppressGC_Child::~AutoSuppressGC_Child (D.2227); |
| } |
| } |
| |
| |
| AutoSuppressGC_Child::AutoSuppressGC_Child() (struct AutoSuppressGC_Child * const this) |
| { |
| AutoSuppressGC_Base::AutoSuppressGC_Base (this); |
| try |
| { |
| |
| } |
| catch |
| { |
| AutoSuppressGC_Base::~AutoSuppressGC_Base (this); |
| } |
| } |
| |
| |
| AutoSuppressGC_Base::AutoSuppressGC_Base() (struct AutoSuppressGC_Base * const this) |
| { |
| |
| } |
| |
| |
| AutoSuppressGC::~AutoSuppressGC() (struct AutoSuppressGC * const this) |
| { |
| struct AutoSuppressGC_Child * D.2228; |
| |
| { |
| try |
| { |
| try |
| { |
| |
| } |
| finally |
| { |
| D.2228 = &this->helpImBeingSuppressed; |
| AutoSuppressGC_Child::~AutoSuppressGC_Child (D.2228); |
| } |
| } |
| finally |
| { |
| MEM[(struct &)this] = {CLOBBER}; |
| } |
| } |
| <D.2211>: |
| } |
| |
| |
| AutoSuppressGC_Child::~AutoSuppressGC_Child() (struct AutoSuppressGC_Child * const this) |
| { |
| { |
| try |
| { |
| try |
| { |
| |
| } |
| finally |
| { |
| AutoSuppressGC_Base::~AutoSuppressGC_Base (this); |
| } |
| } |
| finally |
| { |
| MEM[(struct &)this] = {CLOBBER}; |
| } |
| } |
| <D.2082>: |
| } |
| |
| |
| AutoSuppressGC_Base::~AutoSuppressGC_Base() (struct AutoSuppressGC_Base * const this) |
| { |
| try |
| { |
| { |
| try |
| { |
| |
| } |
| finally |
| { |
| MEM[(struct &)this] = {CLOBBER}; |
| } |
| } |
| <D.2017>: |
| } |
| catch |
| { |
| <<<eh_must_not_throw (terminate)>>> |
| } |
| } |
| |
| |
| GCInDestructor::~GCInDestructor() (struct GCInDestructor * const this) |
| { |
| volatile int * xp.0; |
| |
| try |
| { |
| { |
| try |
| { |
| invisible (); |
| __asm__ __volatile__(""); |
| xp.0 = xp; |
| *xp.0 = 4; |
| GC (); |
| } |
| finally |
| { |
| MEM[(struct &)this] = {CLOBBER}; |
| } |
| } |
| <D.2120>: |
| } |
| catch |
| { |
| <<<eh_must_not_throw (terminate)>>> |
| } |
| } |
| |
| |