]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gold/testsuite/constructor_test.cc
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gold / testsuite / constructor_test.cc
CommitLineData
d5026652
ILT
1// constructor_test.cc -- a test case for gold global constructors
2
250d07de 3// Copyright (C) 2006-2021 Free Software Foundation, Inc.
d5026652
ILT
4// Written by Ian Lance Taylor <iant@google.com>.
5
6// This file is part of gold.
7
8// This program is free software; you can redistribute it and/or modify
9// it under the terms of the GNU General Public License as published by
10// the Free Software Foundation; either version 3 of the License, or
11// (at your option) any later version.
12
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21// MA 02110-1301, USA.
22
23// This file just runs some global constructors and destructors. The
24// last global destructor verifies that the state is as expected, and
25// we assume that it runs correctly itself.
26
27#include <cassert>
28#include <cstdlib>
29
30// These counters let us verify the state.
31
32int c1_count;
33int c2_count;
34int atexit_count;
35
36// This class verifies that there are no objects left when it is
37// destroyed. Therefore, we can only have one instance of this
38// object.
39
40class c1
41{
42 public:
43 static int count;
44
45 c1()
46 { ++c1_count; }
47
48 ~c1()
49 {
50 --c1_count;
51 assert(c1_count == 0 && c2_count == 0 && atexit_count == 0);
52 }
53};
54
55c1 c1v;
56
57// A function called at atexit time.
58
59void
60atexit_function()
61{
62 --atexit_count;
63 assert(atexit_count == c2_count);
64}
65
66// A class which counts itself and also calls atexit.
67
68class c2
69{
70 public:
71 c2()
72 {
73 assert(atexit_count == c2_count);
74 ++c2_count;
75 atexit(atexit_function);
76 ++atexit_count;
77 }
78
79 ~c2()
80 { --c2_count; }
81};
82
83c2 c2v1;
84c2 c2v2;
85
86int
87main()
88{
89 return 0;
90}