1/* { dg-do run { target init_priority } } */
2
3extern "C" void abort ();
4
5int i;
6int j;
7
8void c1() __attribute__((constructor (500)));
9void c2() __attribute__((constructor (700)));
10void c3() __attribute__((constructor (600)));
11
12void c1() {
13  if (i++ != 0)
14    abort ();
15}
16
17void c2() {
18  if (i++ != 2)
19    abort ();
20}
21
22void c3() {
23  if (i++ != 1)
24    abort ();
25}
26
27void d1() __attribute__((destructor (500)));
28void d2() __attribute__((destructor (700)));
29void d3() __attribute__((destructor (600)));
30
31void d1() {
32  if (--i != 0)
33    abort ();
34}
35
36void d2() {
37  if (--i != 2)
38    abort ();
39}
40
41void d3() {
42  if (j != 2)
43    abort ();
44  if (--i != 1)
45    abort ();
46}
47
48void cd4() __attribute__((constructor (800), destructor (800)));
49
50void cd4() {
51  if (i != 3)
52    abort ();
53  ++j;
54}
55
56int main () {
57  if (i != 3)
58    return 1;
59  if (j != 1)
60    abort ();
61  return 0;
62}
63