145
|
1 // { dg-do compile { target c++2a } }
|
|
2
|
|
3 struct A1 { char c[5]; };
|
|
4
|
|
5 template <A1> struct B { };
|
|
6
|
|
7 // All of the following name the same type.
|
|
8 typedef B<A1{ }> A______;
|
|
9 typedef B<A1{ { 0 } }> A_Z____;
|
|
10 typedef B<A1{ { 0, 0 } }> A_ZZ___;
|
|
11 typedef B<A1{ { 0, 0, 0 } }> A_ZZZ__;
|
|
12 typedef B<A1{ { 0, 0, 0, 0 } }> A_ZZZZ_;
|
|
13 typedef B<A1{ { 0, 0, 0, 0, 0 } }> A_ZZZZZ;
|
|
14
|
|
15 // Verify that the types mangle the same.
|
|
16 void a______ (A______) { }
|
|
17 // { dg-final { scan-assembler "_Z7a______1BIXtl2A1EEE" } }
|
|
18
|
|
19 void a_z____ (A_Z____) { }
|
|
20 // { dg-final { scan-assembler "_Z7a_z____1BIXtl2A1EEE" } }
|
|
21
|
|
22 void a_zz___ (A_ZZ___) { }
|
|
23 // { dg-final { scan-assembler "_Z7a_zz___1BIXtl2A1EEE" } }
|
|
24
|
|
25 void a_zzz__ (A_ZZZ__) { }
|
|
26 // { dg-final { scan-assembler "_Z7a_zzz__1BIXtl2A1EEE" } }
|
|
27
|
|
28 void a_zzzz_ (A_ZZZZ_) { }
|
|
29 // { dg-final { scan-assembler "_Z7a_zzzz_1BIXtl2A1EEE" } }
|
|
30
|
|
31 void a_zzzzz (A_ZZZZZ) { }
|
|
32 // { dg-final { scan-assembler "_Z7a_zzzzz1BIXtl2A1EEE" } }
|
|
33
|
|
34
|
|
35 // All of the following use a string to initialize the array but
|
|
36 // also name the same type as the above.
|
|
37 typedef B<A1{ "" }> S_z____;
|
|
38 typedef B<A1{ "\0" }> S_Zz___;
|
|
39 typedef B<A1{ "\0\0" }> S_ZZz__;
|
|
40 typedef B<A1{ "\0\0\0" }> S_ZZZz_;
|
|
41 typedef B<A1{ "\0\0\0\0" }> S_ZZZZz;
|
|
42
|
|
43 // Verify that the types mangle the same.
|
|
44 void s_z____ (S_z____) { }
|
|
45 // { dg-final { scan-assembler "_Z7s_z____1BIXtl2A1EEE" } }
|
|
46
|
|
47 void s_Zz___ (S_Zz___) { }
|
|
48 // { dg-final { scan-assembler "_Z7s_Zz___1BIXtl2A1EEE" } }
|
|
49
|
|
50 void s_ZZz__ (S_ZZz__) { }
|
|
51 // { dg-final { scan-assembler "_Z7s_ZZz__1BIXtl2A1EEE" } }
|
|
52
|
|
53 void s_ZZZz_ (S_ZZZz_) { }
|
|
54 // { dg-final { scan-assembler "_Z7s_ZZZz_1BIXtl2A1EEE" } }
|
|
55
|
|
56 void s_ZZZZz (S_ZZZZz) { }
|
|
57 // { dg-final { scan-assembler "_Z7s_ZZZZz1BIXtl2A1EEE" } }
|
|
58
|
|
59
|
|
60 // All of the following also name the same type (distinct from
|
|
61 // the above).
|
|
62 typedef B<A1{ { 'A' } }> A_A____;
|
|
63 typedef B<A1{ { 'A', 0 } }> A_AZ___;
|
|
64 typedef B<A1{ { 'A', 0, 0 } }> A_AZZ__;
|
|
65 typedef B<A1{ { 'A', 0, 0, 0 } }> A_AZZZ_;
|
|
66 typedef B<A1{ { 'A', 0, 0, 0, 0 } }> A_AZZZZ;
|
|
67
|
|
68 void a_A____ (A_A____) { }
|
|
69 // { dg-final { scan-assembler "_Z7a_A____1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
70
|
|
71 void a_AZ___ (A_AZ___) { }
|
|
72 // { dg-final { scan-assembler "_Z7a_AZ___1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
73
|
|
74 void a_AZZ__ (A_AZZ__) { }
|
|
75 // { dg-final { scan-assembler "_Z7a_AZZ__1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
76
|
|
77 void a_AZZZ_ (A_AZZZ_) { }
|
|
78 // { dg-final { scan-assembler "_Z7a_AZZZ_1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
79
|
|
80 void a_AZZZZ (A_AZZZZ) { }
|
|
81 // { dg-final { scan-assembler "_Z7a_AZZZZ1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
82
|
|
83
|
|
84 typedef B<A1{ "A" }> S_Az___;
|
|
85 typedef B<A1{ "A\0" }> S_AZz__;
|
|
86 typedef B<A1{ "A\0\0" }> S_AZZz_;
|
|
87 typedef B<A1{ "A\0\0\0" }> S_AZZZz;
|
|
88
|
|
89 void s_Az___ (S_Az___) { }
|
|
90 // { dg-final { scan-assembler "_Z7s_Az___1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
91
|
|
92 void s_AZz__ (S_AZz__) { }
|
|
93 // { dg-final { scan-assembler "_Z7s_AZz__1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
94
|
|
95 void s_AZZz_ (S_AZZz_) { }
|
|
96 // { dg-final { scan-assembler "_Z7s_AZZz_1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
97
|
|
98 void s_AZZZz (S_AZZZz) { }
|
|
99 // { dg-final { scan-assembler "_Z7s_AZZZz1BIXtl2A1tlA5_cLc65EEEEE" } }
|
|
100
|
|
101
|
|
102 typedef B<A1{ 'A', 0, 0, 'D', 0 }> A_AZZDZ;
|
|
103 typedef B<A1{ 'A', 0, 0, 'D' }> A_AZZD_;
|
|
104
|
|
105 void a_AZZDZ (A_AZZDZ) { }
|
|
106 // { dg-final { scan-assembler "_Z7a_AZZD_1BIXtl2A1tlA5_cLc65ELc0ELc0ELc68EEEEE" } }
|
|
107
|
|
108 void a_AZZD_ (A_AZZD_) { }
|
|
109 // { dg-final { scan-assembler "_Z7a_AZZDZ1BIXtl2A1tlA5_cLc65ELc0ELc0ELc68EEEEE" } }
|
|
110
|
|
111
|
|
112 typedef B<A1{ { "AB\0D" } }> S_ABZD_;
|
|
113 typedef B<A1{ { "AB\0\0" } }> S_ABZZ_;
|
|
114 typedef B<A1{ { "AB\0" } }> S_ABZ__;
|
|
115 typedef B<A1{ { "AB" } }> S_AB___;
|
|
116
|
|
117 void s_abzd_ (S_ABZD_) { }
|
|
118 // { dg-final { scan-assembler "_Z7s_abzd_1BIXtl2A1tlA5_cLc65ELc66ELc0ELc68EEEEE" } }
|
|
119
|
|
120 void s_abzz_ (S_ABZZ_) { }
|
|
121 // { dg-final { scan-assembler "_Z7s_abzz_1BIXtl2A1tlA5_cLc65ELc66EEEEE" } }
|
|
122
|
|
123 void s_abz__ (S_ABZ__) { }
|
|
124 // { dg-final { scan-assembler "_Z7s_abz__1BIXtl2A1tlA5_cLc65ELc66EEEEE" } }
|
|
125
|
|
126 void s_ab___ (S_AB___) { }
|
|
127 // { dg-final { scan-assembler "_Z7s_ab___1BIXtl2A1tlA5_cLc65ELc66EEEEE" } }
|
|
128
|
|
129
|
|
130 struct A3 { char a[5], b[5], c[5]; };
|
|
131 template <A3> struct B3 { };
|
|
132
|
|
133 /* These all name the same type. */
|
|
134 typedef B3<A3{ "\1\2", { }, "\3\4\5\6" }> T_123z_______3456z;
|
|
135 typedef B3<A3{ "\1\2", { 0 }, "\3\4\5\6" }> T_123z__Z____3456z;
|
|
136 typedef B3<A3{ "\1\2", { 0, 0 }, "\3\4\5\6" }> T_123z__ZZ___3456z;
|
|
137 typedef B3<A3{ "\1\2", { 0, 0, 0 }, "\3\4\5\6" }> T_123z__ZZZ__3456z;
|
|
138 typedef B3<A3{ "\1\2", { 0, 0, 0, 0 }, "\3\4\5\6" }> T_123z__ZZZZ_3456z;
|
|
139 typedef B3<A3{ "\1\2", "", "\3\4\5\6" }> T_123z__Z____3456z;
|
|
140 typedef B3<A3{ "\1\2", "\0", "\3\4\5\6" }> T_123z__ZZ___3456z;
|
|
141 typedef B3<A3{ "\1\2", "\0\0", "\3\4\5\6" }> T_123z__ZZZ__3456z;
|
|
142 typedef B3<A3{ "\1\2", "\0\0\0", "\3\4\5\6" }> T_123z__ZZZZ_3456z;
|
|
143 typedef B3<A3{ "\1\2", "\0\0\0\0", "\3\4\5\6" }> T_123z__ZZZZZ3456z;
|
|
144 typedef B3<A3{ "\1\2\0", "\0\0\0\0", "\3\4\5\6" }> T_123Zz_ZZZZZ3456z;
|
|
145 typedef B3<A3{ "\1\2\0\0", "\0\0\0\0", "\3\4\5\6" }> T_123ZZzZZZZZ3456z;
|
|
146
|
|
147
|
|
148 void ft0 (T_123z_______3456z) { }
|
|
149 // { dg-final { scan-assembler "_Z3ft02B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
150
|
|
151 void ft1 (T_123z__Z____3456z) { }
|
|
152 // { dg-final { scan-assembler "_Z3ft12B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
153 void ft2 (T_123z__ZZ___3456z) { }
|
|
154 // { dg-final { scan-assembler "_Z3ft22B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
155 void ft3 (T_123z__ZZZ__3456z) { }
|
|
156 // { dg-final { scan-assembler "_Z3ft32B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
157 void ft4 (T_123z__ZZZZ_3456z) { }
|
|
158 // { dg-final { scan-assembler "_Z3ft42B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
159 void ft9 (T_123z__ZZZZZ3456z) { }
|
|
160 // { dg-final { scan-assembler "_Z3ft92B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
161 void fta (T_123Zz_ZZZZZ3456z) { }
|
|
162 // { dg-final { scan-assembler "_Z3fta2B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|
|
163 void ftb (T_123ZZzZZZZZ3456z) { }
|
|
164 // { dg-final { scan-assembler "_Z3ftb2B3IXtl2A3tlA5_cLc1ELc2EEtlS1_EtlS1_Lc3ELc4ELc5ELc6EEEEE" } }
|