]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/warn-global-constructors.cpp
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / SemaCXX / warn-global-constructors.cpp
1 // RUN: %clang_cc1 -fsyntax-only -Wglobal-constructors %s -verify
2
3 int opaque_int();
4
5 namespace test0 {
6   // These should never require global constructors.
7   int a;
8   int b = 20;
9   float c = 5.0f;
10
11   // This global constructor is avoidable based on initialization order.
12   int d = b; // expected-warning {{global constructor}}
13
14   // These global constructors are unavoidable.
15   int e = opaque_int(); // expected-warning {{global constructor}}
16   int f = b; // expected-warning {{global constructor}}
17 }
18
19 namespace test1 {
20   struct A { int x; };
21   A a;
22   A b = A();
23   A c = { 10 };
24   A d = { opaque_int() }; // expected-warning {{global constructor}}
25   A e = A(A());
26   A f = A(a); // expected-warning {{global constructor}}
27   A g(a); // expected-warning {{global constructor}}
28   A h((A()));  // elided
29   A i((A(A()))); // elided
30 }
31
32 namespace test2 {
33   struct A { A(); };
34   A a; // expected-warning {{global constructor}}
35   A b[10]; // expected-warning {{global constructor}}
36   A c[10][10]; // expected-warning {{global constructor}}
37
38   A &d = a;
39   A &e = b[5];
40   A &f = c[5][7];
41 }
42
43 namespace test3 {
44   struct A { ~A(); };
45   A a; // expected-warning {{global destructor}}
46   A b[10]; // expected-warning {{global destructor}}
47   A c[10][10]; // expected-warning {{global destructor}}
48
49   A &d = a;
50   A &e = b[5];
51   A &f = c[5][7];
52 }
53
54 namespace test4 {
55   char a[] = "hello";
56   char b[6] = "hello";
57   char c[][6] = { "hello" };
58 }
59
60 namespace test5 {
61   struct A { A(); };
62
63   void f1() {
64     static A a;
65   }
66   void f2() {
67     static A& a = *new A;
68   }
69 }
70
71 namespace test6 {
72   struct A { ~A(); };
73
74   void f1() {
75     static A a;
76   }
77   void f2() {
78     static A& a = *new A;
79   }
80 }
81
82 namespace pr8095 {
83   struct Foo {
84     int x;
85     Foo(int x1) : x(x1) {}
86   };
87   void foo() {
88     static Foo a(0);
89   }
90
91   struct Bar {
92     ~Bar();
93   };
94   void bar() {
95     static Bar b;
96   }
97 }
98
99 namespace referencemember {
100   struct A { int &a; };
101   int a;
102   A b = { a };
103 }