Home | History | Annotate | Download | only in tests
      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<>
    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 
    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