summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.pt/static11.C
blob: 867436a65931ad05cffa5bcf5975608d91400ca8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// 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 { target unwrapped } }

// 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;
}