annotate gcc/testsuite/gdc.test/runnable_cxx/extra-files/cppb.cpp @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 /*
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 GCC 5.1 introduced new implementations of std::string and std::list:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6 This causes e.g. std::string to be actually defined as
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7 std::__cxx11::string.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 On machines with GCC 5.1, this manifests as a linker error when
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 running the cppa.d / cppb.cpp test:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 cppa.o: In function `_D4cppa6test14FZv':
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 cppa.d:(.text._D4cppa6test14FZv+0x11): undefined reference to `foo14a(std::string*)'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 cppa.d:(.text._D4cppa6test14FZv+0x18): undefined reference to `foo14b(std::basic_string<int, std::char_traits<int>, std::allocator<int> >*)'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 cppa.d:(.text._D4cppa6test14FZv+0x3a): undefined reference to `foo14f(std::char_traits<char>*, std::string*, std::string*)'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 cppa.o: In function `_D4cppa7testeh3FZv':
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17 cppa.d:(.text._D4cppa7testeh3FZv+0x19): undefined reference to `throwle()'
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 collect2: error: ld returned 1 exit status
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 --- errorlevel 1
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 When the .cpp file is compiled with g++ 5.3.0, the actual function
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 signatures in the cppb.o object file are:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 foo14a(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 foo14b(std::__cxx11::basic_string<int, std::char_traits<int>, std::allocator<int> >*)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 foo14f(std::char_traits<char>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 Fortunately, it is easily possible to disable the new feature
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 by defining _GLIBCXX_USE_CXX11_ABI as 0 before including any standard
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 headers.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 #define _GLIBCXX_USE_CXX11_ABI 0
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 #include <stdio.h>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 #include <assert.h>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 #include <exception>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 #include <cstdarg>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 int foo(int i, int j, int k);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 int foob(int i, int j, int k)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 printf("i = %d\n", i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 printf("j = %d\n", j);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 printf("k = %d\n", k);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 assert(i == 1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 assert(j == 2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 assert(k == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 foo(i, j, k);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 return 7;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 class D *dthis;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61 class D
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64 virtual int bar(int i, int j, int k)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 printf("this = %p\n", this);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 assert(this == dthis);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 printf("D.bar: i = %d\n", i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 printf("D.bar: j = %d\n", j);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70 printf("D.bar: k = %d\n", k);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 assert(i == 9);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 assert(j == 10);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 assert(k == 11);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 return 8;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79 D* getD()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81 D *d = new D();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
82 dthis = d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
83 return d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
84 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
85
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
86 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
87
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
88 class E
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
89 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
90 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
91 virtual int bar(int i, int j, int k);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
92 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
93
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
94
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
95 int callE(E *e)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
96 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
97 return e->bar(11,12,13);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
98 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
99
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
100 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
101
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
102 void foo4(char *p)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
103 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
104 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
105
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
106 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
107
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
108 struct foo5 { int i; int j; void *p; };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
109
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
110 class bar5
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
111 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
112 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
113 virtual foo5 getFoo(int i){
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
114 printf("This = %p\n", this);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
115 foo5 f;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
116 f.i = 1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
117 f.j = 2 + i;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
118 f.p = (void*)this;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
119 return f;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
120 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
121 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
122
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
123 bar5* newBar()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
124 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
125 bar5* b = new bar5();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
126 printf("bar = %p\n", b);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
127 return b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
128 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
129
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
130
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
131 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
132
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
133 struct A11802;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
134 struct B11802;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
135
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
136 class C11802
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
137 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
138 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
139 virtual void fun(A11802 *);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
140 virtual void fun(B11802 *);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
141 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
142
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
143 class D11802 : public C11802
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
144 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
145 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
146 void fun(A11802 *);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
147 void fun(B11802 *);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
148 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
149
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
150 void test11802x(D11802 *c)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
151 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
152 c->fun((A11802 *)0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
153 c->fun((B11802 *)0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
154 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
155
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
156 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
157
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
158 typedef struct
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
159 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
160 int i;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
161 double d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
162 } S6;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
163
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
164 union S6_2
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
165 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
166 int i;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
167 double d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
168 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
169
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
170 enum S6_3
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
171 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
172 A, B
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
173 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
174
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
175
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
176 S6 foo6(void)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
177 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
178 S6 s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
179 s.i = 42;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
180 s.d = 2.5;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
181 return s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
182 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
183
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
184 S6_2 foo6_2(void)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
185 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
186 S6_2 s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
187 s.i = 42;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
188 return s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
189 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
190
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
191 S6_3 foo6_3(void)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
192 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
193 S6_3 s = A;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
194 return s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
195 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
196
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
197 extern "C" { int foosize6()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
198 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
199 return sizeof(S6);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
200 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
201 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
202
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
203 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
204
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
205 typedef struct
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
206 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
207 int i;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
208 long long d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
209 } S7;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
210
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
211 extern "C" { int foo7()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
212 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
213 return sizeof(S7);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
214 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
215 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
216
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
217 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
218
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
219 struct S13955a
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
220 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
221 float a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
222 double b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
223 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
224
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
225 struct S13955b
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
226 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
227 double a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
228 float b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
229 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
230
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
231 struct S13955c
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
232 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
233 float a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
234 float b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
235 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
236
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
237 struct S13955d
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
238 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
239 double a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
240 double b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
241 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
242
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
243 void check13955(S13955a a, S13955b b, S13955c c, S13955d d);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
244
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
245 void func13955(S13955a a, S13955b b, S13955c c, S13955d d)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
246 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
247 check13955(a, b, c, d);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
248 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
249
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
250 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
251
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
252 struct Struct10071
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
253 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
254 void *p;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
255 long double r;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
256 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
257
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
258 size_t offset10071()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
259 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
260 Struct10071 s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
261 return (char *)&s.r - (char *)&s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
262 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
263
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
264 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
265
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
266 void foo8(const char *p)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
267 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
268 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
269
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
270 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
271 // 4059
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
272
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
273 struct elem9 { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
274 void foobar9(elem9*, elem9*) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
275
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
276 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
277 // 5148
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
278
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
279 void foo10(const char*, const char*) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
280 void foo10(const int, const int) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
281 void foo10(const char, const char) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
282 void foo10(bool, bool) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
283
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
284 struct MyStructType { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
285 void foo10(const MyStructType s, const MyStructType t) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
286
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
287 enum MyEnumType { onemember };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
288 void foo10(const MyEnumType s, const MyEnumType t) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
289
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
290 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
291
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
292 namespace N11 { namespace M { void bar11() { } } }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
293
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
294 namespace A11 { namespace B { namespace C { void bar() { } } } }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
295
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
296 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
297
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
298 void myvprintfx(const char* format, va_list);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
299
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
300 void myvprintf(const char* format, va_list va)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
301 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
302 myvprintfx(format, va);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
303 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
304
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
305 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
306
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
307 class C13161
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
308 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
309 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
310 virtual void dummyfunc() {}
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
311 long long val_5;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
312 unsigned val_9;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
313 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
314
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
315 class Test : public C13161
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
316 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
317 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
318 unsigned val_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
319 long long val_1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
320 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
321
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
322 size_t getoffset13161()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
323 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
324 Test s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
325 return (char *)&s.val_0 - (char *)&s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
326 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
327
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
328 class C13161a
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
329 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
330 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
331 virtual void dummyfunc() {}
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
332 long double val_5;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
333 unsigned val_9;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
334 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
335
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
336 class Testa : public C13161a
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
337 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
338 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
339 bool val_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
340 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
341
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
342 size_t getoffset13161a()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
343 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
344 Testa s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
345 return (char *)&s.val_0 - (char *)&s;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
346 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
347
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
348 /****************************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
349
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
350 #if __linux__ || __APPLE__ || __FreeBSD__
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
351 #include <memory>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
352 #include <vector>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
353 #include <string>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
354
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
355 #if __linux__
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
356 template struct std::allocator<int>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
357 template struct std::vector<int>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
358
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
359 void foo15()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
360 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
361 std::allocator<int>* p;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
362 p->deallocate(0, 0);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
363 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
364
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
365 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
366
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
367 // _Z5foo14PSt6vectorIiSaIiEE
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
368 void foo14(std::vector<int, std::allocator<int> > *p) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
369
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
370 void foo14a(std::basic_string<char> *p) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
371 void foo14b(std::basic_string<int> *p) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
372 void foo14c(std::basic_istream<char> *p) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
373 void foo14d(std::basic_ostream<char> *p) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
374 void foo14e(std::basic_iostream<char> *p) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
375
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
376 void foo14f(std::char_traits<char>* x, std::basic_string<char> *p, std::basic_string<char> *q) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
377
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
378 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
379
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
380 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
381
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
382 struct S13956
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
383 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
384 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
385
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
386 void check13956(S13956 arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
387
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
388 void func13956(S13956 arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
389 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
390 check13956(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
391 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
392
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
393 /**************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
394
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
395 wchar_t f13289_cpp_wchar_t(wchar_t ch)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
396 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
397 if (ch <= L'z' && ch >= L'a')
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
398 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
399 return ch - (L'a' - L'A');
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
400 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
401 else
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
402 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
403 return ch;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
404 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
405 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
406
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
407 #if __linux__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun || __NetBSD__
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
408 unsigned short f13289_d_wchar(unsigned short ch);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
409 wchar_t f13289_d_dchar(wchar_t ch);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
410 #elif _WIN32
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
411 wchar_t f13289_d_wchar(wchar_t ch);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
412 unsigned int f13289_d_dchar(unsigned int ch);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
413 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
414
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
415 bool f13289_cpp_test()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
416 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
417 #if __linux__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun || __NetBSD__
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
418 if (!(f13289_d_wchar((unsigned short)'c') == (unsigned short)'C')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
419 if (!(f13289_d_wchar((unsigned short)'D') == (unsigned short)'D')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
420 if (!(f13289_d_dchar(L'e') == L'E')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
421 if (!(f13289_d_dchar(L'F') == L'F')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
422 return true;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
423 #elif _WIN32
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
424 if (!(f13289_d_wchar(L'c') == L'C')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
425 if (!(f13289_d_wchar(L'D') == L'D')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
426 if (!(f13289_d_dchar((unsigned int)'e') == (unsigned int)'E')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
427 if (!(f13289_d_dchar((unsigned int)'F') == (unsigned int)'F')) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
428 return true;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
429 #else
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
430 return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
431 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
432 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
433
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
434 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
435
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
436 long double testld(long double ld)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
437 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
438 assert(ld == 5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
439 return ld + 1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
440 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
441
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
442 long double testldld(long double ld1, long double ld2)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
443 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
444 assert(ld1 == 5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
445 return ld2 + 1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
446 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
447
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
448 long testl(long lng)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
449 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
450 assert(lng == 5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
451 return lng + sizeof(long);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
452 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
453
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
454 unsigned long testul(unsigned long ul)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
455 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
456 assert(ul == 5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
457 return ul + sizeof(unsigned long);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
458 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
459
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
460 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
461
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
462 struct S13707
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
463 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
464 void* a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
465 void* b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
466 S13707(void *a, void* b)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
467 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
468 this->a = a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
469 this->b = b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
470 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
471 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
472
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
473 S13707 func13707()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
474 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
475 S13707 pt(NULL, NULL);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
476 return pt;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
477 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
478
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
479 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
480
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
481 template <int x> struct S13932
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
482 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
483 int member;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
484 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
485
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
486 void func13932(S13932<-1> s) {}
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
487
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
488 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
489
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
490 namespace N13337 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
491 namespace M13337 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
492 struct S13337 { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
493 void foo13337(S13337 s) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
494 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
495 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
496
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
497 /****************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
498 // 14195
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
499
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
500 template <typename T>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
501 struct Delegate1 {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
502
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
503 template <typename R1>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
504 struct Delegate1 < R1() > {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
505
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
506 template <typename T1, typename T2>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
507 struct Delegate2 {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
508
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
509 template < typename R1, typename T1, typename T2, typename R2, typename T3, typename T4 >
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
510 struct Delegate2<R1(T1, T2), R2(T3, T4)> {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
511
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
512 void test14195a(Delegate1<void()> func) {}
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
513
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
514 void test14195b(Delegate2<int(float, double), int(float, double)> func) {}
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
515
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
516 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
517 // 14200
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
518
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
519 void test14200a(int a) {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
520 void test14200b(float a, int b, double c) {};
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
521
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
522 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
523 // 14956
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
524
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
525 namespace std {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
526 namespace N14956 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
527 struct S14956 { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
528 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
529 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
530
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
531 void test14956(std::N14956::S14956 s) { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
532
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
533 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
534 // check order of overloads in vtable
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
535
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
536 class Statement;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
537 class ErrorStatement;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
538 class PeelStatement;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
539 class ExpStatement;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
540 class DtorExpStatement;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
541
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
542 class Visitor
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
543 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
544 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
545 virtual int visit(Statement*) { return 1; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
546 virtual int visit(ErrorStatement*) { return 2; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
547 virtual int visit(PeelStatement*) { return 3; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
548 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
549
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
550 class Visitor2 : public Visitor
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
551 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
552 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
553 virtual int visit2(ExpStatement*) { return 4; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
554 virtual int visit2(DtorExpStatement*) { return 5; }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
555 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
556
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
557 bool testVtableCpp(Visitor2* sv)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
558 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
559 if (sv->visit((Statement*)0) != 1) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
560 if (sv->visit((ErrorStatement*)0) != 2) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
561 if (sv->visit((PeelStatement*)0) != 3) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
562 if (sv->visit2((ExpStatement*)0) != 4) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
563 if (sv->visit2((DtorExpStatement*)0) != 5) return false;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
564 return true;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
565 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
566
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
567 Visitor2 inst;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
568
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
569 Visitor2* getVisitor2()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
570 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
571 return &inst;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
572 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
573
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
574 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
575 // issues detected by fuzzer
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
576 #if _LP64
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
577 #define longlong long
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
578 #else
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
579 #define longlong long long
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
580 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
581
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
582 void fuzz1_checkValues(longlong arg10, longlong arg11, bool arg12);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
583 void fuzz1_cppvararg(longlong arg10, longlong arg11, bool arg12)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
584 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
585 fuzz1_checkValues(arg10, arg11, arg12);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
586 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
587
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
588 void fuzz2_checkValues(unsigned longlong arg10, unsigned longlong arg11, bool arg12);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
589 void fuzz2_cppvararg(unsigned longlong arg10, unsigned longlong arg11, bool arg12)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
590 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
591 fuzz2_checkValues(arg10, arg11, arg12);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
592 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
593
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
594 #if __linux__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun || __NetBSD__
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
595 #define wchar unsigned short
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
596 #elif _WIN32
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
597 #define wchar wchar_t
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
598 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
599
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
600 void fuzz3_checkValues(wchar arg10, wchar arg11, bool arg12);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
601 void fuzz3_cppvararg(wchar arg10, wchar arg11, bool arg12)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
602 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
603 fuzz3_checkValues(arg10, arg11, arg12);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
604 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
605
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
606 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
607
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
608 void throwit()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
609 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
610 #if _WIN32
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
611 #else
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
612 std::exception se;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
613 throw se;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
614 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
615 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
616
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
617 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
618
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
619 #if linux
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
620 #include <stdexcept>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
621
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
622 void throwle()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
623 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
624 std::logic_error le("test");
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
625 throw le;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
626 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
627
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
628 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
629
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
630 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
631 // 15579
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
632
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
633 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
634 // 15579
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
635
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
636 class Base
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
637 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
638 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
639 //virtual ~Base() {}
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
640 virtual void base();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
641 unsigned char x;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
642 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
643
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
644 class Interface
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
645 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
646 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
647 virtual int MethodCPP() = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
648 virtual int MethodD() = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
649 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
650
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
651 class Derived : public Base, public Interface
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
652 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
653 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
654 Derived();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
655 short y;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
656 int MethodCPP();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
657 #if _WIN32 || _WIN64
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
658 int MethodD();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
659 virtual int Method();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
660 #else
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
661 int MethodD() { return 3; } // need def or vtbl[] is not generated
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
662 virtual int Method() { return 6; } // need def or vtbl[] is not generated
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
663 #endif
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
664 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
665
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
666 void Base::base() { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
667 int Derived::MethodCPP() {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
668 printf("Derived::MethodCPP() this = %p, x = %d, y = %d\n", this, x, y);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
669 assert(x == 4 || x == 7);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
670 assert(y == 5 || y == 8);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
671 return 30;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
672 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
673 Derived::Derived() { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
674
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
675
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
676 Derived *cppfoo(Derived *d)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
677 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
678 printf("cppfoo(): d = %p\n", d);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
679 assert(d->x == 4);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
680 assert(d->y == 5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
681 assert(d->MethodD() == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
682 assert(d->MethodCPP() == 30);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
683 assert(d->Method() == 6);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
684
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
685 d = new Derived();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
686 d->x = 7;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
687 d->y = 8;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
688 assert(d->MethodD() == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
689 assert(d->MethodCPP() == 30);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
690 assert(d->Method() == 6);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
691 printf("d1 = %p\n", d);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
692 return d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
693 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
694
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
695 Interface *cppfooi(Interface *i)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
696 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
697 printf("cppfooi(): i = %p\n", i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
698 assert(i->MethodD() == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
699 assert(i->MethodCPP() == 30);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
700
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
701 Derived *d = new Derived();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
702 d->x = 7;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
703 d->y = 8;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
704 printf("d = %p, i = %p\n", d, (Interface *)d);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
705 return d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
706 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
707
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
708 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
709 // 15610
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
710
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
711 class Base2
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
712 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
713 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
714 int i;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
715 virtual void baser() { }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
716 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
717
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
718 class Interface2
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
719 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
720 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
721 virtual void f() = 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
722 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
723
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
724 class Derived2 : public Base2, public Interface2
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
725 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
726 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
727 void f();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
728 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
729
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
730 void Derived2::f()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
731 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
732 printf("Derived2::f() this = %p i = %d\n", this, i);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
733 assert(i == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
734 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
735
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
736 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
737 // 15455
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
738
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
739 struct X6
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
740 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
741 unsigned short a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
742 unsigned short b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
743 unsigned char c;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
744 unsigned char d;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
745 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
746
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
747 struct X8
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
748 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
749 unsigned short a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
750 X6 b;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
751 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
752
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
753 void test15455b(X8 s)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
754 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
755 assert(sizeof(X6) == 6);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
756 assert(sizeof(X8) == 8);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
757 assert(s.a == 1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
758 assert(s.b.a == 2);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
759 assert(s.b.b == 3);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
760 assert(s.b.c == 4);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
761 assert(s.b.d == 5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
762 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
763
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
764 /******************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
765 // 15372
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
766
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
767 template <typename T>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
768 int foo15372(int value)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
769 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
770 return value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
771 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
772
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
773 void test15372b()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
774 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
775 int t = foo15372<int>(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
776 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
777
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
778 /****************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
779 // 15576
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
780
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
781 namespace ns15576
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
782 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
783 int global15576;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
784
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
785 namespace ns
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
786 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
787 int n_global15576;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
788 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
789 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
790
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
791 /****************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
792 // 15802
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
793
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
794 template <typename T>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
795 class Foo15802
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
796 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
797 public:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
798 static int boo(int value)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
799 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
800 return value;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
801 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
802 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
803
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
804 void test15802b()
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
805 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
806 int t = Foo15802<int>::boo(1);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
807 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
808
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
809
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
810 /****************************************/
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
811 // 16536 - mangling mismatch on OSX
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
812
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
813 #if defined(__APPLE__)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
814 __UINTMAX_TYPE__ pass16536(__UINTMAX_TYPE__ a)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
815 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
816 return a;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
817 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
818 #endif