1 // Written by David Hallas to trigger this bug in Valgrind:
2 // https://bugs.kde.org/show_bug.cgi?id=359133
3
4 #define CONCAT2(x, y) x##y
5 #define CONCAT(x, y) CONCAT2(x, y)
6
7 #define AllLetters ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ
8 #define TemplateName(name) CONCAT(AllLetters, name)
9 #define TemplateDef(name) class TemplateName(name) {};
10
11 TemplateDef(1)
12 TemplateDef(2)
13 TemplateDef(3)
14 TemplateDef(4)
15 TemplateDef(5)
16 TemplateDef(6)
17 TemplateDef(7)
18 TemplateDef(8)
19 TemplateDef(9)
20 TemplateDef(10)
21 TemplateDef(11)
22 TemplateDef(12)
23 TemplateDef(13)
24 TemplateDef(14)
25 TemplateDef(15)
26 TemplateDef(16)
27 TemplateDef(17)
28 TemplateDef(18)
29 TemplateDef(19)
30 TemplateDef(20)
31 TemplateDef(21)
32 TemplateDef(22)
33 TemplateDef(23)
34 TemplateDef(24)
35 TemplateDef(25)
36 TemplateDef(26)
37 TemplateDef(27)
38 TemplateDef(28)
39 TemplateDef(29)
40 TemplateDef(30)
41 TemplateDef(31)
42 TemplateDef(32)
43 TemplateDef(33)
44 TemplateDef(34)
45 TemplateDef(35)
46 TemplateDef(36)
47 TemplateDef(37)
48 TemplateDef(38)
49 TemplateDef(39)
50 TemplateDef(40)
51 TemplateDef(41)
52 TemplateDef(42)
53 TemplateDef(43)
54 TemplateDef(44)
55 TemplateDef(45)
56 TemplateDef(46)
57 TemplateDef(47)
58 TemplateDef(48)
59 TemplateDef(49)
60 TemplateDef(50)
61
62 class MyTemplate {
63 public:
64 template<typename... T>
65 void foo();
66 };
67
68 template<>
69 void MyTemplate::foo<
70 TemplateName(1),
71 TemplateName(2),
72 TemplateName(3),
73 TemplateName(4),
74 TemplateName(5),
75 TemplateName(6),
76 TemplateName(7),
77 TemplateName(8),
78 TemplateName(9),
79 TemplateName(10),
80 TemplateName(11),
81 TemplateName(12),
82 TemplateName(13),
83 TemplateName(14),
84 TemplateName(15),
85 TemplateName(16),
86 TemplateName(17),
87 TemplateName(18),
88 TemplateName(19),
89 TemplateName(20),
90 TemplateName(21),
91 TemplateName(22),
92 TemplateName(23),
93 TemplateName(24),
94 TemplateName(25),
95 TemplateName(26),
96 TemplateName(27),
97 TemplateName(28),
98 TemplateName(29),
99 TemplateName(30),
100 TemplateName(31),
101 TemplateName(32),
102 TemplateName(33),
103 TemplateName(34),
104 TemplateName(35),
105 TemplateName(36),
106 TemplateName(37),
107 TemplateName(38),
108 TemplateName(39),
109 TemplateName(40),
110 TemplateName(41),
111 TemplateName(42),
112 TemplateName(43),
113 TemplateName(44),
114 TemplateName(45),
115 TemplateName(46),
116 TemplateName(47),
117 TemplateName(48),
118 TemplateName(49),
119 TemplateName(50)
120 >();
121
122 template<>
foo()123 void MyTemplate::foo<
124 TemplateName(1),
125 TemplateName(2),
126 TemplateName(3),
127 TemplateName(4),
128 TemplateName(5),
129 TemplateName(6),
130 TemplateName(7),
131 TemplateName(8),
132 TemplateName(9),
133 TemplateName(10),
134 TemplateName(11),
135 TemplateName(12),
136 TemplateName(13),
137 TemplateName(14),
138 TemplateName(15),
139 TemplateName(16),
140 TemplateName(17),
141 TemplateName(18),
142 TemplateName(19),
143 TemplateName(20),
144 TemplateName(21),
145 TemplateName(22),
146 TemplateName(23),
147 TemplateName(24),
148 TemplateName(25),
149 TemplateName(26),
150 TemplateName(27),
151 TemplateName(28),
152 TemplateName(29),
153 TemplateName(30),
154 TemplateName(31),
155 TemplateName(32),
156 TemplateName(33),
157 TemplateName(34),
158 TemplateName(35),
159 TemplateName(36),
160 TemplateName(37),
161 TemplateName(38),
162 TemplateName(39),
163 TemplateName(40),
164 TemplateName(41),
165 TemplateName(42),
166 TemplateName(43),
167 TemplateName(44),
168 TemplateName(45),
169 TemplateName(46),
170 TemplateName(47),
171 TemplateName(48),
172 TemplateName(49),
173 TemplateName(50)
174 >()
175 {
176 }
177
main(int argc,char * argv[])178 int main(int argc, char* argv[])
179 {
180 MyTemplate instance;
181 instance.foo<
182 TemplateName(1),
183 TemplateName(2),
184 TemplateName(3),
185 TemplateName(4),
186 TemplateName(5),
187 TemplateName(6),
188 TemplateName(7),
189 TemplateName(8),
190 TemplateName(9),
191 TemplateName(10),
192 TemplateName(11),
193 TemplateName(12),
194 TemplateName(13),
195 TemplateName(14),
196 TemplateName(15),
197 TemplateName(16),
198 TemplateName(17),
199 TemplateName(18),
200 TemplateName(19),
201 TemplateName(20),
202 TemplateName(21),
203 TemplateName(22),
204 TemplateName(23),
205 TemplateName(24),
206 TemplateName(25),
207 TemplateName(26),
208 TemplateName(27),
209 TemplateName(28),
210 TemplateName(29),
211 TemplateName(30),
212 TemplateName(31),
213 TemplateName(32),
214 TemplateName(33),
215 TemplateName(34),
216 TemplateName(35),
217 TemplateName(36),
218 TemplateName(37),
219 TemplateName(38),
220 TemplateName(39),
221 TemplateName(40),
222 TemplateName(41),
223 TemplateName(42),
224 TemplateName(43),
225 TemplateName(44),
226 TemplateName(45),
227 TemplateName(46),
228 TemplateName(47),
229 TemplateName(48),
230 TemplateName(49),
231 TemplateName(50)
232 >();
233 return 0;
234 }
235