| // PR target/6087 |
| // The code that moves around insns emitted by reg-stack to cope with |
| // exception edges lost the REG_DEAD note indicating a pop. Which |
| // eventually fills up the register stack resulting in Z == NaN. |
| |
| // { dg-do run } |
| // { dg-options "-O" } |
| |
| extern "C" void abort (); |
| |
| struct Base |
| { |
| virtual ~Base() {} |
| }; |
| |
| struct Foo : public Base |
| { |
| Foo (); |
| }; |
| |
| double x = 3; |
| double y = 4; |
| |
| double bar () |
| { |
| double z = x*x+y*y; |
| if (z != 25.0) |
| throw 1; |
| return z; |
| } |
| |
| Foo::Foo () |
| { |
| bar (); |
| } |
| |
| int main () |
| { |
| try { |
| int i; |
| for (i = 0; i < 10; ++i) |
| new Foo; |
| } catch (...) { |
| abort (); |
| } |
| return 0; |
| } |