]>
Commit | Line | Data |
---|---|---|
4b2e63de | 1 | // { dg-do compile { target c++11 } } |
4f4b0ab8 | 2 | // { dg-skip-if "" { powerpc-ibm-aix* } } |
4b2e63de | 3 | // { dg-options "-gpubnames -gdwarf-4 -fno-debug-types-section -dA" } |
56b88c0f | 4 | // { dg-final { scan-assembler-times "\.section\[\t \]\[^\n\]*debug_pubnames" 1 } } |
b7e331f8 AS |
5 | // { dg-final { scan-assembler "\"\\(anonymous namespace\\)\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } |
6 | // { dg-final { scan-assembler "\"one\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
7 | // { dg-final { scan-assembler "\"one::G_A\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
8 | // { dg-final { scan-assembler "\"one::G_B\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
9 | // { dg-final { scan-assembler "\"one::G_C\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
10 | // { dg-final { scan-assembler "\"one::\\(anonymous namespace\\)\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
11 | // { dg-final { scan-assembler "\"two\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
12 | // { dg-final { scan-assembler "\"F_A\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
13 | // { dg-final { scan-assembler "\"F_B\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
14 | // { dg-final { scan-assembler "\"F_C\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
15 | // { dg-final { scan-assembler "\"inline_func_1\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
16 | // { dg-final { scan-assembler "\"one::c1::c1\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
17 | // { dg-final { scan-assembler "\"one::c1::~c1\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
18 | // { dg-final { scan-assembler "\"one::c1::val\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
19 | // { dg-final { scan-assembler "\"check_enum\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
20 | // { dg-final { scan-assembler "\"main\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
21 | // { dg-final { scan-assembler "\"two::c2<int>::c2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
22 | // { dg-final { scan-assembler "\"two::c2<double>::c2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
23 | // { dg-final { scan-assembler "\"two::c2<int const\\\*>::c2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
24 | // { dg-final { scan-assembler "\"check<one::c1>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
25 | // { dg-final { scan-assembler "\"check<two::c2<int> \\>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
26 | // { dg-final { scan-assembler "\"check<two::c2<double> \\>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
27 | // { dg-final { scan-assembler "\"check<two::c2<int const\\\*> \\>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
28 | // { dg-final { scan-assembler "\"two::c2<int>::val\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
29 | // { dg-final { scan-assembler "\"two::c2<double>::val\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
30 | // { dg-final { scan-assembler "\"two::c2<int const\\\*>::val\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
31 | // { dg-final { scan-assembler "\"__static_initialization_and_destruction_0\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
32 | // { dg-final { scan-assembler "\"two::c2<int>::~c2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
33 | // { dg-final { scan-assembler "\"two::c2<double>::~c2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
34 | // { dg-final { scan-assembler "\"two::c2<int const\\\*>::~c2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
b7e331f8 AS |
35 | // { dg-final { scan-assembler "\"anonymous_union_var\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } |
36 | // { dg-final { scan-assembler "\"two::ci\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
37 | // { dg-final { scan-assembler "\"two::c2v1\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
38 | // { dg-final { scan-assembler "\"two::c2v2\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
39 | // { dg-final { scan-assembler "\"two::c2v3\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
40 | // { dg-final { scan-assembler "\"one::c1v\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
41 | // { dg-final { scan-assembler "\"one::\\(anonymous namespace\\)::one_anonymous_var\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
42 | // { dg-final { scan-assembler "\"\\(anonymous namespace\\)::c1_count\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
43 | // { dg-final { scan-assembler "\"\\(anonymous namespace\\)::c2_count\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
44 | // { dg-final { scan-assembler "\"\\(anonymous namespace\\)::three\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
45 | // { dg-final { scan-assembler "\"\\(anonymous namespace\\)::three::anonymous_three_var\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
56b88c0f | 46 | // { dg-final { scan-assembler-times "\.section\[\t \]\[^\n\]*debug_pubtypes" 1 } } |
b7e331f8 AS |
47 | // { dg-final { scan-assembler "\"one::G\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } |
48 | // { dg-final { scan-assembler "\"one::c1\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
49 | // { dg-final { scan-assembler "\"int\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
50 | // { dg-final { scan-assembler "\"one::c1\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
51 | // { dg-final { scan-assembler "\"two::c2<int>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
52 | // { dg-final { scan-assembler "\"two::c2<int>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
53 | // { dg-final { scan-assembler "\"two::c2<double>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
54 | // { dg-final { scan-assembler "\"double\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
55 | // { dg-final { scan-assembler "\"two::c2<double>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
56 | // { dg-final { scan-assembler "\"two::c2<int const\\\*>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
57 | // { dg-final { scan-assembler "\"two::c2<int const\\\*>\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
58 | // { dg-final { scan-assembler "\"F\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
59 | // { dg-final { scan-assembler "\"anonymous_union_container\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
60 | // { dg-final { scan-assembler "\"bool\\\\0\"+\[ \t\]+\[#;/|@!]+\[ \t\]+external name" } } | |
924ef62b SA |
61 | |
62 | namespace | |
63 | { | |
64 | int c1_count; | |
65 | int c2_count; | |
66 | ||
67 | namespace three | |
68 | { | |
69 | int anonymous_three_var; | |
70 | } | |
71 | }; | |
72 | ||
73 | namespace one | |
74 | { | |
75 | ||
76 | enum G | |
77 | { | |
78 | G_A, | |
79 | G_B, | |
80 | G_C | |
81 | }; | |
82 | ||
83 | namespace { | |
84 | int one_anonymous_var; | |
85 | } | |
86 | ||
87 | class c1 | |
88 | { | |
89 | public: | |
90 | static int count; | |
91 | ||
92 | c1() | |
93 | { ++c1_count; } | |
94 | ||
95 | ~c1() | |
96 | { | |
97 | --c1_count; | |
98 | } | |
99 | ||
100 | enum E | |
101 | { | |
102 | E_A, | |
103 | E_B, | |
104 | E_C, | |
105 | }; | |
106 | ||
107 | int | |
108 | val() | |
109 | { return E_A; } | |
110 | }; | |
111 | ||
112 | c1 c1v; | |
113 | }; | |
114 | ||
115 | namespace two | |
116 | { | |
117 | const int ci = 3; | |
118 | ||
119 | template <typename T> | |
120 | class c2 | |
121 | { | |
122 | public: | |
123 | c2(T t) | |
124 | : t_(t) | |
125 | { | |
126 | ++c2_count; | |
127 | } | |
128 | ||
129 | ~c2() | |
130 | { --c2_count; } | |
131 | ||
132 | T | |
133 | val() | |
134 | { return this->t_; } | |
135 | ||
136 | T t_; | |
137 | }; | |
138 | ||
139 | c2<int> c2v1(1); | |
140 | c2<double> c2v2(2.0); | |
141 | c2<int const*> c2v3(&ci); | |
142 | }; | |
143 | ||
144 | enum F | |
145 | { | |
146 | F_A, | |
147 | F_B, | |
148 | F_C | |
149 | }; | |
150 | ||
151 | template <class C> | |
152 | bool | |
153 | check(C* c) | |
154 | { return c->val() == 0; } | |
155 | ||
156 | bool | |
157 | check_enum(int i) | |
158 | { return i > 0; } | |
159 | ||
160 | struct anonymous_union_container { | |
161 | union { | |
162 | struct astruct { | |
163 | int a; | |
164 | }; | |
165 | int b; | |
166 | } u; | |
167 | }; | |
168 | ||
169 | anonymous_union_container anonymous_union_var; | |
170 | ||
171 | #ifdef __GNUC__ | |
172 | #define ALWAYS_INLINE __attribute__((always_inline)) | |
173 | #else | |
174 | #define ALWAYS_INLINE | |
175 | #endif | |
176 | ||
177 | static inline ALWAYS_INLINE int | |
178 | inline_func_1(int i) | |
179 | { return i * 17; } | |
180 | ||
181 | int | |
182 | main() | |
183 | { | |
184 | F f = F_A; | |
185 | one::G g = one::G_A; | |
186 | check_enum(f); | |
187 | check_enum(g); | |
188 | check(&one::c1v); | |
189 | check(&two::c2v1); | |
190 | check(&two::c2v2); | |
191 | check(&two::c2v3); | |
192 | anonymous_union_var.u.b = inline_func_1(3) - 51; | |
193 | return anonymous_union_var.u.b; | |
194 | } |