| // Some targets (e.g. those with "set_board_info needs_status_wrapper 1" |
| // in their dejagnu baseboard description) require that the status is |
| // final when exit is entered (or main returns), and not "overruled" by a |
| // destructor calling _exit. It's not really worth it to handle that. |
| // { dg-do run { xfail mmix-knuth-mmixware xtensa-*-elf* arm*-*-elf arm*-*-eabi } } |
| |
| // Bug: g++ was failing to destroy C<int>::a because it was using two |
| // different sentry variables for construction and destruction. |
| |
| extern "C" void _exit (int); |
| |
| int r = 1; |
| |
| struct A |
| { |
| void f(){}; |
| A(){ ++r; } |
| ~A(){ r -= 2; _exit (r); } |
| }; |
| |
| template<class T> |
| struct C |
| { |
| C(){ a.f(); } |
| static A a; |
| }; |
| |
| template <class T> A C<T>::a; |
| typedef C<int> B; |
| |
| int main() |
| { |
| C<int> c; |
| return r; |
| } |