summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C
blob: b10727ef371706ad9e43603067dba7220db22501 (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
36
37
38
39
40
41
42
43
44
45
46
47
// { dg-do run  }
// prms-id: 9732

int count;
int bail = 0;

extern "C" void abort (void);
extern "C" void _exit (int);


struct base {
  base () { ++count; }
  ~base () { --count; }
  base(const base&o) { ++count; }
};

class D {
public:
  ~D() {
    if (bail++)
      {
	// On some Linux boxes, we run the dtor for d twice,
	// once before exit, and once after!
	abort ();
      }
    else
      {
	if (count != 0)
	  _exit (1);
	_exit (0);
      }
  }
} d;

base base_object;

base base_returning_function ();

const base& base_ref = base_returning_function ();

int main () {
}

base base_returning_function () {
  base local_base_object;
  return local_base_object;
}