authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-22 11:58:50-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2022-07-22 11:58:50-07:00
log5dd59a54238b63cb52bb91d3cf803cb0196abb64
treef88c35f0ef45664dcfb5cc23fb8a7166eddf761f
parentd925d19cfcabd96fdc4459e11ecb85a4f42ec655
parent5cd1ccf4b98a5018b166d7ee214a3686b3a5834d
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #12191 from ziglang/underaligned-fields

LLVM: fix lowering of structs with underaligned fields

9 files changed, 1134 insertions(+), 226 deletions(-)

ci/zinc/linux_test.sh+1-1
...@@ -59,11 +59,11 @@ stage3/bin/zig build test-universal-libc -fqemu -fwasmtime -Denable-llvm...@@ -59,11 +59,11 @@ stage3/bin/zig build test-universal-libc -fqemu -fwasmtime -Denable-llvm
59stage3/bin/zig build test-compare-output -fqemu -fwasmtime -Denable-llvm59stage3/bin/zig build test-compare-output -fqemu -fwasmtime -Denable-llvm
60stage3/bin/zig build test-asm-link -fqemu -fwasmtime -Denable-llvm60stage3/bin/zig build test-asm-link -fqemu -fwasmtime -Denable-llvm
61stage3/bin/zig build test-fmt -fqemu -fwasmtime -Denable-llvm61stage3/bin/zig build test-fmt -fqemu -fwasmtime -Denable-llvm
62stage3/bin/zig build test-translate-c -fqemu -fwasmtime -Denable-llvm
6263
63$STAGE1_ZIG build test-standalone -fqemu -fwasmtime64$STAGE1_ZIG build test-standalone -fqemu -fwasmtime
64$STAGE1_ZIG build test-stack-traces -fqemu -fwasmtime65$STAGE1_ZIG build test-stack-traces -fqemu -fwasmtime
65$STAGE1_ZIG build test-cli -fqemu -fwasmtime66$STAGE1_ZIG build test-cli -fqemu -fwasmtime
66$STAGE1_ZIG build test-translate-c -fqemu -fwasmtime
67$STAGE1_ZIG build test-run-translated-c -fqemu -fwasmtime67$STAGE1_ZIG build test-run-translated-c -fqemu -fwasmtime
68$STAGE1_ZIG build docs -fqemu -fwasmtime68$STAGE1_ZIG build docs -fqemu -fwasmtime
69$STAGE1_ZIG build test-cases -fqemu -fwasmtime69$STAGE1_ZIG build test-cases -fqemu -fwasmtime
lib/std/os/linux.zig+4-1
...@@ -3236,7 +3236,10 @@ pub const epoll_event = switch (builtin.zig_backend) {...@@ -3236,7 +3236,10 @@ pub const epoll_event = switch (builtin.zig_backend) {
3236 },3236 },
3237 else => extern struct {3237 else => extern struct {
3238 events: u32,3238 events: u32,
3239 data: epoll_data align(4),3239 data: epoll_data align(switch (native_arch) {
3240 .x86_64 => 4,
3241 else => @alignOf(epoll_data),
3242 }),
3240 },3243 },
3241};3244};
32423245
lib/std/x/os/io.zig-1
...@@ -117,7 +117,6 @@ pub const Reactor = struct {...@@ -117,7 +117,6 @@ pub const Reactor = struct {
117};117};
118118
119test "reactor/linux: drive async tcp client/listener pair" {119test "reactor/linux: drive async tcp client/listener pair" {
120 if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest;
121 if (native_os.tag != .linux) return error.SkipZigTest;120 if (native_os.tag != .linux) return error.SkipZigTest;
122121
123 const ip = std.x.net.ip;122 const ip = std.x.net.ip;
src/codegen/llvm.zig+5-1
...@@ -2680,11 +2680,15 @@ pub const DeclGen = struct {...@@ -2680,11 +2680,15 @@ pub const DeclGen = struct {
2680 comptime assert(struct_layout_version == 2);2680 comptime assert(struct_layout_version == 2);
2681 var offset: u64 = 0;2681 var offset: u64 = 0;
2682 var big_align: u32 = 0;2682 var big_align: u32 = 0;
2683 var any_underaligned_fields = false;
26832684
2684 for (struct_obj.fields.values()) |field| {2685 for (struct_obj.fields.values()) |field| {
2685 if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue;2686 if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue;
26862687
2687 const field_align = field.normalAlignment(target);2688 const field_align = field.normalAlignment(target);
2689 const field_ty_align = field.ty.abiAlignment(target);
2690 any_underaligned_fields = any_underaligned_fields or
2691 field_align < field_ty_align;
2688 big_align = @maximum(big_align, field_align);2692 big_align = @maximum(big_align, field_align);
2689 const prev_offset = offset;2693 const prev_offset = offset;
2690 offset = std.mem.alignForwardGeneric(u64, offset, field_align);2694 offset = std.mem.alignForwardGeneric(u64, offset, field_align);
...@@ -2712,7 +2716,7 @@ pub const DeclGen = struct {...@@ -2712,7 +2716,7 @@ pub const DeclGen = struct {
2712 llvm_struct_ty.structSetBody(2716 llvm_struct_ty.structSetBody(
2713 llvm_field_types.items.ptr,2717 llvm_field_types.items.ptr,
2714 @intCast(c_uint, llvm_field_types.items.len),2718 @intCast(c_uint, llvm_field_types.items.len),
2715 .False,2719 llvm.Bool.fromBool(any_underaligned_fields),
2716 );2720 );
27172721
2718 return llvm_struct_ty;2722 return llvm_struct_ty;
test/behavior/struct.zig+23
...@@ -1372,3 +1372,26 @@ test "struct field init value is size of the struct" {...@@ -1372,3 +1372,26 @@ test "struct field init value is size of the struct" {
1372 var s: namespace.S = .{ .blah = 1234 };1372 var s: namespace.S = .{ .blah = 1234 };
1373 try expect(s.size == 4);1373 try expect(s.size == 4);
1374}1374}
1375
1376test "under-aligned struct field" {
1377 if (builtin.zig_backend == .stage1) return error.SkipZigTest;
1378 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
1379 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1380 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1381 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1382
1383 const U = extern union {
1384 fd: i32,
1385 u32: u32,
1386 u64: u64,
1387 };
1388 const S = extern struct {
1389 events: u32,
1390 data: U align(4),
1391 };
1392 var runtime: usize = 1234;
1393 const ptr = &S{ .events = 0, .data = .{ .u64 = runtime } };
1394 const array = @ptrCast(*const [12]u8, ptr);
1395 const result = std.mem.readIntNative(u64, array[4..12]);
1396 try expect(result == 1234);
1397}
test/standalone.zig+4-1
...@@ -6,7 +6,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void {...@@ -6,7 +6,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void {
6 cases.add("test/standalone/hello_world/hello.zig");6 cases.add("test/standalone/hello_world/hello.zig");
7 cases.addC("test/standalone/hello_world/hello_libc.zig");7 cases.addC("test/standalone/hello_world/hello_libc.zig");
8 cases.add("test/standalone/cat/main.zig");8 cases.add("test/standalone/cat/main.zig");
9 cases.add("test/standalone/issue_9693/main.zig");9 if (builtin.zig_backend == .stage1) {
10 // https://github.com/ziglang/zig/issues/6025
11 cases.add("test/standalone/issue_9693/main.zig");
12 }
10 cases.add("test/standalone/guess_number/main.zig");13 cases.add("test/standalone/guess_number/main.zig");
11 cases.add("test/standalone/main_return_error/error_u8.zig");14 cases.add("test/standalone/main_return_error/error_u8.zig");
12 cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");15 cases.add("test/standalone/main_return_error/error_u8_non_zero.zig");
test/standalone/install_raw_hex/build.zig+855-1
...@@ -25,7 +25,13 @@ pub fn build(b: *std.build.Builder) void {...@@ -25,7 +25,13 @@ pub fn build(b: *std.build.Builder) void {
25 const explicit_format_hex_step = b.addInstallRaw(elf, "hello.foo", .{ .format = .hex });25 const explicit_format_hex_step = b.addInstallRaw(elf, "hello.foo", .{ .format = .hex });
26 test_step.dependOn(&explicit_format_hex_step.step);26 test_step.dependOn(&explicit_format_hex_step.step);
2727
28 const expected_hex = &[_][]const u8{28 // this test is testing machine code output matching byte-for-byte,
29 // which changes every time anything changes in the backend, such as
30 // llvm upgrades, different llvm lowering, or self-hosted arm changes...
31 // this is extremely brittle, I have about 5 more times I'm willing to
32 // maintain this test case before deleting it.
33
34 const expected_stage1_hex = &[_][]const u8{
29 ":020000021000EC",35 ":020000021000EC",
30 ":1000D400A401010001000000A601010001000000CC",36 ":1000D400A401010001000000A601010001000000CC",
31 ":1000E400FC01010001000000F80101000100000012",37 ":1000E400FC01010001000000F80101000100000012",
...@@ -160,6 +166,854 @@ pub fn build(b: *std.build.Builder) void {...@@ -160,6 +166,854 @@ pub fn build(b: *std.build.Builder) void {
160 ":0C03D8000300FFE79DF8030001B0704730",166 ":0C03D8000300FFE79DF8030001B0704730",
161 ":00000001FF",167 ":00000001FF",
162 };168 };
169 const expected_stage2_llvm_hex = &[_][]const u8{
170 ":020000020200EC",
171 ":1000D4005C070100010000000608010001000000A7",
172 ":1000E4001C080100010000002408010001000000B8",
173 ":1000F40092080100010000009008010001000000C6",
174 ":10010400AE08010001000000AA080100010000007F",
175 ":10011400AE080100010000004409010001000000D4",
176 ":10012400C8090100010000001A0A010001000000D2",
177 ":10013400E40A010001000000EA0B010001000000D4",
178 ":10014400800C0100010000008E0C01000100000081",
179 ":10015400AE0C010001000000AA0C01000100000027",
180 ":10016400EA0C010001000000000D01000100000084",
181 ":10017400440D010001000000860F01000100000091",
182 ":10018400A40F010001000000541001000100000050",
183 ":10019400EE1001000100000008120100010000003F",
184 ":1001A400D2130100010000007214010001000000DC",
185 ":1001B4002E150100010000000416010001000000DA",
186 ":1001C40012160100010000002E16010001000000BB",
187 ":1001D4009A170100010000009417010001000000BB",
188 ":1001E4009418010001000000F61A0100010000004B",
189 ":1001F400941B010001000000061F01000100000023",
190 ":10020400041F010001000000AE1F010001000000F6",
191 ":100214008820010001000000B4200100010000005A",
192 ":10022400B6200100010000001822010001000000B6",
193 ":1002340072240100010000003827010001000000C1",
194 ":10024400B027010001000000102801000100000097",
195 ":100254000000000002000000000000000000000098",
196 ":100264000000000000000000010000000000000089",
197 ":100274000100000000000000000000000000000079",
198 ":100284000100000000000000000000000000000069",
199 ":100294000400000000000000050000000000000051",
200 ":1002A400060000000000000005000000000000003F",
201 ":1002B400050000000000000006000000000000002F",
202 ":1002C400070000000000000005000000000000001E",
203 ":1002D4000500000000000000050000000000000010",
204 ":1002E40006000000000000000800000000000000FC",
205 ":1002F40000000000000000000000000000000000FA",
206 ":1003040000000000000000000000000000000000E9",
207 ":1003140000000000696E7465676572206361737420",
208 ":10032400207472756E63617465642062697473000D",
209 ":10033400BC07010009000000C60701000900000015",
210 ":100344000100000000000000000000000000028026",
211 ":100354000000800101000400000002000000000011",
212 ":1003640000000000000000001F0000003403010032",
213 ":10037400000040080101FE0310040A8008008061A7",
214 ":10038400010004000024020000000000000000003E",
215 ":10039400000000001F00000016080100010000001A",
216 ":1003A4000000000000000000180801000100000027",
217 ":1003B4000000000000000000000000009C03010099",
218 ":1003C40002000000AAAAAAAA00000000010000007E",
219 ":1003D400080000000200000003000000020000000A",
220 ":1003E40000640000E5030100010000002002000099",
221 ":1003F40000000000000000000000000000000000F9",
222 ":1004040000000000000000000000000000000000E8",
223 ":1004140000000000000000000000000000000000D8",
224 ":10042400000000000220000000000000E5030100BD",
225 ":100434000100000020020000000000000000000095",
226 ":1004440000000000000000000000000000000000A8",
227 ":100454000000000000000000000000000000000098",
228 ":100464000000000000000000000000000220000066",
229 ":100474007265616368656420756E72656163686145",
230 ":10048400626C6520636F6465617474656D7074205B",
231 ":10049400746F20757365206E756C6C2076616C7555",
232 ":1004A40065617474656D707420746F207573652054",
233 ":1004B4006E756C6C2076616C756500000000696E69",
234 ":1004C40074656765722063617374207472756E63FA",
235 ":1004D4006174656420626974730001696E74656790",
236 ":1004E40065722063617374207472756E63617465E0",
237 ":1004F40064206269747300000200000000000000C0",
238 ":1005040000000000120801000172656163686564FF",
239 ":1005140020756E726561636861626C6520636F64E7",
240 ":10052400657265616368656420756E726561636890",
241 ":1005340061626C6520636F64650000000200000066",
242 ":100544000000000000000000696E74656765722099",
243 ":100554006F766572666C6F77696E74656765722015",
244 ":100564006F766572666C6F77696E74656765722005",
245 ":100574006F766572666C6F77696E746567657220F5",
246 ":100584006F766572666C6F77696E746567657220E5",
247 ":100594006F766572666C6F77696E746567657220D5",
248 ":1005A4006F766572666C6F77696E746567657220C5",
249 ":1005B4006F766572666C6F77696E746567657220B5",
250 ":1005C4006F766572666C6F77696E746567657220A5",
251 ":1005D4006F766572666C6F770000000000000000A3",
252 ":1005E4000000000002000000696E746567657220F7",
253 ":1005F4006F766572666C6F77696E74656765722075",
254 ":100604006F766572666C6F77696E74656765722064",
255 ":100614006F766572666C6F77696E74656765722054",
256 ":100624006F766572666C6F77696E74656765722044",
257 ":100634006F766572666C6F77696E74656765722034",
258 ":100644006F766572666C6F77696E74656765722024",
259 ":100654006F766572666C6F77696E74656765722014",
260 ":100664006F766572666C6F77696E74656765722004",
261 ":100674006F766572666C6F77696E746567657220F4",
262 ":100684006F766572666C6F77696E746567657220E4",
263 ":100694006F766572666C6F77696E746567657220D4",
264 ":1006A4006F766572666C6F77696E746567657220C4",
265 ":1006B4006F766572666C6F77696E746567657220B4",
266 ":1006C4006F766572666C6F77696E746567657220A4",
267 ":1006D4006F766572666C6F77696E74656765722094",
268 ":1006E4006F766572666C6F77696E74656765722084",
269 ":1006F4006F766572666C6F77696E74656765722074",
270 ":100704006F766572666C6F77696E74656765722063",
271 ":100714006F766572666C6F77696E74656765722053",
272 ":100724006F766572666C6F77696E74656765722043",
273 ":100734006F766572666C6F77696E74656765722033",
274 ":100744006F766572666C6F77696E74656765722023",
275 ":100754006F766572666C6F77696E74656765722013",
276 ":100764006F766572666C6F77696E74656765722003",
277 ":100774006F766572666C6F77696E746567657220F3",
278 ":100784006F766572666C6F77696E746567657220E3",
279 ":100794006F766572666C6F77696E746567657220D3",
280 ":1007A4006F766572666C6F77696E746567657220C3",
281 ":1007B4006F766572666C6F77636F727465785F6D60",
282 ":1007C4003400636F727465782D6D3400286D73671F",
283 ":1007D400207472756E636174656429006174746554",
284 ":1007E4006D707420746F20696E646578206F757401",
285 ":1007F400206F6620626F756E643A20696E64657856",
286 ":10080400207B647D2C206C656E207B647D00616E92",
287 ":1008140079003000310000000100000002000000F7",
288 ":10082400030000000400030000000000B0B502AFA4",
289 ":100834009EB0079203900492059112A8069000F0CE",
290 ":100844004EF80699079A09A8B1E81850A0E818507C",
291 ":1008540091E8385080E83850089200201B90FFE758",
292 ":1008640008991B980290884207D2FFE702980499DE",
293 ":100874000A460192884201D301E024E003E0019991",
294 ":10088400029800F03BF805980299415C09A800F031",
295 ":100894003DF8FFE71B98411C4FF0000040F10000B9",
296 ":1008A4001C918DF874009DF8740008B9FFE707E007",
297 ":1008B40040F24C50C0F201001021002200F061F817",
298 ":1008C4001C981B90CCE7039809A9B1E80C50A0E848",
299 ":1008D4000C5091E81C5080E81C501EB0B0BDD0B53F",
300 ":1008E40002AF40F2F421C0F20101B1E80C50A0E8DB",
301 ":1008F4000C5091E81C5080E81C50D0BD80B56F4668",
302 ":1009040082B000900191684600F053F880B56F46BC",
303 ":1009140088B00490C1F34310059001F01F00014614",
304 ":100924000691C0F11F001F2801D8FFE707E040F23D",
305 ":100934001830C0F201001B21002200F022F80598B3",
306 ":100944000499069A01920791079902916FF35F2027",
307 ":1009540001460391082801D8FFE703E00398092121",
308 ":10096400FFF7CCFF0299039A019B51F8220003F090",
309 ":100974001F0C012303FA0CF3184341F8220008B0BA",
310 ":1009840080BDFFE700BEFDE781B00D3000F03F0001",
311 ":10099400022804D3FFE700208DF8030003E00120C0",
312 ":1009A4008DF80300FFE79DF8030001B07047FFE7EF",
313 ":1009B400FEE780B56F460146002000F000F8B0B5B0",
314 ":1009C40002AFADF5865D84B00691059020202A9093",
315 ":0209D40008A871",
316 ":020000020200EC",
317 ":1000D4005C070100010000000608010001000000A7",
318 ":1000E4001C080100010000002408010001000000B8",
319 ":1000F40092080100010000009008010001000000C6",
320 ":10010400AE08010001000000AA080100010000007F",
321 ":10011400AE080100010000004409010001000000D4",
322 ":10012400C8090100010000001A0A010001000000D2",
323 ":10013400E40A010001000000EA0B010001000000D4",
324 ":10014400800C0100010000008E0C01000100000081",
325 ":10015400AE0C010001000000AA0C01000100000027",
326 ":10016400EA0C010001000000000D01000100000084",
327 ":10017400440D010001000000860F01000100000091",
328 ":10018400A40F010001000000541001000100000050",
329 ":10019400EE1001000100000008120100010000003F",
330 ":1001A400D2130100010000007214010001000000DC",
331 ":1001B4002E150100010000000416010001000000DA",
332 ":1001C40012160100010000002E16010001000000BB",
333 ":1001D4009A170100010000009417010001000000BB",
334 ":1001E4009418010001000000F61A0100010000004B",
335 ":1001F400941B010001000000061F01000100000023",
336 ":10020400041F010001000000AE1F010001000000F6",
337 ":100214008820010001000000B4200100010000005A",
338 ":10022400B6200100010000001822010001000000B6",
339 ":1002340072240100010000003827010001000000C1",
340 ":10024400B027010001000000102801000100000097",
341 ":100254000000000002000000000000000000000098",
342 ":100264000000000000000000010000000000000089",
343 ":100274000100000000000000000000000000000079",
344 ":100284000100000000000000000000000000000069",
345 ":100294000400000000000000050000000000000051",
346 ":1002A400060000000000000005000000000000003F",
347 ":1002B400050000000000000006000000000000002F",
348 ":1002C400070000000000000005000000000000001E",
349 ":1002D4000500000000000000050000000000000010",
350 ":1002E40006000000000000000800000000000000FC",
351 ":1002F40000000000000000000000000000000000FA",
352 ":1003040000000000000000000000000000000000E9",
353 ":1003140000000000696E7465676572206361737420",
354 ":10032400207472756E63617465642062697473000D",
355 ":10033400BC07010009000000C60701000900000015",
356 ":100344000100000000000000000000000000028026",
357 ":100354000000800101000400000002000000000011",
358 ":1003640000000000000000001F0000003403010032",
359 ":10037400000040080101FE0310040A8008008061A7",
360 ":10038400010004000024020000000000000000003E",
361 ":10039400000000001F00000016080100010000001A",
362 ":1003A4000000000000000000180801000100000027",
363 ":1003B4000000000000000000000000009C03010099",
364 ":1003C40002000000AAAAAAAA00000000010000007E",
365 ":1003D400080000000200000003000000020000000A",
366 ":1003E40000640000E5030100010000002002000099",
367 ":1003F40000000000000000000000000000000000F9",
368 ":1004040000000000000000000000000000000000E8",
369 ":1004140000000000000000000000000000000000D8",
370 ":10042400000000000220000000000000E5030100BD",
371 ":100434000100000020020000000000000000000095",
372 ":1004440000000000000000000000000000000000A8",
373 ":100454000000000000000000000000000000000098",
374 ":100464000000000000000000000000000220000066",
375 ":100474007265616368656420756E72656163686145",
376 ":10048400626C6520636F6465617474656D7074205B",
377 ":10049400746F20757365206E756C6C2076616C7555",
378 ":1004A40065617474656D707420746F207573652054",
379 ":1004B4006E756C6C2076616C756500000000696E69",
380 ":1004C40074656765722063617374207472756E63FA",
381 ":1004D4006174656420626974730001696E74656790",
382 ":1004E40065722063617374207472756E63617465E0",
383 ":1004F40064206269747300000200000000000000C0",
384 ":1005040000000000120801000172656163686564FF",
385 ":1005140020756E726561636861626C6520636F64E7",
386 ":10052400657265616368656420756E726561636890",
387 ":1005340061626C6520636F64650000000200000066",
388 ":100544000000000000000000696E74656765722099",
389 ":100554006F766572666C6F77696E74656765722015",
390 ":100564006F766572666C6F77696E74656765722005",
391 ":100574006F766572666C6F77696E746567657220F5",
392 ":100584006F766572666C6F77696E746567657220E5",
393 ":100594006F766572666C6F77696E746567657220D5",
394 ":1005A4006F766572666C6F77696E746567657220C5",
395 ":1005B4006F766572666C6F77696E746567657220B5",
396 ":1005C4006F766572666C6F77696E746567657220A5",
397 ":1005D4006F766572666C6F770000000000000000A3",
398 ":1005E4000000000002000000696E746567657220F7",
399 ":1005F4006F766572666C6F77696E74656765722075",
400 ":100604006F766572666C6F77696E74656765722064",
401 ":100614006F766572666C6F77696E74656765722054",
402 ":100624006F766572666C6F77696E74656765722044",
403 ":100634006F766572666C6F77696E74656765722034",
404 ":100644006F766572666C6F77696E74656765722024",
405 ":100654006F766572666C6F77696E74656765722014",
406 ":100664006F766572666C6F77696E74656765722004",
407 ":100674006F766572666C6F77696E746567657220F4",
408 ":100684006F766572666C6F77696E746567657220E4",
409 ":100694006F766572666C6F77696E746567657220D4",
410 ":1006A4006F766572666C6F77696E746567657220C4",
411 ":1006B4006F766572666C6F77696E746567657220B4",
412 ":1006C4006F766572666C6F77696E746567657220A4",
413 ":1006D4006F766572666C6F77696E74656765722094",
414 ":1006E4006F766572666C6F77696E74656765722084",
415 ":1006F4006F766572666C6F77696E74656765722074",
416 ":100704006F766572666C6F77696E74656765722063",
417 ":100714006F766572666C6F77696E74656765722053",
418 ":100724006F766572666C6F77696E74656765722043",
419 ":100734006F766572666C6F77696E74656765722033",
420 ":100744006F766572666C6F77696E74656765722023",
421 ":100754006F766572666C6F77696E74656765722013",
422 ":100764006F766572666C6F77696E74656765722003",
423 ":100774006F766572666C6F77696E746567657220F3",
424 ":100784006F766572666C6F77696E746567657220E3",
425 ":100794006F766572666C6F77696E746567657220D3",
426 ":1007A4006F766572666C6F77696E746567657220C3",
427 ":1007B4006F766572666C6F77636F727465785F6D60",
428 ":1007C4003400636F727465782D6D3400286D73671F",
429 ":1007D400207472756E636174656429006174746554",
430 ":1007E4006D707420746F20696E646578206F757401",
431 ":1007F400206F6620626F756E643A20696E64657856",
432 ":10080400207B647D2C206C656E207B647D00616E92",
433 ":1008140079003000310000000100000002000000F7",
434 ":10082400030000000400030000000000B0B502AFA4",
435 ":100834009EB0079203900492059112A8069000F0CE",
436 ":100844004EF80699079A09A8B1E81850A0E818507C",
437 ":1008540091E8385080E83850089200201B90FFE758",
438 ":1008640008991B980290884207D2FFE702980499DE",
439 ":100874000A460192884201D301E024E003E0019991",
440 ":10088400029800F03BF805980299415C09A800F031",
441 ":100894003DF8FFE71B98411C4FF0000040F10000B9",
442 ":1008A4001C918DF874009DF8740008B9FFE707E007",
443 ":1008B40040F24C50C0F201001021002200F061F817",
444 ":1008C4001C981B90CCE7039809A9B1E80C50A0E848",
445 ":1008D4000C5091E81C5080E81C501EB0B0BDD0B53F",
446 ":1008E40002AF40F2F421C0F20101B1E80C50A0E8DB",
447 ":1008F4000C5091E81C5080E81C50D0BD80B56F4668",
448 ":1009040082B000900191684600F053F880B56F46BC",
449 ":1009140088B00490C1F34310059001F01F00014614",
450 ":100924000691C0F11F001F2801D8FFE707E040F23D",
451 ":100934001830C0F201001B21002200F022F80598B3",
452 ":100944000499069A01920791079902916FF35F2027",
453 ":1009540001460391082801D8FFE703E00398092121",
454 ":10096400FFF7CCFF0299039A019B51F8220003F090",
455 ":100974001F0C012303FA0CF3184341F8220008B0BA",
456 ":1009840080BDFFE700BEFDE781B00D3000F03F0001",
457 ":10099400022804D3FFE700208DF8030003E00120C0",
458 ":1009A4008DF80300FFE79DF8030001B07047FFE7EF",
459 ":1009B400FEE780B56F460146002000F000F8B0B5B0",
460 ":1009C40002AFADF5865D84B00691059020202A9093",
461 ":0209D40008A871",
462 ":020000020200DC",
463 ":10083000B0B502AF9EB0079203900492059112A842",
464 ":10084000069000F04EF80699079A09A8B1E81850EA",
465 ":10085000A0E8185091E8385080E8385008920020FD",
466 ":100860001B90FFE708991B980290884207D2FFE788",
467 ":10087000029804990A460192884201D301E024E0DB",
468 ":1008800003E00199029800F03BF805980299415C59",
469 ":1008900009A800F03DF8FFE71B98411C4FF000004D",
470 ":1008A00040F100001C918DF874009DF8740008B9A7",
471 ":1008B000FFE707E040F24C50C0F201001021002297",
472 ":1008C00000F061F81C981B90CCE7039809A9B1E8E7",
473 ":1008D0000C50A0E80C5091E81C5080E81C501EB051",
474 ":1008E000B0BDD0B502AF40F2F421C0F20101B1E8D1",
475 ":1008F0000C50A0E80C5091E81C5080E81C50D0BD72",
476 ":1009000080B56F4682B000900191684600F053F8C0",
477 ":1009100080B56F4688B00490C1F34310059001F094",
478 ":100920001F0001460691C0F11F001F2801D8FFE7F4",
479 ":1009300007E040F21830C0F201001B21002200F055",
480 ":1009400022F805980499069A019207910799029155",
481 ":100950006FF35F2001460391082801D8FFE703E009",
482 ":1009600003980921FFF7CCFF0299039A019B51F8E4",
483 ":10097000220003F01F0C012303FA0CF3184341F883",
484 ":10098000220008B080BDFFE700BEFDE781B00D305A",
485 ":1009900000F03F00022804D3FFE700208DF8030099",
486 ":1009A00003E001208DF80300FFE79DF8030001B08C",
487 ":1009B0007047FFE7FEE780B56F460146002000F074",
488 ":1009C00000F8B0B502AFADF5865D84B00691059034",
489 ":1009D00020202A9008A82990002028900DF1AD0031",
490 ":1009E0000790AA2141F20F0202F010F80699079A27",
491 ":1009F00068460160A7F11C0028A94FF4805300F05D",
492 ":100A00002FF837F8140C38B9FFE757F81C1C57F8C3",
493 ":100A1000180C0391049016E0FFE70DF1AD00019072",
494 ":100A200000F5805040F2D072C0F201020F23194647",
495 ":100A300000F05CF801980290FFE7029941F20F0084",
496 ":100A400003910490FFE7059A0399049847F8101C56",
497 ":100A500047F80C0C57F8100C57F80C1CFFF793FFD5",
498 ":100A600080B56F4694B000931346009A01930B46ED",
499 ":100A7000019903930290B86805900AA800F0ADF9B7",
500 ":100A80000A980B990C9A0992089107900DA8049066",
501 ":100A900007A900F0B6F903980499059A00F053F8F5",
502 ":100AA00001460691000478B1FFE703980699ADF876",
503 ":100AB000401000F038F902990E980F9A109B8B6045",
504 ":100AC0004A60086014B080BD07A800F09CF90A468F",
505 ":100AD00002990023ADF84C30129211901198129A9D",
506 ":100AE000139B8B604A60086014B080BD80B56F4670",
507 ":100AF0008AB004938C46CDF804C002900392002083",
508 ":100B00000590994228BF012000F0A1F9049B0598A7",
509 ":100B100006930790FFE706990798009088420BD24A",
510 ":100B2000FFE70299019A0398009BC05C0992089123",
511 ":100B3000079A0899885400E003E00798013007906D",
512 ":100B4000E9E70AB080BD80B56F468AB0049205918E",
513 ":100B500006900968089140F2E072C0F2010208A90B",
514 ":100B6000252300F059F801460791000430B1FFE752",
515 ":100B7000069800F0D8F807980AB080BD059B069843",
516 ":100B800004990968EC460322CCF8002040F2184290",
517 ":100B9000C0F2010200F016F901460391000430B1E1",
518 ":100BA000FFE7069800F0BFF803980AB080BD0698EA",
519 ":100BB00005990968099140F2E071C0F2010101F163",
520 ":100BC000280209A9062300F027F801460291000433",
521 ":100BD00030B1FFE7069800F0A6F802980AB080BD91",
522 ":100BE000059B069804994968EC460322CCF800203E",
523 ":100BF00040F26042C0F2010200F0E4F801460191C7",
524 ":100C0000000430B1FFE7069800F08DF801980AB0B3",
525 ":100C100080BD00200AB080BD80B56F4698B00991B4",
526 ":100C20000A900B930C9200200D90FFE70B990D9802",
527 ":100C3000884222D0FFE70C980B99099A0D9B0493E8",
528 ":100C400012680E920E9A0F92119110900D990591C3",
529 ":100C5000109A119806900A44079202460892411A87",
530 ":100C60004FF0000040F10000C0F1010012918DF83A",
531 ":100C70004C009DF84C0008B101E051E007E040F263",
532 ":100C8000AC50C0F2010010210022FFF77CFE089852",
533 ":100C90000699129A02920A460392884201D8FFE707",
534 ":100CA00003E003990898FFF72BFE059808998842FE",
535 ":100CB00001D8FFE703E008990598FFF721FE079B9D",
536 ":100CC0000A9902986A46106014A80FAA00F019FA4F",
537 ":100CD000BDF8540048B1FFE70A98BDF854100191DF",
538 ":100CE00000F021F8019818B080BD049814990918F3",
539 ":100CF0004FF0000040F1000016918DF85C009DF867",
540 ":100D00005C0008B9FFE707E040F2BC50C0F2010008",
541 ":100D100010210022FFF737FE16980D90FFE785E7B8",
542 ":100D2000002018B080BD80B56F468EB0CDF820E0B1",
543 ":100D3000099018B1FFE70998079001E00EB080BD57",
544 ":100D400008990798039004910A900A990431059133",
545 ":100D5000016806918068411E4FF0000040F10000DC",
546 ":100D6000C0F101000B918DF830009DF8300008B9FA",
547 ":100D7000FFE707E040F2CC50C0F201001021002252",
548 ":100D8000FFF701FE059906980B9A10400246009263",
549 ":100D90000A68019249680A460292884201D2FFE736",
550 ":100DA00003E002990098FFF7ABFD03980499019ABC",
551 ":100DB000009B42F823100D900D99086801300860DF",
552 ":100DC0000EB080BD80B56F4682B000F0F9FC27F808",
553 ":100DD000020C37F8020C02B080BD80B56F4684B0BB",
554 ":100DE00001920A460199029202460298039200F08B",
555 ":100DF0003DF80A4603994A6008600020886004B004",
556 ":100E000080BD0160704780B56F4686B0016842685A",
557 ":100E1000836805930492039180680090039901917F",
558 ":100E200004990291884201D8FFE703E002990098F3",
559 ":100E3000FFF766FD0098002801D3FFE703E0009963",
560 ":100E40000020FFF75DFD0099019806B080BD80B5D8",
561 ":100E50006F46C00740B9FFE740F27440C0F201009E",
562 ":100E600018210022FFF78FFDFFE780BD80B56F4698",
563 ":100E700088B00191029001F02BFA019A0299034681",
564 ":100E80000393079206910699049107990591884268",
565 ":100E900001D8FFE703E005990398FFF731FD0398B8",
566 ":100EA000002801D3FFE703E003990020FFF728FDA6",
567 ":100EB0000399049808B080BD80B56F46A4B00F9226",
568 ":100EC00010911190B8681290139358B9FFE71199D7",
569 ":100ED00040F26022C0F20102106852684A60086065",
570 ":100EE00024B080BDFFE70F984168806888420ED328",
571 ":100EF000FFE71098FFF717FF119940F26822C0F240",
572 ":100F00000102106852684A60086024B080BDFFE7A3",
573 ":100F100012990F98806809184FF0000040F1000006",
574 ":100F200014918DF854009DF8540008B9FFE707E0CC",
575 ":100F300040F25C50C0F2010010210022FFF723FDB7",
576 ":100F40000F9914984968884203D8FFE712980E90C9",
577 ":100F50001CE00F9948688968411A4FF0000040F181",
578 ":100F60000000C0F1010016918DF85C009DF85C0056",
579 ":100F700008B9FFE707E040F26C50C0F20100102111",
580 ":100F80000022FFF700FD16980E90FFE70F980E99CC",
581 ":100F90000B911890189A0C9280680D9009184FF0D8",
582 ":100FA000000040F1000019918DF868009DF868007C",
583 ":100FB00008B9FFE707E040F27C50C0F201001021C1",
584 ":100FC0000022FFF7E0FC0D990C9B199808901A6815",
585 ":100FD0005B6809930A440A92411A4FF0000040F1FD",
586 ":100FE0000000C0F101001B918DF870009DF87000A9",
587 ":100FF00008B9FFE707E040F28C50C0F20100102171",
588 ":101000000022FFF7C0FC089809991B9A06920A462D",
589 ":101010000792884201D8FFE703E007990898FFF795",
590 ":101020006FFC0D980899884201D8FFE703E0089902",
591 ":101030000D98FFF765FC0B981299139A0A9BDDF83F",
592 ":1010400018C0CDF808C003931D921E911D990491FC",
593 ":101050001E990591884201D8FFE703E005990B9896",
594 ":10106000FFF74EFC0B98002801D3FFE703E00B9934",
595 ":101070000020FFF745FC0B9B049A02990398FFF7A9",
596 ":1010800035FD0F980B991F901F9A52F8080F019287",
597 ":1010900009184FF0000040F1000020918DF8840005",
598 ":1010A0009DF8840008B9FFE707E040F29C50C0F2C9",
599 ":1010B000010010210022FFF766FC0B98019A20998D",
600 ":1010C000116070B9FFE71098FFF72DFE119940F2FB",
601 ":1010D0007022C0F20102106852684A60086024B0B1",
602 ":1010E00080BDFFE710980B990022ADF88C2022916B",
603 ":1010F000FFF719FE11992298239A4A60086024B0DC",
604 ":1011000080BD80B56F4684B00190B8681268EC4627",
605 ":10111000CCF8000002A8FFF7CFFE01990298039ACD",
606 ":101120004A60086004B080BD80B56F468CB0049200",
607 ":101130000590069206985B2100F052F8C007A0B116",
608 ":10114000FFE70498079007985D21019100F099F856",
609 ":10115000024604980B46019902930392089008985E",
610 ":1011600000F03EF8C00708B114E01FE0059940F216",
611 ":10117000DC5CC0F2010CDCF80000DCF80420DCF8D8",
612 ":101180000830DCF80CC0C1F80CC08B604A60086005",
613 ":101190000CB080BDFFE705990398029A00238B816C",
614 ":1011A0004A600860022008720CB080BD0498099063",
615 ":1011B00009990AA800F0F6F89DF82C0048B1FFE75D",
616 ":1011C00005990A9800228A810860012008720CB0F3",
617 ":1011D00080BDFFE705990020888108720CB080BDB2",
618 ":1011E00080B56F468AB00590069141688068884254",
619 ":1011F0000BD2FFE70598016802914168806803906F",
620 ":101200000A460492884203D303E0002001900FE0D5",
621 ":1012100003E004990398FFF773FB06990298039A79",
622 ":10122000805CC9B2401AB0FA80F040090190FFE733",
623 ":101230000198C00790B1FFE705980790079951F80A",
624 ":10124000080F0091411C4FF0000040F10000089190",
625 ":101250008DF824009DF8240008B101E00EE007E0BD",
626 ":1012600040F2EC50C0F2010010210022FFF78BFB8E",
627 ":1012700000990898086001200AB080BD00200AB0DB",
628 ":1012800080BD80B56F4692B009900A914168806830",
629 ":101290000B90884205D3FFE74FF0AA30002112B02F",
630 ":1012A00080BDFFE7FFE709984168806888420BD25C",
631 ":1012B000FFE70998016806914168806807900A462F",
632 ":1012C0000892884201D301E02EE003E008990798D4",
633 ":1012D000FFF716FB0A990698079A805CC9B2884204",
634 ":1012E00001D1FFE720E0FFE7FFE709980C900C9998",
635 ":1012F00051F8080F0591411C4FF0000040F100002B",
636 ":101300000D918DF838009DF8380008B9FFE707E027",
637 ":1013100040F23C60C0F2010010210022FFF733FBD5",
638 ":1013200005990D980860BEE70B9909980F900F9BDF",
639 ":10133000806802901A685B6803930A440492411A19",
640 ":101340004FF0000040F10000C0F1010010918DF855",
641 ":1013500044009DF8440008B9FFE707E040F24C6004",
642 ":10136000C0F2010010210022FFF70DFB0298039943",
643 ":10137000109A00920A460192884201D8FFE703E0E2",
644 ":1013800001990298FFF7BCFA0B980299884201D89C",
645 ":10139000FFE703E002990B98FFF7B2FA009904986F",
646 ":1013A00012B080BD80B56F4698B00C910D9040F2A0",
647 ":1013B0007821C0F20101086849680F910E90FFE79B",
648 ":1013C0000C984168806888420BD2FFE70C9801684E",
649 ":1013D0000991416880680A900A460B92884201D3BD",
650 ":1013E00001E0C1E003E00B990A98FFF789FA099838",
651 ":1013F0000A99405C08900898C0B2302809D3FFE7EA",
652 ":101400000898C0B2392804D8FFE79DF83C0008B11D",
653 ":1014100009E0A9E040F28021C0F2010108684968B2",
654 ":101420000F910E9000E0FFE79DF83C0008B1FFE748",
655 ":1014300007E040F28C40C0F2010019210022FFF7C2",
656 ":10144000A2FA0EA807900E980A21A0FB011000280E",
657 ":1014500018BF012010918DF844009DF8440008B990",
658 ":10146000FFE707E040F2FC50C0F20100102100222B",
659 ":10147000FFF789FA0799109808609DF83C0008B1B9",
660 ":10148000FFE707E040F2A540C0F201001921002269",
661 ":10149000FFF779FA0C980EA902910E990391016851",
662 ":1014A00004914168806805900A460692884201D2FC",
663 ":1014B000FFE703E006990598FFF722FA04980599DB",
664 ":1014C000405CA0F13001C8B2401A18BF01208DF86D",
665 ":1014D00048108DF849009DF8490008B9FFE707E07A",
666 ":1014E00040F20C60C0F2010010210022FFF74BFA1D",
667 ":1014F00003989DF8481009184FF0000040F10000D3",
668 ":1015000013918DF850009DF8500008B9FFE707E0EF",
669 ":1015100040F21C60C0F2010010210022FFF733FAF4",
670 ":10152000029913980860FFE7FFE70C98159015994A",
671 ":1015300051F8080F0191411C4FF0000040F10000EC",
672 ":1015400016918DF85C009DF85C0008B9FFE707E094",
673 ":1015500040F22C60C0F2010010210022FFF713FAC4",
674 ":101560000199169808602BE70D990E980F9A4A601A",
675 ":10157000086018B080BD80B56F468CB006910146FA",
676 ":10158000069807914168806888420BD2FFE7069869",
677 ":10159000016803914168806804900A460592884278",
678 ":1015A00001D301E032E003E005990498FFF7A8F9C0",
679 ":1015B00006980399049A895C01910890089951F85A",
680 ":1015C000080F0291411C4FF0000040F1000009910A",
681 ":1015D0008DF828009DF8280008B9FFE707E040F2E1",
682 ":1015E0005C60C0F2010010210022FFF7CCF90799DE",
683 ":1015F0000198029B099A1A608DF82C0001208DF841",
684 ":101600002D00BDF82C0008800CB080BD079940F279",
685 ":10161000BE40C0F20100008808800CB080BD80B5DB",
686 ":101620006F468CB0049205910690886881184FF03F",
687 ":10163000000040F1000007918DF820009DF8200087",
688 ":1016400008B9FFE707E040F26C60C0F2010010212A",
689 ":101650000022FFF798F9059907984968884213D244",
690 ":10166000FFE7049905980268029242680392806835",
691 ":1016700009184FF0000040F1000009918DF8280092",
692 ":101680009DF8280040B108E0069940F2C040C0F241",
693 ":1016900001000088088022E007E040F27C60C0F290",
694 ":1016A000010010210022FFF76EF9039909980090BC",
695 ":1016B0000A460192884201D2FFE703E001990098AF",
696 ":1016C000FFF71EF906990298009A805C8DF82C00AD",
697 ":1016D00001208DF82D00BDF82C000880FFE70CB02C",
698 ":1016E00080BD80B56F4690B007920891099010793F",
699 ":1016F00020B1FFE707980068069021E0089801688C",
700 ":1017000004910A900A9805900068411C4FF000006F",
701 ":1017100040F100000B918DF830009DF8300008B9C1",
702 ":10172000FFE707E040F28C60C0F2010010210022C8",
703 ":10173000FFF729F90498059A0B9911600690FFE7C5",
704 ":10174000089906980390896888420BD3FFE70999A6",
705 ":1017500040F28822C0F20102106852684A600860B4",
706 ":1017600010B080BDFFE7039808990D910D9A52F8CB",
707 ":10177000041F01920291C0F11F001F2801D8FFE74A",
708 ":1017800007E040F2C240C0F201001B210022FFF737",
709 ":10179000FAF80999039ADDF804C0029B02F01F0EC3",
710 ":1017A000012000FA0EFE43EA0E03CCF800300E9240",
711 ":1017B0008DF83C000E980F9A4A60086010B080BD0A",
712 ":1017C00080B56F4682B000F006F827F8020C37F8B3",
713 ":1017D000020C02B080BD80B56F4684B09C466B465B",
714 ":1017E000C3F804C01A600A22002300F006F827F8A4",
715 ":1017F000020C37F8020C04B080BD80B56F46A2B071",
716 ":101800000D910890D1B2F8680990B8680A900B93CE",
717 ":101810000C920020012988BF0120FFF718FB0D98CA",
718 ":1018200000F0A5F80E90A7F14500AA2121220F9201",
719 ":1018300001F0ECF80E990F9819911A90FFE70C98A7",
720 ":10184000199AC1B2B2FBF1F000FB112007901A986F",
721 ":10185000411E4FF0000040F10000C0F101001B915B",
722 ":101860008DF870009DF8700008B9FFE707E040F2BE",
723 ":101870009C60C0F2010010210022FFF784F81B9841",
724 ":101880001A901A980690202801D8FFE703E00698DE",
725 ":101890002121FFF735F80798069AA7F14501114471",
726 ":1018A0000591C0F1FF00FF2801D8FFE707E040F2F3",
727 ":1018B000DF40C0F201001B210022FFF764F80B9902",
728 ":1018C000079800F055F8059A0C9910701998C9B24C",
729 ":1018D000B0FBF1F01990199808B9FFE701E0FFE7B4",
730 ":1018E000ADE71A980390A7F1450101440491D0F1A6",
731 ":1018F00021014FF0000040F10000C0F101001E91F5",
732 ":101900008DF87C009DF87C0008B9FFE707E040F205",
733 ":10191000AC60C0F2010010210022FFF734F81E98DD",
734 ":101920000290002008B9FFE703E021210846FEF7F6",
735 ":10193000E7FF0398212801D8FFE703E0039821215E",
736 ":10194000FEF7DEFF0A9B0898DDF824C00499029A8E",
737 ":10195000219220912099219AEE46CEF800C000F005",
738 ":101960008BF827F8120C37F8120C22B080BD7047A4",
739 ":1019700080B56F4688B0029103900020A8B9FFE7B8",
740 ":101980000398C0B2092810D8FFE70399302050FA15",
741 ":1019900081F1C8B2401A18BF01208DF814108DF8DB",
742 ":1019A00015009DF8150050B10AE00398C0B20A284E",
743 ":1019B00017D3FFE70398C0B224280ED311E007E045",
744 ":1019C00040F26C70C0F2010010210022FEF7DBFF34",
745 ":1019D0009DF8140007F80D0C4AE00298C00740B9C2",
746 ":1019E0000AE040F20D50C0F2010018210022FEF77B",
747 ":1019F000CAFF4120019002E061200190FFE70199B8",
748 ":101A00006FF0090050FA81F1C8B2401A18BF0120E6",
749 ":101A10008DF818108DF819009DF8190008B9FFE726",
750 ":101A200007E040F27C70C0F2010010210022FEF7B6",
751 ":101A3000AAFF03999DF8180050FA81F1C8B2401A24",
752 ":101A400018BF01208DF81C108DF81D009DF81D0099",
753 ":101A500008B9FFE707E040F28C70C0F201001021E6",
754 ":101A60000022FEF790FF9DF81C0007F80D0CFFE721",
755 ":101A700017F80D0C08B080BD80B56F46A8B0119363",
756 ":101A80001290B8681390149215919868D9681791BC",
757 ":101A900016909DF85C0060B1FFE7149B159A1299AF",
758 ":101AA0001698109018A800F06FF9BDF8640080B186",
759 ":101AB00012E0149B159A129813990968279127A987",
760 ":101AC000FFF7AAF801460F910004002840F0FF80BC",
761 ":101AD00003E118980E9002E014980E90FFE7109919",
762 ":101AE0000E980D90884210D2FFE710980D99411A78",
763 ":101AF0004FF0000040F10000C0F101001A918DF894",
764 ":101B00006C009DF86C0018B103E000200C900BE015",
765 ":101B100007E040F24C70C0F2010010210022FEF7F5",
766 ":101B200032FF1A980C90FFE70C980B9078B9FFE7FA",
767 ":101B3000149B159A1298139909681D911DA9FFF716",
768 ":101B40006BF827F82E0C37F82E0C28B080BDFFE775",
769 ":101B50001198007C01460A91022800F08D80FFE771",
770 ":101B60000A98800708B1FFE729E0149B159A12989C",
771 ":101B7000139909681E911EA9FFF74EF801460991B5",
772 ":101B8000000430B1FFE71298FFF7CDF8099828B0AC",
773 ":101B900080BD0B9B12981199139A12681F924A7C70",
774 ":101BA0001FA900F00AFB01460891000430B1FFE7CD",
775 ":101BB0001298FFF7B8F8089828B080BD86E00B9817",
776 ":101BC00041080791411C4FF0000040F100002091B6",
777 ":101BD0008DF884009DF8840008B9FFE707E040F223",
778 ":101BE0005C70C0F2010010210022FEF7CCFE079BC2",
779 ":101BF00012981199139ADDF880C04FEA5C0CCDF869",
780 ":101C000014C0126822924A7C22A900F0D6FA01463A",
781 ":101C10000691000430B1FFE71298FFF784F80698A8",
782 ":101C200028B080BD149B159A1298139909682391C6",
783 ":101C300023A9FEF7F1FF01460491000430B1FFE74C",
784 ":101C40001298FFF770F8049828B080BD059B129891",
785 ":101C50001199139A126824924A7C24A900F0ADFAD3",
786 ":101C600001460391000430B1FFE71298FFF75BF8DB",
787 ":101C7000039828B080BD29E00B9B12981199139A04",
788 ":101C8000126825924A7C25A900F097FA0146029134",
789 ":101C9000000430B1FFE71298FFF745F8029828B02A",
790 ":101CA00080BD149B159A129813990968269126A94C",
791 ":101CB000FEF7B2FF01460191000430B1FFE7129830",
792 ":101CC000FFF731F8019828B080BDFFE706E01298D1",
793 ":101CD000FFF729F80F9828B080BDFFE7002028B053",
794 ":101CE00080BD82B000900192002068B9FFE70198A2",
795 ":101CF00040B2002808D4FFE7009940F61A00C0F26D",
796 ":101D00000100006808603DE00198C0B2C0280DD312",
797 ":101D1000FFE70198C0B2DF2808D8FFE7009940F636",
798 ":101D20001E00C0F20100006808602BE00198C0B2FC",
799 ":101D3000E0280DD3FFE70198C0B2EF2808D8FFE7ED",
800 ":101D4000009940F62200C0F201000068086019E026",
801 ":101D50000198C0B2F0280DD3FFE70198C0B2F72870",
802 ":101D600008D8FFE7009940F62600C0F2010000689D",
803 ":101D7000086007E0009940F62A00C0F20100006800",
804 ":101D80000860FFE702B0704780B56F46B6B00F91AC",
805 ":101D9000109011931292002013901490FFE7119964",
806 ":101DA0001498884201D2FFE700E09BE11498011DDE",
807 ":101DB0004FF0000040F1000015918DF858009DF89B",
808 ":101DC000580008B9FFE707E040F2BC60C0F201002C",
809 ":101DD00010210022FEF7D7FD1199159888421BD8D3",
810 ":101DE000FFE7119812991791189014990B91179A6F",
811 ":101DF00018980C900A440D9202460E92411A4FF028",
812 ":101E0000000040F10000C0F1010019918DF8680058",
813 ":101E10009DF8680008B101E05FE007E040F2CC60A7",
814 ":101E2000C0F2010010210022FEF7ADFD0E980C99C2",
815 ":101E3000199A09920A460A92884201D8FFE703E0FC",
816 ":101E40000A990E98FEF75CFD0B980E99884201D80E",
817 ":101E5000FFE703E00E990B98FEF752FD0D980999E4",
818 ":101E60001C911B901B9800F04CF910F0803F01D0A2",
819 ":101E7000FFE732E0FFE71398011D4FF0000040F14B",
820 ":101E800000001D918DF878009DF8780008B9FFE7F3",
821 ":101E900007E040F2DC60C0F2010010210022FEF7F2",
822 ":101EA00072FD1D981390FFE71498011D4FF000007C",
823 ":101EB00040F100001F918DF880009DF8800008B966",
824 ":101EC000FFE707E040F2EC60C0F2010010210022C1",
825 ":101ED000FEF759FD1F98149068E7119914988842ED",
826 ":101EE00008D2FFE71199149807900A460892884291",
827 ":101EF00001D301E0F4E003E008990798FEF700FD44",
828 ":101F00000F991298079A825C21A8FFF7EAFEBDF8A4",
829 ":101F1000840070B1FFE70F98BDF88410ADF88C1005",
830 ":101F2000FEF701FF10992298239A4A60086036B0A4",
831 ":101F300080BD9DF8861008460690149809184FF049",
832 ":101F4000000040F1000024918DF894009DF8940069",
833 ":101F500008B9FFE707E040F2FC60C0F20100102181",
834 ":101F60000022FEF710FD1199249888420ED9FFE750",
835 ":101F70000F98FEF7D8FE109940F29022C0F20102AD",
836 ":101F8000106852684A60086036B080BDFFE7069866",
837 ":101F900000F00700012815D0FFE706991198129A62",
838 ":101FA000269227901498059001F0070109184FF028",
839 ":101FB000000040F1000028918DF8A4009DF8A400D5",
840 ":101FC00008B101E058E007E040F20C70C0F20100F7",
841 ":101FD00010210022FEF7D7FC059928980290269A36",
842 ":101FE000279B03930A440492411A4FF0000040F1EA",
843 ":101FF0000000C0F101002A918DF8AC009DF8AC0002",
844 ":1020000008B9FFE707E040F21C70C0F201001021A0",
845 ":102010000022FEF7B8FC029803992A9A00920A4619",
846 ":102020000192884201D8FFE703E001990298FEF788",
847 ":1020300067FC05980299884201D8FFE703E00299FE",
848 ":102040000598FEF75DFC009B049A0F992CA800F000",
849 ":102050005BF8BDF8B40070B1FFE70F98BDF8B4109D",
850 ":10206000ADF8BC10FEF75FFE10992E982F9A4A60CB",
851 ":10207000086036B080BDFFE70699149801F00701AB",
852 ":1020800009184FF0000040F1000030918DF8C400B5",
853 ":102090009DF8C40008B9FFE707E040F22C70C0F2D9",
854 ":1020A000010010210022FEF76EFC30981490139866",
855 ":1020B000411C4FF0000040F1000032918DF8CC003F",
856 ":1020C0009DF8CC0008B9FFE707E040F23C70C0F291",
857 ":1020D000010010210022FEF756FC32981390FFE712",
858 ":1020E000FFE75CE60F9813990022ADF8D4203491F5",
859 ":1020F000FEF719FE10993498359A4A60086036B098",
860 ":1021000080BD0068704700BF80B56F468EB00191FA",
861 ":102110000290184603900492581E01460591032828",
862 ":1021200004D80599DFE801F00A232F3B40F225503F",
863 ":10213000C0F2010018210022FEF725FC0398014699",
864 ":10214000009108B1FFE703E000990020FEF7D8FBFB",
865 ":102150000299049800780022ADF81C208DF81A200E",
866 ":10216000ADF818000698079A4A60086023E0039BC0",
867 ":10217000049A019908A800F0B0F802990898099A01",
868 ":102180004A60086017E0039B049A01990AA800F0CE",
869 ":1021900059F902990A980B9A4A6008600BE0039B70",
870 ":1021A000049A01990CA800F07EFA02990C980D9AF5",
871 ":1021B0004A600860FFE70EB080BD80B56F46D0B0C2",
872 ":1021C000089306920391049009A80790AA214FF45E",
873 ":1021D0008072059200F01AFC0599069A079800F0A3",
874 ":1021E000C9FB089B4993FFE7499890B1FFE74998DD",
875 ":1021F0004FF4807100F0FEFB0399024601920968DA",
876 ":102200004A914A994B9109A90291B0F5807F01D971",
877 ":1022100001E040E004E001984FF48071FEF770FBAC",
878 ":102220000198002801D3FFE703E001990020FEF7A1",
879 ":1022300067FB04980299019A4D924C914C9A4D9BE0",
880 ":102240004BA9FEF7E9FC01460091000430B1FFE71D",
881 ":102250000498FEF768FD009850B080BD0199499838",
882 ":10226000411A4FF0000040F10000C0F101004E9112",
883 ":102270008DF83C019DF83C0108B9FFE707E040F20A",
884 ":102280009C70C0F2010010210022FEF77CFB4E98EA",
885 ":102290004990FFE7A8E7002050B080BD4168806802",
886 ":1022A0004FF0553202EA5102891A4FF0333202EAF6",
887 ":1022B000910221F0CC31114401EB111121F0F031E8",
888 ":1022C0004FF001325143B0EB116018BF012070474D",
889 ":1022D00081B00091009801B0704780B56F468EB014",
890 ":1022E000099305910690184607900892981EB0FA37",
891 ":1022F00080F04009FEF7ABFD099B18460A900BB130",
892 ":10230000FFE703E00A990020FEF7FAFA0898007840",
893 ":1023100000F0E000C038B0FA80F04009FEF797FD09",
894 ":1023200007980146049108B1FFE703E004990020F3",
895 ":10233000FEF7E6FA07980899097801F01F010022D4",
896 ":102340008DF82E20ADF82C1001460391022801D300",
897 ":10235000FFE703E003990120FEF7D2FA08984078DE",
898 ":1023600000F0C00080280ED0FFE70598FEF7DBFCE8",
899 ":10237000069940F29822C0F20102106852684A6041",
900 ":1023800008600EB080BDFFE707989DF82E20BDF8CD",
901 ":102390002C1041EA02429101C2F384228DF82E20D2",
902 ":1023A000ADF82C109DF82E20BDF82C1041EA02410A",
903 ":1023B000019101460291022801D3FFE703E002994F",
904 ":1023C0000120FEF79DFA01980899497801F03F0134",
905 ":1023D0000843ADF82C006FF35F50000C8DF82E0011",
906 ":1023E0009DF82E10BDF82C0040EA01407F280ED841",
907 ":1023F000FFE70598FEF797FC069940F2A022C0F28D",
908 ":102400000102106852684A6008600EB080BDFFE7A4",
909 ":1024100005989DF82E10BDF82C2042EA01410023BA",
910 ":10242000ADF83430ADF830206FF35F51090C8DF802",
911 ":102430003210FEF778FC06990C980D9A4A600860F5",
912 ":102440000EB080BD80B56F4692B00D9309910A9091",
913 ":1024500018460B900C92D81EB0FA80F04009FEF797",
914 ":10246000F6FC0D9B18460E900BB1FFE703E00E99AA",
915 ":102470000020FEF745FA0C98007800F0F000E038F4",
916 ":10248000B0FA80F04009FEF7E2FC0B980146089193",
917 ":1024900008B1FFE703E008990020FEF731FA0B9836",
918 ":1024A0000C99097801F00F0100228DF83E20ADF85B",
919 ":1024B0003C1001460791022801D3FFE703E007998A",
920 ":1024C0000120FEF71DFA0C98407800F0C00080282B",
921 ":1024D0000ED0FFE70998FEF726FC0A9940F2A822E1",
922 ":1024E000C0F20102106852684A60086012B080BDF4",
923 ":1024F000FFE70B989DF83E20BDF83C1041EA0242F0",
924 ":102500009101C2F384228DF83E20ADF83C109DF875",
925 ":102510003E20BDF83C1041EA02410591014606917A",
926 ":10252000022801D3FFE703E006990120FEF7E8F94E",
927 ":102530000B9805990C9A527802F03F021143ADF8BE",
928 ":102540003C106FF35F51090C8DF83E100146049169",
929 ":10255000032801D3FFE703E004990220FEF7D0F936",
930 ":102560000C98807800F0C00080280ED0FFE7099812",
931 ":10257000FEF7D9FB0A9940F2B022C0F201021068BE",
932 ":1025800052684A60086012B080BDFFE70B989DF862",
933 ":102590003E20BDF83C1041EA02429101C2F3842280",
934 ":1025A0008DF83E20ADF83C109DF83E20BDF83C1063",
935 ":1025B00041EA0241029101460391032801D3FFE75A",
936 ":1025C00003E003990220FEF79BF902980C998978A1",
937 ":1025D00001F03F010843ADF83C006FF35F50000C81",
938 ":1025E0008DF83E009DF83E10BDF83C0040EA0141E8",
939 ":1025F0000020B0EBD12F0ED1FFE70998FEF793FB37",
940 ":102600000A9940F2B822C0F20102106852684A608A",
941 ":10261000086012B080BDFFE79DF83E10BDF83C0099",
942 ":1026200040EA0140B0F5584F0DD3FFE79DF83E104A",
943 ":10263000BDF83C0040EA01410020B1F5604F38BFD1",
944 ":102640000120019002E000200190FFE70198C007FF",
945 ":1026500070B1FFE70998FEF766FB0A9940F2C022C5",
946 ":10266000C0F20102106852684A60086012B080BD72",
947 ":10267000FFE709989DF83E10BDF83C2042EA014171",
948 ":102680000023ADF84430ADF840206FF35F51090CE2",
949 ":102690008DF84210FEF747FB0A991098119A4A608C",
950 ":1026A000086012B080BD80B56F4694B00F930B9157",
951 ":1026B0000C9018460D900E92181FB0FA80F0400949",
952 ":1026C000FEF7C5FB0F9B184610900BB1FFE703E028",
953 ":1026D00010990020FEF714F90E98007800F0F80029",
954 ":1026E000F038B0FA80F04009FEF7B1FB0D980146D2",
955 ":1026F0000A9108B1FFE703E00A990020FEF700F90C",
956 ":102700000D980E99097801F0070100228DF84620F6",
957 ":10271000ADF8441001460991022801D3FFE703E018",
958 ":1027200009990120FEF7ECF80E98407800F0C000FF",
959 ":1027300080280ED0FFE70B98FEF7F5FA0C9940F2CF",
960 ":10274000C822C0F20102106852684A60086014B0E2",
961 ":1027500080BDFFE70D989DF84620BDF8441041EA82",
962 ":1027600002429101C2F384228DF84620ADF8441054",
963 ":102770009DF84620BDF8441041EA02410791014608",
964 ":102780000891022801D3FFE703E008990120FEF732",
965 ":10279000B7F80D9807990E9A527802F03F0211434C",
966 ":1027A000ADF844106FF35F51090C8DF846100146E7",
967 ":1027B0000691032801D3FFE703E006990220FEF704",
968 ":1027C0009FF80E98807800F0C00080280ED0FFE7B8",
969 ":1027D0000B98FEF7A8FA0C9940F2D022C0F2010241",
970 ":1027E000106852684A60086014B080BDFFE70D9819",
971 ":1027F0009DF84620BDF8441041EA02429101C2F31F",
972 ":1028000084228DF84620ADF844109DF84620BDF88E",
973 ":10281000441041EA0241049101460591032801D385",
974 ":10282000FFE703E005990220FEF76AF80D98049986",
975 ":102830000E9A927802F03F021143ADF844106FF304",
976 ":102840005F51090C8DF8461001460391042801D30D",
977 ":10285000FFE703E003990320FEF752F80E98C078D3",
978 ":1028600000F0C00080280ED0FFE70B98FEF75BFA5F",
979 ":102870000C9940F2D822C0F20102106852684A60F6",
980 ":10288000086014B080BDFFE70D989DF84620BDF8A4",
981 ":10289000441041EA02429101C2F384228DF846209D",
982 ":1028A000ADF844109DF84620BDF8441041EA0241BD",
983 ":1028B000019101460291042801D3FFE703E0029948",
984 ":1028C0000320FEF71DF801980E99C97801F03F0129",
985 ":1028D0000843ADF844006FF35F50000C8DF84600DC",
986 ":1028E0009DF8460001040020B0EB114F0ED1FFE728",
987 ":1028F0000B98FEF718FA0C9940F2E022C0F20102A0",
988 ":10290000106852684A60086014B080BDFFE79DF807",
989 ":102910004610BDF8440040EA0140B0F5881F0ED3D0",
990 ":10292000FFE70B98FEF7FFF90C9940F2E822C0F29E",
991 ":102930000102106852684A60086014B080BDFFE769",
992 ":102940000B989DF84610BDF8442042EA014100234F",
993 ":10295000ADF84C30ADF848206FF35F51090C8DF89D",
994 ":102960004A10FEF7E0F90C991298139A4A60086031",
995 ":1029700014B080BD80B56F468AB003920691059071",
996 ":102980000698049000200790FFE7049907980290AA",
997 ":10299000884209D2FFE702980599009106990A46F4",
998 ":1029A0000192884201D301E022E003E001990298FC",
999 ":1029B000FDF7A6FF03980099029A8854FFE707984D",
1000 ":1029C000411C4FF0000040F1000008918DF82400F8",
1001 ":1029D0009DF8240008B9FFE707E040F2AC70C0F2B0",
1002 ":1029E000010010210022FDF7CEFF08980790CCE7E8",
1003 ":1029F0000AB080BD82B000910190884203D2FFE707",
1004 ":102A0000019802B07047009802B0704780B56F46D9",
1005 ":102A10001AB312F0030EA2F1010C034611D0BEF15D",
1006 ":102A2000010F03F8011B01D162460AE0BEF1020F5B",
1007 ":102A3000417003D1023A831C03E000BF033AC31C78",
1008 ":102A40008170BCF1030F38BF80BD043B03F8041F45",
1009 ":0C2A5000043A59709970D970F8D180BD1B",
1010 ":00000001FF",
1011 };
1012 const expected_hex = switch (builtin.zig_backend) {
1013 .stage1 => expected_stage1_hex,
1014 .stage2_llvm => expected_stage2_llvm_hex,
1015 else => @compileError("honestly you should just delete this test"),
1016 };
1631017
164 test_step.dependOn(&CheckFileStep.create(b, hex_step.getOutputSource(), expected_hex).step);1018 test_step.dependOn(&CheckFileStep.create(b, hex_step.getOutputSource(), expected_hex).step);
165 test_step.dependOn(&CheckFileStep.create(b, explicit_format_hex_step.getOutputSource(), expected_hex).step);1019 test_step.dependOn(&CheckFileStep.create(b, explicit_format_hex_step.getOutputSource(), expected_hex).step);
test/tests.zig+2-2
...@@ -1021,7 +1021,7 @@ pub const StandaloneContext = struct {...@@ -1021,7 +1021,7 @@ pub const StandaloneContext = struct {
1021 defer zig_args.resize(zig_args_base_len) catch unreachable;1021 defer zig_args.resize(zig_args_base_len) catch unreachable;
10221022
1023 const run_cmd = b.addSystemCommand(zig_args.items);1023 const run_cmd = b.addSystemCommand(zig_args.items);
1024 const log_step = b.addLog("PASS {s} ({s})\n", .{ annotated_case_name, @tagName(mode) });1024 const log_step = b.addLog("PASS {s} ({s})", .{ annotated_case_name, @tagName(mode) });
1025 log_step.step.dependOn(&run_cmd.step);1025 log_step.step.dependOn(&run_cmd.step);
10261026
1027 self.step.dependOn(&log_step.step);1027 self.step.dependOn(&log_step.step);
...@@ -1046,7 +1046,7 @@ pub const StandaloneContext = struct {...@@ -1046,7 +1046,7 @@ pub const StandaloneContext = struct {
1046 exe.linkSystemLibrary("c");1046 exe.linkSystemLibrary("c");
1047 }1047 }
10481048
1049 const log_step = b.addLog("PASS {s}\n", .{annotated_case_name});1049 const log_step = b.addLog("PASS {s}", .{annotated_case_name});
1050 log_step.step.dependOn(&exe.step);1050 log_step.step.dependOn(&exe.step);
10511051
1052 self.step.dependOn(&log_step.step);1052 self.step.dependOn(&log_step.step);
test/translate_c.zig+240-218
...@@ -549,25 +549,27 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -549,25 +549,27 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
549 \\};549 \\};
550 });550 });
551551
552 cases.add("function prototype translated as optional",552 if (builtin.zig_backend != .stage1) {
553 \\typedef void (*fnptr_ty)(void);553 cases.add("function prototype translated as optional",
554 \\typedef __attribute__((cdecl)) void (*fnptr_attr_ty)(void);554 \\typedef void (*fnptr_ty)(void);
555 \\struct foo {555 \\typedef __attribute__((cdecl)) void (*fnptr_attr_ty)(void);
556 \\ __attribute__((cdecl)) void (*foo)(void);556 \\struct foo {
557 \\ void (*bar)(void);557 \\ __attribute__((cdecl)) void (*foo)(void);
558 \\ fnptr_ty baz;558 \\ void (*bar)(void);
559 \\ fnptr_attr_ty qux;559 \\ fnptr_ty baz;
560 \\};560 \\ fnptr_attr_ty qux;
561 , &[_][]const u8{561 \\};
562 \\pub const fnptr_ty = ?fn () callconv(.C) void;562 , &[_][]const u8{
563 \\pub const fnptr_attr_ty = ?fn () callconv(.C) void;563 \\pub const fnptr_ty = ?*const fn () callconv(.C) void;
564 \\pub const struct_foo = extern struct {564 \\pub const fnptr_attr_ty = ?*const fn () callconv(.C) void;
565 \\ foo: ?fn () callconv(.C) void,565 \\pub const struct_foo = extern struct {
566 \\ bar: ?fn () callconv(.C) void,566 \\ foo: ?*const fn () callconv(.C) void,
567 \\ baz: fnptr_ty,567 \\ bar: ?*const fn () callconv(.C) void,
568 \\ qux: fnptr_attr_ty,568 \\ baz: fnptr_ty,
569 \\};569 \\ qux: fnptr_attr_ty,
570 });570 \\};
571 });
572 }
571573
572 cases.add("function prototype with parenthesis",574 cases.add("function prototype with parenthesis",
573 \\void (f0) (void *L);575 \\void (f0) (void *L);
...@@ -895,20 +897,22 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -895,20 +897,22 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
895 \\pub const baz = c_int;897 \\pub const baz = c_int;
896 });898 });
897899
898 cases.add("casting pointers to ints and ints to pointers",900 if (builtin.zig_backend != .stage1) {
899 \\void foo(void);901 cases.add("casting pointers to ints and ints to pointers",
900 \\void bar(void) {902 \\void foo(void);
901 \\ void *func_ptr = foo;903 \\void bar(void) {
902 \\ void (*typed_func_ptr)(void) = (void (*)(void)) (unsigned long) func_ptr;904 \\ void *func_ptr = foo;
903 \\}905 \\ void (*typed_func_ptr)(void) = (void (*)(void)) (unsigned long) func_ptr;
904 , &[_][]const u8{906 \\}
905 \\pub extern fn foo() void;907 , &[_][]const u8{
906 \\pub export fn bar() void {908 \\pub extern fn foo() void;
907 \\ var func_ptr: ?*anyopaque = @ptrCast(?*anyopaque, foo);909 \\pub export fn bar() void {
908 \\ var typed_func_ptr: ?fn () callconv(.C) void = @intToPtr(?fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr)));910 \\ var func_ptr: ?*anyopaque = @ptrCast(?*anyopaque, foo);
909 \\ _ = typed_func_ptr;911 \\ var typed_func_ptr: ?*const fn () callconv(.C) void = @intToPtr(?*const fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr)));
910 \\}912 \\ _ = typed_func_ptr;
911 });913 \\}
914 });
915 }
912916
913 cases.add("noreturn attribute",917 cases.add("noreturn attribute",
914 \\void foo(void) __attribute__((noreturn));918 \\void foo(void) __attribute__((noreturn));
...@@ -968,19 +972,21 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -968,19 +972,21 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
968 \\}972 \\}
969 });973 });
970974
971 cases.add("typedef of function in struct field",975 if (builtin.zig_backend != .stage1) {
972 \\typedef void lws_callback_function(void);976 cases.add("typedef of function in struct field",
973 \\struct Foo {977 \\typedef void lws_callback_function(void);
974 \\ void (*func)(void);978 \\struct Foo {
975 \\ lws_callback_function *callback_http;979 \\ void (*func)(void);
976 \\};980 \\ lws_callback_function *callback_http;
977 , &[_][]const u8{981 \\};
978 \\pub const lws_callback_function = fn () callconv(.C) void;982 , &[_][]const u8{
979 \\pub const struct_Foo = extern struct {983 \\pub const lws_callback_function = fn () callconv(.C) void;
980 \\ func: ?fn () callconv(.C) void,984 \\pub const struct_Foo = extern struct {
981 \\ callback_http: ?lws_callback_function,985 \\ func: ?*const fn () callconv(.C) void,
982 \\};986 \\ callback_http: ?*const lws_callback_function,
983 });987 \\};
988 });
989 }
984990
985 cases.add("pointer to struct demoted to opaque due to bit fields",991 cases.add("pointer to struct demoted to opaque due to bit fields",
986 \\struct Foo {992 \\struct Foo {
...@@ -1051,17 +1057,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1051,17 +1057,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1051 \\pub const Foo = struct_Foo;1057 \\pub const Foo = struct_Foo;
1052 });1058 });
10531059
1054 cases.add("self referential struct with function pointer",1060 if (builtin.zig_backend != .stage1) {
1055 \\struct Foo {1061 cases.add("self referential struct with function pointer",
1056 \\ void (*derp)(struct Foo *foo);1062 \\struct Foo {
1057 \\};1063 \\ void (*derp)(struct Foo *foo);
1058 , &[_][]const u8{1064 \\};
1059 \\pub const struct_Foo = extern struct {1065 , &[_][]const u8{
1060 \\ derp: ?fn ([*c]struct_Foo) callconv(.C) void,1066 \\pub const struct_Foo = extern struct {
1061 \\};1067 \\ derp: ?*const fn ([*c]struct_Foo) callconv(.C) void,
1062 ,1068 \\};
1063 \\pub const Foo = struct_Foo;1069 ,
1064 });1070 \\pub const Foo = struct_Foo;
1071 });
1072 }
10651073
1066 cases.add("struct prototype used in func",1074 cases.add("struct prototype used in func",
1067 \\struct Foo;1075 \\struct Foo;
...@@ -1327,11 +1335,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1327,11 +1335,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1327 \\pub extern fn func(array: [*c]c_int) void;1335 \\pub extern fn func(array: [*c]c_int) void;
1328 });1336 });
13291337
1330 cases.add("__cdecl doesn't mess up function pointers",1338 if (builtin.zig_backend != .stage1) {
1331 \\void foo(void (__cdecl *fn_ptr)(void));1339 cases.add("__cdecl doesn't mess up function pointers",
1332 , &[_][]const u8{1340 \\void foo(void (__cdecl *fn_ptr)(void));
1333 \\pub extern fn foo(fn_ptr: ?fn () callconv(.C) void) void;1341 , &[_][]const u8{
1334 });1342 \\pub extern fn foo(fn_ptr: ?*const fn () callconv(.C) void) void;
1343 });
1344 }
13351345
1336 cases.add("void cast",1346 cases.add("void cast",
1337 \\void foo() {1347 \\void foo() {
...@@ -1674,13 +1684,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1674,13 +1684,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1674 \\pub extern var my_enum: enum_enum_ty;1684 \\pub extern var my_enum: enum_enum_ty;
1675 });1685 });
16761686
1677 cases.add("Parameterless function pointers",1687 if (builtin.zig_backend != .stage1) {
1678 \\typedef void (*fn0)();1688 cases.add("Parameterless function pointers",
1679 \\typedef void (*fn1)(char);1689 \\typedef void (*fn0)();
1680 , &[_][]const u8{1690 \\typedef void (*fn1)(char);
1681 \\pub const fn0 = ?fn (...) callconv(.C) void;1691 , &[_][]const u8{
1682 \\pub const fn1 = ?fn (u8) callconv(.C) void;1692 \\pub const fn0 = ?*const fn (...) callconv(.C) void;
1683 });1693 \\pub const fn1 = ?*const fn (u8) callconv(.C) void;
1694 });
1695 }
16841696
1685 cases.addWithTarget("Calling convention", .{1697 cases.addWithTarget("Calling convention", .{
1686 .cpu_arch = .i386,1698 .cpu_arch = .i386,
...@@ -1880,60 +1892,64 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -1880,60 +1892,64 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
1880 \\pub const SDL_INIT_VIDEO = @as(c_ulonglong, 0x00000020);1892 \\pub const SDL_INIT_VIDEO = @as(c_ulonglong, 0x00000020);
1881 });1893 });
18821894
1883 cases.add("generate inline func for #define global extern fn",1895 if (builtin.zig_backend != .stage1) {
1884 \\extern void (*fn_ptr)(void);1896 cases.add("generate inline func for #define global extern fn",
1885 \\#define foo fn_ptr1897 \\extern void (*fn_ptr)(void);
1886 \\1898 \\#define foo fn_ptr
1887 \\extern char (*fn_ptr2)(int, float);1899 \\
1888 \\#define bar fn_ptr21900 \\extern char (*fn_ptr2)(int, float);
1889 , &[_][]const u8{1901 \\#define bar fn_ptr2
1890 \\pub extern var fn_ptr: ?fn () callconv(.C) void;1902 , &[_][]const u8{
1891 ,1903 \\pub extern var fn_ptr: ?*const fn () callconv(.C) void;
1892 \\pub inline fn foo() void {1904 ,
1893 \\ return fn_ptr.?();1905 \\pub inline fn foo() void {
1894 \\}1906 \\ return fn_ptr.?();
1895 ,1907 \\}
1896 \\pub extern var fn_ptr2: ?fn (c_int, f32) callconv(.C) u8;1908 ,
1897 ,1909 \\pub extern var fn_ptr2: ?*const fn (c_int, f32) callconv(.C) u8;
1898 \\pub inline fn bar(arg_1: c_int, arg_2: f32) u8 {1910 ,
1899 \\ return fn_ptr2.?(arg_1, arg_2);1911 \\pub inline fn bar(arg_1: c_int, arg_2: f32) u8 {
1900 \\}1912 \\ return fn_ptr2.?(arg_1, arg_2);
1901 });1913 \\}
1914 });
1915 }
19021916
1903 cases.add("macros with field targets",1917 if (builtin.zig_backend != .stage1) {
1904 \\typedef unsigned int GLbitfield;1918 cases.add("macros with field targets",
1905 \\typedef void (*PFNGLCLEARPROC) (GLbitfield mask);1919 \\typedef unsigned int GLbitfield;
1906 \\typedef void(*OpenGLProc)(void);1920 \\typedef void (*PFNGLCLEARPROC) (GLbitfield mask);
1907 \\union OpenGLProcs {1921 \\typedef void(*OpenGLProc)(void);
1908 \\ OpenGLProc ptr[1];1922 \\union OpenGLProcs {
1909 \\ struct {1923 \\ OpenGLProc ptr[1];
1910 \\ PFNGLCLEARPROC Clear;1924 \\ struct {
1911 \\ } gl;1925 \\ PFNGLCLEARPROC Clear;
1912 \\};1926 \\ } gl;
1913 \\extern union OpenGLProcs glProcs;1927 \\};
1914 \\#define glClearUnion glProcs.gl.Clear1928 \\extern union OpenGLProcs glProcs;
1915 \\#define glClearPFN PFNGLCLEARPROC1929 \\#define glClearUnion glProcs.gl.Clear
1916 , &[_][]const u8{1930 \\#define glClearPFN PFNGLCLEARPROC
1917 \\pub const GLbitfield = c_uint;1931 , &[_][]const u8{
1918 \\pub const PFNGLCLEARPROC = ?fn (GLbitfield) callconv(.C) void;1932 \\pub const GLbitfield = c_uint;
1919 \\pub const OpenGLProc = ?fn () callconv(.C) void;1933 \\pub const PFNGLCLEARPROC = ?*const fn (GLbitfield) callconv(.C) void;
1920 \\const struct_unnamed_1 = extern struct {1934 \\pub const OpenGLProc = ?*const fn () callconv(.C) void;
1921 \\ Clear: PFNGLCLEARPROC,1935 \\const struct_unnamed_1 = extern struct {
1922 \\};1936 \\ Clear: PFNGLCLEARPROC,
1923 \\pub const union_OpenGLProcs = extern union {1937 \\};
1924 \\ ptr: [1]OpenGLProc,1938 \\pub const union_OpenGLProcs = extern union {
1925 \\ gl: struct_unnamed_1,1939 \\ ptr: [1]OpenGLProc,
1926 \\};1940 \\ gl: struct_unnamed_1,
1927 \\pub extern var glProcs: union_OpenGLProcs;1941 \\};
1928 ,1942 \\pub extern var glProcs: union_OpenGLProcs;
1929 \\pub const glClearPFN = PFNGLCLEARPROC;1943 ,
1930 ,1944 \\pub const glClearPFN = PFNGLCLEARPROC;
1931 \\pub inline fn glClearUnion(arg_2: GLbitfield) void {1945 ,
1932 \\ return glProcs.gl.Clear.?(arg_2);1946 \\pub inline fn glClearUnion(arg_2: GLbitfield) void {
1933 \\}1947 \\ return glProcs.gl.Clear.?(arg_2);
1934 ,1948 \\}
1935 \\pub const OpenGLProcs = union_OpenGLProcs;1949 ,
1936 });1950 \\pub const OpenGLProcs = union_OpenGLProcs;
1951 });
1952 }
19371953
1938 cases.add("macro pointer cast",1954 cases.add("macro pointer cast",
1939 \\#define NRF_GPIO_BASE 01955 \\#define NRF_GPIO_BASE 0
...@@ -2840,35 +2856,37 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -2840,35 +2856,37 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
2840 \\}2856 \\}
2841 });2857 });
28422858
2843 cases.add("deref function pointer",2859 if (builtin.zig_backend != .stage1) {
2844 \\void foo(void) {}2860 cases.add("deref function pointer",
2845 \\int baz(void) { return 0; }2861 \\void foo(void) {}
2846 \\void bar(void) {2862 \\int baz(void) { return 0; }
2847 \\ void(*f)(void) = foo;2863 \\void bar(void) {
2848 \\ int(*b)(void) = baz;2864 \\ void(*f)(void) = foo;
2849 \\ f();2865 \\ int(*b)(void) = baz;
2850 \\ (*(f))();2866 \\ f();
2851 \\ foo();2867 \\ (*(f))();
2852 \\ b();2868 \\ foo();
2853 \\ (*(b))();2869 \\ b();
2854 \\ baz();2870 \\ (*(b))();
2855 \\}2871 \\ baz();
2856 , &[_][]const u8{2872 \\}
2857 \\pub export fn foo() void {}2873 , &[_][]const u8{
2858 \\pub export fn baz() c_int {2874 \\pub export fn foo() void {}
2859 \\ return 0;2875 \\pub export fn baz() c_int {
2860 \\}2876 \\ return 0;
2861 \\pub export fn bar() void {2877 \\}
2862 \\ var f: ?fn () callconv(.C) void = foo;2878 \\pub export fn bar() void {
2863 \\ var b: ?fn () callconv(.C) c_int = baz;2879 \\ var f: ?*const fn () callconv(.C) void = foo;
2864 \\ f.?();2880 \\ var b: ?*const fn () callconv(.C) c_int = baz;
2865 \\ f.?();2881 \\ f.?();
2866 \\ foo();2882 \\ f.?();
2867 \\ _ = b.?();2883 \\ foo();
2868 \\ _ = b.?();2884 \\ _ = b.?();
2869 \\ _ = baz();2885 \\ _ = b.?();
2870 \\}2886 \\ _ = baz();
2871 });2887 \\}
2888 });
2889 }
28722890
2873 cases.add("pre increment/decrement",2891 cases.add("pre increment/decrement",
2874 \\void foo(void) {2892 \\void foo(void) {
...@@ -3143,73 +3161,77 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -3143,73 +3161,77 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
3143 \\}3161 \\}
3144 });3162 });
31453163
3146 cases.add("implicit casts",3164 if (builtin.zig_backend != .stage1) {
3147 \\#include <stdbool.h>3165 cases.add("implicit casts",
3148 \\3166 \\#include <stdbool.h>
3149 \\void fn_int(int x);3167 \\
3150 \\void fn_f32(float x);3168 \\void fn_int(int x);
3151 \\void fn_f64(double x);3169 \\void fn_f32(float x);
3152 \\void fn_char(char x);3170 \\void fn_f64(double x);
3153 \\void fn_bool(bool x);3171 \\void fn_char(char x);
3154 \\void fn_ptr(void *x);3172 \\void fn_bool(bool x);
3155 \\3173 \\void fn_ptr(void *x);
3156 \\void call() {3174 \\
3157 \\ fn_int(3.0f);3175 \\void call() {
3158 \\ fn_int(3.0);3176 \\ fn_int(3.0f);
3159 \\ fn_int('ABCD');3177 \\ fn_int(3.0);
3160 \\ fn_f32(3);3178 \\ fn_int('ABCD');
3161 \\ fn_f64(3);3179 \\ fn_f32(3);
3162 \\ fn_char('3');3180 \\ fn_f64(3);
3163 \\ fn_char('\x1');3181 \\ fn_char('3');
3164 \\ fn_char(0);3182 \\ fn_char('\x1');
3165 \\ fn_f32(3.0f);3183 \\ fn_char(0);
3166 \\ fn_f64(3.0);3184 \\ fn_f32(3.0f);
3167 \\ fn_bool(123);3185 \\ fn_f64(3.0);
3168 \\ fn_bool(0);3186 \\ fn_bool(123);
3169 \\ fn_bool(&fn_int);3187 \\ fn_bool(0);
3170 \\ fn_int(&fn_int);3188 \\ fn_bool(&fn_int);
3171 \\ fn_ptr(42);3189 \\ fn_int(&fn_int);
3172 \\}3190 \\ fn_ptr(42);
3173 , &[_][]const u8{3191 \\}
3174 \\pub extern fn fn_int(x: c_int) void;3192 , &[_][]const u8{
3175 \\pub extern fn fn_f32(x: f32) void;3193 \\pub extern fn fn_int(x: c_int) void;
3176 \\pub extern fn fn_f64(x: f64) void;3194 \\pub extern fn fn_f32(x: f32) void;
3177 \\pub extern fn fn_char(x: u8) void;3195 \\pub extern fn fn_f64(x: f64) void;
3178 \\pub extern fn fn_bool(x: bool) void;3196 \\pub extern fn fn_char(x: u8) void;
3179 \\pub extern fn fn_ptr(x: ?*anyopaque) void;3197 \\pub extern fn fn_bool(x: bool) void;
3180 \\pub export fn call() void {3198 \\pub extern fn fn_ptr(x: ?*anyopaque) void;
3181 \\ fn_int(@floatToInt(c_int, 3.0));3199 \\pub export fn call() void {
3182 \\ fn_int(@floatToInt(c_int, 3.0));3200 \\ fn_int(@floatToInt(c_int, 3.0));
3183 \\ fn_int(@as(c_int, 1094861636));3201 \\ fn_int(@floatToInt(c_int, 3.0));
3184 \\ fn_f32(@intToFloat(f32, @as(c_int, 3)));3202 \\ fn_int(@as(c_int, 1094861636));
3185 \\ fn_f64(@intToFloat(f64, @as(c_int, 3)));3203 \\ fn_f32(@intToFloat(f32, @as(c_int, 3)));
3186 \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '3'))));3204 \\ fn_f64(@intToFloat(f64, @as(c_int, 3)));
3187 \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '\x01'))));3205 \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '3'))));
3188 \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, 0))));3206 \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '\x01'))));
3189 \\ fn_f32(3.0);3207 \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, 0))));
3190 \\ fn_f64(3.0);3208 \\ fn_f32(3.0);
3191 \\ fn_bool(@as(c_int, 123) != 0);3209 \\ fn_f64(3.0);
3192 \\ fn_bool(@as(c_int, 0) != 0);3210 \\ fn_bool(@as(c_int, 123) != 0);
3193 \\ fn_bool(@ptrToInt(fn_int) != 0);3211 \\ fn_bool(@as(c_int, 0) != 0);
3194 \\ fn_int(@intCast(c_int, @ptrToInt(fn_int)));3212 \\ fn_bool(@ptrToInt(&fn_int) != 0);
3195 \\ fn_ptr(@intToPtr(?*anyopaque, @as(c_int, 42)));3213 \\ fn_int(@intCast(c_int, @ptrToInt(&fn_int)));
3196 \\}3214 \\ fn_ptr(@intToPtr(?*anyopaque, @as(c_int, 42)));
3197 });3215 \\}
31983216 });
3199 cases.add("function call",3217 }
3200 \\static void bar(void) { }3218
3201 \\void foo(int *(baz)(void)) {3219 if (builtin.zig_backend != .stage1) {
3202 \\ bar();3220 cases.add("function call",
3203 \\ baz();3221 \\static void bar(void) { }
3204 \\}3222 \\void foo(int *(baz)(void)) {
3205 , &[_][]const u8{3223 \\ bar();
3206 \\pub fn bar() callconv(.C) void {}3224 \\ baz();
3207 \\pub export fn foo(arg_baz: ?fn () callconv(.C) [*c]c_int) void {3225 \\}
3208 \\ var baz = arg_baz;3226 , &[_][]const u8{
3209 \\ bar();3227 \\pub fn bar() callconv(.C) void {}
3210 \\ _ = baz.?();3228 \\pub export fn foo(arg_baz: ?*const fn () callconv(.C) [*c]c_int) void {
3211 \\}3229 \\ var baz = arg_baz;
3212 });3230 \\ bar();
3231 \\ _ = baz.?();
3232 \\}
3233 });
3234 }
32133235
3214 cases.add("macro defines string literal with octal",3236 cases.add("macro defines string literal with octal",
3215 \\#define FOO "aoeu\023 derp"3237 \\#define FOO "aoeu\023 derp"