diff --git a/ci/zinc/linux_test.sh b/ci/zinc/linux_test.sh index 1239ec6164..611af4adce 100755 --- a/ci/zinc/linux_test.sh +++ b/ci/zinc/linux_test.sh @@ -59,11 +59,11 @@ stage3/bin/zig build test-universal-libc -fqemu -fwasmtime -Denable-llvm stage3/bin/zig build test-compare-output -fqemu -fwasmtime -Denable-llvm stage3/bin/zig build test-asm-link -fqemu -fwasmtime -Denable-llvm stage3/bin/zig build test-fmt -fqemu -fwasmtime -Denable-llvm +stage3/bin/zig build test-translate-c -fqemu -fwasmtime -Denable-llvm $STAGE1_ZIG build test-standalone -fqemu -fwasmtime $STAGE1_ZIG build test-stack-traces -fqemu -fwasmtime $STAGE1_ZIG build test-cli -fqemu -fwasmtime -$STAGE1_ZIG build test-translate-c -fqemu -fwasmtime $STAGE1_ZIG build test-run-translated-c -fqemu -fwasmtime $STAGE1_ZIG build docs -fqemu -fwasmtime $STAGE1_ZIG build test-cases -fqemu -fwasmtime diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index ab421c4d32..1db3f862ed 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -3236,7 +3236,10 @@ pub const epoll_event = switch (builtin.zig_backend) { }, else => extern struct { events: u32, - data: epoll_data align(4), + data: epoll_data align(switch (native_arch) { + .x86_64 => 4, + else => @alignOf(epoll_data), + }), }, }; diff --git a/lib/std/x/os/io.zig b/lib/std/x/os/io.zig index e61d212e52..35e7c3e1ed 100644 --- a/lib/std/x/os/io.zig +++ b/lib/std/x/os/io.zig @@ -117,7 +117,6 @@ pub const Reactor = struct { }; test "reactor/linux: drive async tcp client/listener pair" { - if (@import("builtin").zig_backend != .stage1) return error.SkipZigTest; if (native_os.tag != .linux) return error.SkipZigTest; const ip = std.x.net.ip; diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 9dc20755eb..6ebbd2aaf8 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2680,11 +2680,15 @@ pub const DeclGen = struct { comptime assert(struct_layout_version == 2); var offset: u64 = 0; var big_align: u32 = 0; + var any_underaligned_fields = false; for (struct_obj.fields.values()) |field| { if (field.is_comptime or !field.ty.hasRuntimeBitsIgnoreComptime()) continue; const field_align = field.normalAlignment(target); + const field_ty_align = field.ty.abiAlignment(target); + any_underaligned_fields = any_underaligned_fields or + field_align < field_ty_align; big_align = @maximum(big_align, field_align); const prev_offset = offset; offset = std.mem.alignForwardGeneric(u64, offset, field_align); @@ -2712,7 +2716,7 @@ pub const DeclGen = struct { llvm_struct_ty.structSetBody( llvm_field_types.items.ptr, @intCast(c_uint, llvm_field_types.items.len), - .False, + llvm.Bool.fromBool(any_underaligned_fields), ); return llvm_struct_ty; diff --git a/test/behavior/struct.zig b/test/behavior/struct.zig index 709c73807b..22d09a066d 100644 --- a/test/behavior/struct.zig +++ b/test/behavior/struct.zig @@ -1372,3 +1372,26 @@ test "struct field init value is size of the struct" { var s: namespace.S = .{ .blah = 1234 }; try expect(s.size == 4); } + +test "under-aligned struct field" { + if (builtin.zig_backend == .stage1) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO + + const U = extern union { + fd: i32, + u32: u32, + u64: u64, + }; + const S = extern struct { + events: u32, + data: U align(4), + }; + var runtime: usize = 1234; + const ptr = &S{ .events = 0, .data = .{ .u64 = runtime } }; + const array = @ptrCast(*const [12]u8, ptr); + const result = std.mem.readIntNative(u64, array[4..12]); + try expect(result == 1234); +} diff --git a/test/standalone.zig b/test/standalone.zig index 8eb274fa39..a53a151130 100644 --- a/test/standalone.zig +++ b/test/standalone.zig @@ -6,7 +6,10 @@ pub fn addCases(cases: *tests.StandaloneContext) void { cases.add("test/standalone/hello_world/hello.zig"); cases.addC("test/standalone/hello_world/hello_libc.zig"); cases.add("test/standalone/cat/main.zig"); - cases.add("test/standalone/issue_9693/main.zig"); + if (builtin.zig_backend == .stage1) { + // https://github.com/ziglang/zig/issues/6025 + cases.add("test/standalone/issue_9693/main.zig"); + } cases.add("test/standalone/guess_number/main.zig"); cases.add("test/standalone/main_return_error/error_u8.zig"); cases.add("test/standalone/main_return_error/error_u8_non_zero.zig"); diff --git a/test/standalone/install_raw_hex/build.zig b/test/standalone/install_raw_hex/build.zig index 56623c84ea..257bb8c128 100644 --- a/test/standalone/install_raw_hex/build.zig +++ b/test/standalone/install_raw_hex/build.zig @@ -25,7 +25,13 @@ pub fn build(b: *std.build.Builder) void { const explicit_format_hex_step = b.addInstallRaw(elf, "hello.foo", .{ .format = .hex }); test_step.dependOn(&explicit_format_hex_step.step); - const expected_hex = &[_][]const u8{ + // this test is testing machine code output matching byte-for-byte, + // which changes every time anything changes in the backend, such as + // llvm upgrades, different llvm lowering, or self-hosted arm changes... + // this is extremely brittle, I have about 5 more times I'm willing to + // maintain this test case before deleting it. + + const expected_stage1_hex = &[_][]const u8{ ":020000021000EC", ":1000D400A401010001000000A601010001000000CC", ":1000E400FC01010001000000F80101000100000012", @@ -160,6 +166,854 @@ pub fn build(b: *std.build.Builder) void { ":0C03D8000300FFE79DF8030001B0704730", ":00000001FF", }; + const expected_stage2_llvm_hex = &[_][]const u8{ + ":020000020200EC", + ":1000D4005C070100010000000608010001000000A7", + ":1000E4001C080100010000002408010001000000B8", + ":1000F40092080100010000009008010001000000C6", + ":10010400AE08010001000000AA080100010000007F", + ":10011400AE080100010000004409010001000000D4", + ":10012400C8090100010000001A0A010001000000D2", + ":10013400E40A010001000000EA0B010001000000D4", + ":10014400800C0100010000008E0C01000100000081", + ":10015400AE0C010001000000AA0C01000100000027", + ":10016400EA0C010001000000000D01000100000084", + ":10017400440D010001000000860F01000100000091", + ":10018400A40F010001000000541001000100000050", + ":10019400EE1001000100000008120100010000003F", + ":1001A400D2130100010000007214010001000000DC", + ":1001B4002E150100010000000416010001000000DA", + ":1001C40012160100010000002E16010001000000BB", + ":1001D4009A170100010000009417010001000000BB", + ":1001E4009418010001000000F61A0100010000004B", + ":1001F400941B010001000000061F01000100000023", + ":10020400041F010001000000AE1F010001000000F6", + ":100214008820010001000000B4200100010000005A", + ":10022400B6200100010000001822010001000000B6", + ":1002340072240100010000003827010001000000C1", + ":10024400B027010001000000102801000100000097", + ":100254000000000002000000000000000000000098", + ":100264000000000000000000010000000000000089", + ":100274000100000000000000000000000000000079", + ":100284000100000000000000000000000000000069", + ":100294000400000000000000050000000000000051", + ":1002A400060000000000000005000000000000003F", + ":1002B400050000000000000006000000000000002F", + ":1002C400070000000000000005000000000000001E", + ":1002D4000500000000000000050000000000000010", + ":1002E40006000000000000000800000000000000FC", + ":1002F40000000000000000000000000000000000FA", + ":1003040000000000000000000000000000000000E9", + ":1003140000000000696E7465676572206361737420", + ":10032400207472756E63617465642062697473000D", + ":10033400BC07010009000000C60701000900000015", + ":100344000100000000000000000000000000028026", + ":100354000000800101000400000002000000000011", + ":1003640000000000000000001F0000003403010032", + ":10037400000040080101FE0310040A8008008061A7", + ":10038400010004000024020000000000000000003E", + ":10039400000000001F00000016080100010000001A", + ":1003A4000000000000000000180801000100000027", + ":1003B4000000000000000000000000009C03010099", + ":1003C40002000000AAAAAAAA00000000010000007E", + ":1003D400080000000200000003000000020000000A", + ":1003E40000640000E5030100010000002002000099", + ":1003F40000000000000000000000000000000000F9", + ":1004040000000000000000000000000000000000E8", + ":1004140000000000000000000000000000000000D8", + ":10042400000000000220000000000000E5030100BD", + ":100434000100000020020000000000000000000095", + ":1004440000000000000000000000000000000000A8", + ":100454000000000000000000000000000000000098", + ":100464000000000000000000000000000220000066", + ":100474007265616368656420756E72656163686145", + ":10048400626C6520636F6465617474656D7074205B", + ":10049400746F20757365206E756C6C2076616C7555", + ":1004A40065617474656D707420746F207573652054", + ":1004B4006E756C6C2076616C756500000000696E69", + ":1004C40074656765722063617374207472756E63FA", + ":1004D4006174656420626974730001696E74656790", + ":1004E40065722063617374207472756E63617465E0", + ":1004F40064206269747300000200000000000000C0", + ":1005040000000000120801000172656163686564FF", + ":1005140020756E726561636861626C6520636F64E7", + ":10052400657265616368656420756E726561636890", + ":1005340061626C6520636F64650000000200000066", + ":100544000000000000000000696E74656765722099", + ":100554006F766572666C6F77696E74656765722015", + ":100564006F766572666C6F77696E74656765722005", + ":100574006F766572666C6F77696E746567657220F5", + ":100584006F766572666C6F77696E746567657220E5", + ":100594006F766572666C6F77696E746567657220D5", + ":1005A4006F766572666C6F77696E746567657220C5", + ":1005B4006F766572666C6F77696E746567657220B5", + ":1005C4006F766572666C6F77696E746567657220A5", + ":1005D4006F766572666C6F770000000000000000A3", + ":1005E4000000000002000000696E746567657220F7", + ":1005F4006F766572666C6F77696E74656765722075", + ":100604006F766572666C6F77696E74656765722064", + ":100614006F766572666C6F77696E74656765722054", + ":100624006F766572666C6F77696E74656765722044", + ":100634006F766572666C6F77696E74656765722034", + ":100644006F766572666C6F77696E74656765722024", + ":100654006F766572666C6F77696E74656765722014", + ":100664006F766572666C6F77696E74656765722004", + ":100674006F766572666C6F77696E746567657220F4", + ":100684006F766572666C6F77696E746567657220E4", + ":100694006F766572666C6F77696E746567657220D4", + ":1006A4006F766572666C6F77696E746567657220C4", + ":1006B4006F766572666C6F77696E746567657220B4", + ":1006C4006F766572666C6F77696E746567657220A4", + ":1006D4006F766572666C6F77696E74656765722094", + ":1006E4006F766572666C6F77696E74656765722084", + ":1006F4006F766572666C6F77696E74656765722074", + ":100704006F766572666C6F77696E74656765722063", + ":100714006F766572666C6F77696E74656765722053", + ":100724006F766572666C6F77696E74656765722043", + ":100734006F766572666C6F77696E74656765722033", + ":100744006F766572666C6F77696E74656765722023", + ":100754006F766572666C6F77696E74656765722013", + ":100764006F766572666C6F77696E74656765722003", + ":100774006F766572666C6F77696E746567657220F3", + ":100784006F766572666C6F77696E746567657220E3", + ":100794006F766572666C6F77696E746567657220D3", + ":1007A4006F766572666C6F77696E746567657220C3", + ":1007B4006F766572666C6F77636F727465785F6D60", + ":1007C4003400636F727465782D6D3400286D73671F", + ":1007D400207472756E636174656429006174746554", + ":1007E4006D707420746F20696E646578206F757401", + ":1007F400206F6620626F756E643A20696E64657856", + ":10080400207B647D2C206C656E207B647D00616E92", + ":1008140079003000310000000100000002000000F7", + ":10082400030000000400030000000000B0B502AFA4", + ":100834009EB0079203900492059112A8069000F0CE", + ":100844004EF80699079A09A8B1E81850A0E818507C", + ":1008540091E8385080E83850089200201B90FFE758", + ":1008640008991B980290884207D2FFE702980499DE", + ":100874000A460192884201D301E024E003E0019991", + ":10088400029800F03BF805980299415C09A800F031", + ":100894003DF8FFE71B98411C4FF0000040F10000B9", + ":1008A4001C918DF874009DF8740008B9FFE707E007", + ":1008B40040F24C50C0F201001021002200F061F817", + ":1008C4001C981B90CCE7039809A9B1E80C50A0E848", + ":1008D4000C5091E81C5080E81C501EB0B0BDD0B53F", + ":1008E40002AF40F2F421C0F20101B1E80C50A0E8DB", + ":1008F4000C5091E81C5080E81C50D0BD80B56F4668", + ":1009040082B000900191684600F053F880B56F46BC", + ":1009140088B00490C1F34310059001F01F00014614", + ":100924000691C0F11F001F2801D8FFE707E040F23D", + ":100934001830C0F201001B21002200F022F80598B3", + ":100944000499069A01920791079902916FF35F2027", + ":1009540001460391082801D8FFE703E00398092121", + ":10096400FFF7CCFF0299039A019B51F8220003F090", + ":100974001F0C012303FA0CF3184341F8220008B0BA", + ":1009840080BDFFE700BEFDE781B00D3000F03F0001", + ":10099400022804D3FFE700208DF8030003E00120C0", + ":1009A4008DF80300FFE79DF8030001B07047FFE7EF", + ":1009B400FEE780B56F460146002000F000F8B0B5B0", + ":1009C40002AFADF5865D84B00691059020202A9093", + ":0209D40008A871", + ":020000020200EC", + ":1000D4005C070100010000000608010001000000A7", + ":1000E4001C080100010000002408010001000000B8", + ":1000F40092080100010000009008010001000000C6", + ":10010400AE08010001000000AA080100010000007F", + ":10011400AE080100010000004409010001000000D4", + ":10012400C8090100010000001A0A010001000000D2", + ":10013400E40A010001000000EA0B010001000000D4", + ":10014400800C0100010000008E0C01000100000081", + ":10015400AE0C010001000000AA0C01000100000027", + ":10016400EA0C010001000000000D01000100000084", + ":10017400440D010001000000860F01000100000091", + ":10018400A40F010001000000541001000100000050", + ":10019400EE1001000100000008120100010000003F", + ":1001A400D2130100010000007214010001000000DC", + ":1001B4002E150100010000000416010001000000DA", + ":1001C40012160100010000002E16010001000000BB", + ":1001D4009A170100010000009417010001000000BB", + ":1001E4009418010001000000F61A0100010000004B", + ":1001F400941B010001000000061F01000100000023", + ":10020400041F010001000000AE1F010001000000F6", + ":100214008820010001000000B4200100010000005A", + ":10022400B6200100010000001822010001000000B6", + ":1002340072240100010000003827010001000000C1", + ":10024400B027010001000000102801000100000097", + ":100254000000000002000000000000000000000098", + ":100264000000000000000000010000000000000089", + ":100274000100000000000000000000000000000079", + ":100284000100000000000000000000000000000069", + ":100294000400000000000000050000000000000051", + ":1002A400060000000000000005000000000000003F", + ":1002B400050000000000000006000000000000002F", + ":1002C400070000000000000005000000000000001E", + ":1002D4000500000000000000050000000000000010", + ":1002E40006000000000000000800000000000000FC", + ":1002F40000000000000000000000000000000000FA", + ":1003040000000000000000000000000000000000E9", + ":1003140000000000696E7465676572206361737420", + ":10032400207472756E63617465642062697473000D", + ":10033400BC07010009000000C60701000900000015", + ":100344000100000000000000000000000000028026", + ":100354000000800101000400000002000000000011", + ":1003640000000000000000001F0000003403010032", + ":10037400000040080101FE0310040A8008008061A7", + ":10038400010004000024020000000000000000003E", + ":10039400000000001F00000016080100010000001A", + ":1003A4000000000000000000180801000100000027", + ":1003B4000000000000000000000000009C03010099", + ":1003C40002000000AAAAAAAA00000000010000007E", + ":1003D400080000000200000003000000020000000A", + ":1003E40000640000E5030100010000002002000099", + ":1003F40000000000000000000000000000000000F9", + ":1004040000000000000000000000000000000000E8", + ":1004140000000000000000000000000000000000D8", + ":10042400000000000220000000000000E5030100BD", + ":100434000100000020020000000000000000000095", + ":1004440000000000000000000000000000000000A8", + ":100454000000000000000000000000000000000098", + ":100464000000000000000000000000000220000066", + ":100474007265616368656420756E72656163686145", + ":10048400626C6520636F6465617474656D7074205B", + ":10049400746F20757365206E756C6C2076616C7555", + ":1004A40065617474656D707420746F207573652054", + ":1004B4006E756C6C2076616C756500000000696E69", + ":1004C40074656765722063617374207472756E63FA", + ":1004D4006174656420626974730001696E74656790", + ":1004E40065722063617374207472756E63617465E0", + ":1004F40064206269747300000200000000000000C0", + ":1005040000000000120801000172656163686564FF", + ":1005140020756E726561636861626C6520636F64E7", + ":10052400657265616368656420756E726561636890", + ":1005340061626C6520636F64650000000200000066", + ":100544000000000000000000696E74656765722099", + ":100554006F766572666C6F77696E74656765722015", + ":100564006F766572666C6F77696E74656765722005", + ":100574006F766572666C6F77696E746567657220F5", + ":100584006F766572666C6F77696E746567657220E5", + ":100594006F766572666C6F77696E746567657220D5", + ":1005A4006F766572666C6F77696E746567657220C5", + ":1005B4006F766572666C6F77696E746567657220B5", + ":1005C4006F766572666C6F77696E746567657220A5", + ":1005D4006F766572666C6F770000000000000000A3", + ":1005E4000000000002000000696E746567657220F7", + ":1005F4006F766572666C6F77696E74656765722075", + ":100604006F766572666C6F77696E74656765722064", + ":100614006F766572666C6F77696E74656765722054", + ":100624006F766572666C6F77696E74656765722044", + ":100634006F766572666C6F77696E74656765722034", + ":100644006F766572666C6F77696E74656765722024", + ":100654006F766572666C6F77696E74656765722014", + ":100664006F766572666C6F77696E74656765722004", + ":100674006F766572666C6F77696E746567657220F4", + ":100684006F766572666C6F77696E746567657220E4", + ":100694006F766572666C6F77696E746567657220D4", + ":1006A4006F766572666C6F77696E746567657220C4", + ":1006B4006F766572666C6F77696E746567657220B4", + ":1006C4006F766572666C6F77696E746567657220A4", + ":1006D4006F766572666C6F77696E74656765722094", + ":1006E4006F766572666C6F77696E74656765722084", + ":1006F4006F766572666C6F77696E74656765722074", + ":100704006F766572666C6F77696E74656765722063", + ":100714006F766572666C6F77696E74656765722053", + ":100724006F766572666C6F77696E74656765722043", + ":100734006F766572666C6F77696E74656765722033", + ":100744006F766572666C6F77696E74656765722023", + ":100754006F766572666C6F77696E74656765722013", + ":100764006F766572666C6F77696E74656765722003", + ":100774006F766572666C6F77696E746567657220F3", + ":100784006F766572666C6F77696E746567657220E3", + ":100794006F766572666C6F77696E746567657220D3", + ":1007A4006F766572666C6F77696E746567657220C3", + ":1007B4006F766572666C6F77636F727465785F6D60", + ":1007C4003400636F727465782D6D3400286D73671F", + ":1007D400207472756E636174656429006174746554", + ":1007E4006D707420746F20696E646578206F757401", + ":1007F400206F6620626F756E643A20696E64657856", + ":10080400207B647D2C206C656E207B647D00616E92", + ":1008140079003000310000000100000002000000F7", + ":10082400030000000400030000000000B0B502AFA4", + ":100834009EB0079203900492059112A8069000F0CE", + ":100844004EF80699079A09A8B1E81850A0E818507C", + ":1008540091E8385080E83850089200201B90FFE758", + ":1008640008991B980290884207D2FFE702980499DE", + ":100874000A460192884201D301E024E003E0019991", + ":10088400029800F03BF805980299415C09A800F031", + ":100894003DF8FFE71B98411C4FF0000040F10000B9", + ":1008A4001C918DF874009DF8740008B9FFE707E007", + ":1008B40040F24C50C0F201001021002200F061F817", + ":1008C4001C981B90CCE7039809A9B1E80C50A0E848", + ":1008D4000C5091E81C5080E81C501EB0B0BDD0B53F", + ":1008E40002AF40F2F421C0F20101B1E80C50A0E8DB", + ":1008F4000C5091E81C5080E81C50D0BD80B56F4668", + ":1009040082B000900191684600F053F880B56F46BC", + ":1009140088B00490C1F34310059001F01F00014614", + ":100924000691C0F11F001F2801D8FFE707E040F23D", + ":100934001830C0F201001B21002200F022F80598B3", + ":100944000499069A01920791079902916FF35F2027", + ":1009540001460391082801D8FFE703E00398092121", + ":10096400FFF7CCFF0299039A019B51F8220003F090", + ":100974001F0C012303FA0CF3184341F8220008B0BA", + ":1009840080BDFFE700BEFDE781B00D3000F03F0001", + ":10099400022804D3FFE700208DF8030003E00120C0", + ":1009A4008DF80300FFE79DF8030001B07047FFE7EF", + ":1009B400FEE780B56F460146002000F000F8B0B5B0", + ":1009C40002AFADF5865D84B00691059020202A9093", + ":0209D40008A871", + ":020000020200DC", + ":10083000B0B502AF9EB0079203900492059112A842", + ":10084000069000F04EF80699079A09A8B1E81850EA", + ":10085000A0E8185091E8385080E8385008920020FD", + ":100860001B90FFE708991B980290884207D2FFE788", + ":10087000029804990A460192884201D301E024E0DB", + ":1008800003E00199029800F03BF805980299415C59", + ":1008900009A800F03DF8FFE71B98411C4FF000004D", + ":1008A00040F100001C918DF874009DF8740008B9A7", + ":1008B000FFE707E040F24C50C0F201001021002297", + ":1008C00000F061F81C981B90CCE7039809A9B1E8E7", + ":1008D0000C50A0E80C5091E81C5080E81C501EB051", + ":1008E000B0BDD0B502AF40F2F421C0F20101B1E8D1", + ":1008F0000C50A0E80C5091E81C5080E81C50D0BD72", + ":1009000080B56F4682B000900191684600F053F8C0", + ":1009100080B56F4688B00490C1F34310059001F094", + ":100920001F0001460691C0F11F001F2801D8FFE7F4", + ":1009300007E040F21830C0F201001B21002200F055", + ":1009400022F805980499069A019207910799029155", + ":100950006FF35F2001460391082801D8FFE703E009", + ":1009600003980921FFF7CCFF0299039A019B51F8E4", + ":10097000220003F01F0C012303FA0CF3184341F883", + ":10098000220008B080BDFFE700BEFDE781B00D305A", + ":1009900000F03F00022804D3FFE700208DF8030099", + ":1009A00003E001208DF80300FFE79DF8030001B08C", + ":1009B0007047FFE7FEE780B56F460146002000F074", + ":1009C00000F8B0B502AFADF5865D84B00691059034", + ":1009D00020202A9008A82990002028900DF1AD0031", + ":1009E0000790AA2141F20F0202F010F80699079A27", + ":1009F00068460160A7F11C0028A94FF4805300F05D", + ":100A00002FF837F8140C38B9FFE757F81C1C57F8C3", + ":100A1000180C0391049016E0FFE70DF1AD00019072", + ":100A200000F5805040F2D072C0F201020F23194647", + ":100A300000F05CF801980290FFE7029941F20F0084", + ":100A400003910490FFE7059A0399049847F8101C56", + ":100A500047F80C0C57F8100C57F80C1CFFF793FFD5", + ":100A600080B56F4694B000931346009A01930B46ED", + ":100A7000019903930290B86805900AA800F0ADF9B7", + ":100A80000A980B990C9A0992089107900DA8049066", + ":100A900007A900F0B6F903980499059A00F053F8F5", + ":100AA00001460691000478B1FFE703980699ADF876", + ":100AB000401000F038F902990E980F9A109B8B6045", + ":100AC0004A60086014B080BD07A800F09CF90A468F", + ":100AD00002990023ADF84C30129211901198129A9D", + ":100AE000139B8B604A60086014B080BD80B56F4670", + ":100AF0008AB004938C46CDF804C002900392002083", + ":100B00000590994228BF012000F0A1F9049B0598A7", + ":100B100006930790FFE706990798009088420BD24A", + ":100B2000FFE70299019A0398009BC05C0992089123", + ":100B3000079A0899885400E003E00798013007906D", + ":100B4000E9E70AB080BD80B56F468AB0049205918E", + ":100B500006900968089140F2E072C0F2010208A90B", + ":100B6000252300F059F801460791000430B1FFE752", + ":100B7000069800F0D8F807980AB080BD059B069843", + ":100B800004990968EC460322CCF8002040F2184290", + ":100B9000C0F2010200F016F901460391000430B1E1", + ":100BA000FFE7069800F0BFF803980AB080BD0698EA", + ":100BB00005990968099140F2E071C0F2010101F163", + ":100BC000280209A9062300F027F801460291000433", + ":100BD00030B1FFE7069800F0A6F802980AB080BD91", + ":100BE000059B069804994968EC460322CCF800203E", + ":100BF00040F26042C0F2010200F0E4F801460191C7", + ":100C0000000430B1FFE7069800F08DF801980AB0B3", + ":100C100080BD00200AB080BD80B56F4698B00991B4", + ":100C20000A900B930C9200200D90FFE70B990D9802", + ":100C3000884222D0FFE70C980B99099A0D9B0493E8", + ":100C400012680E920E9A0F92119110900D990591C3", + ":100C5000109A119806900A44079202460892411A87", + ":100C60004FF0000040F10000C0F1010012918DF83A", + ":100C70004C009DF84C0008B101E051E007E040F263", + ":100C8000AC50C0F2010010210022FFF77CFE089852", + ":100C90000699129A02920A460392884201D8FFE707", + ":100CA00003E003990898FFF72BFE059808998842FE", + ":100CB00001D8FFE703E008990598FFF721FE079B9D", + ":100CC0000A9902986A46106014A80FAA00F019FA4F", + ":100CD000BDF8540048B1FFE70A98BDF854100191DF", + ":100CE00000F021F8019818B080BD049814990918F3", + ":100CF0004FF0000040F1000016918DF85C009DF867", + ":100D00005C0008B9FFE707E040F2BC50C0F2010008", + ":100D100010210022FFF737FE16980D90FFE785E7B8", + ":100D2000002018B080BD80B56F468EB0CDF820E0B1", + ":100D3000099018B1FFE70998079001E00EB080BD57", + ":100D400008990798039004910A900A990431059133", + ":100D5000016806918068411E4FF0000040F10000DC", + ":100D6000C0F101000B918DF830009DF8300008B9FA", + ":100D7000FFE707E040F2CC50C0F201001021002252", + ":100D8000FFF701FE059906980B9A10400246009263", + ":100D90000A68019249680A460292884201D2FFE736", + ":100DA00003E002990098FFF7ABFD03980499019ABC", + ":100DB000009B42F823100D900D99086801300860DF", + ":100DC0000EB080BD80B56F4682B000F0F9FC27F808", + ":100DD000020C37F8020C02B080BD80B56F4684B0BB", + ":100DE00001920A460199029202460298039200F08B", + ":100DF0003DF80A4603994A6008600020886004B004", + ":100E000080BD0160704780B56F4686B0016842685A", + ":100E1000836805930492039180680090039901917F", + ":100E200004990291884201D8FFE703E002990098F3", + ":100E3000FFF766FD0098002801D3FFE703E0009963", + ":100E40000020FFF75DFD0099019806B080BD80B5D8", + ":100E50006F46C00740B9FFE740F27440C0F201009E", + ":100E600018210022FFF78FFDFFE780BD80B56F4698", + ":100E700088B00191029001F02BFA019A0299034681", + ":100E80000393079206910699049107990591884268", + ":100E900001D8FFE703E005990398FFF731FD0398B8", + ":100EA000002801D3FFE703E003990020FFF728FDA6", + ":100EB0000399049808B080BD80B56F46A4B00F9226", + ":100EC00010911190B8681290139358B9FFE71199D7", + ":100ED00040F26022C0F20102106852684A60086065", + ":100EE00024B080BDFFE70F984168806888420ED328", + ":100EF000FFE71098FFF717FF119940F26822C0F240", + ":100F00000102106852684A60086024B080BDFFE7A3", + ":100F100012990F98806809184FF0000040F1000006", + ":100F200014918DF854009DF8540008B9FFE707E0CC", + ":100F300040F25C50C0F2010010210022FFF723FDB7", + ":100F40000F9914984968884203D8FFE712980E90C9", + ":100F50001CE00F9948688968411A4FF0000040F181", + ":100F60000000C0F1010016918DF85C009DF85C0056", + ":100F700008B9FFE707E040F26C50C0F20100102111", + ":100F80000022FFF700FD16980E90FFE70F980E99CC", + ":100F90000B911890189A0C9280680D9009184FF0D8", + ":100FA000000040F1000019918DF868009DF868007C", + ":100FB00008B9FFE707E040F27C50C0F201001021C1", + ":100FC0000022FFF7E0FC0D990C9B199808901A6815", + ":100FD0005B6809930A440A92411A4FF0000040F1FD", + ":100FE0000000C0F101001B918DF870009DF87000A9", + ":100FF00008B9FFE707E040F28C50C0F20100102171", + ":101000000022FFF7C0FC089809991B9A06920A462D", + ":101010000792884201D8FFE703E007990898FFF795", + ":101020006FFC0D980899884201D8FFE703E0089902", + ":101030000D98FFF765FC0B981299139A0A9BDDF83F", + ":1010400018C0CDF808C003931D921E911D990491FC", + ":101050001E990591884201D8FFE703E005990B9896", + ":10106000FFF74EFC0B98002801D3FFE703E00B9934", + ":101070000020FFF745FC0B9B049A02990398FFF7A9", + ":1010800035FD0F980B991F901F9A52F8080F019287", + ":1010900009184FF0000040F1000020918DF8840005", + ":1010A0009DF8840008B9FFE707E040F29C50C0F2C9", + ":1010B000010010210022FFF766FC0B98019A20998D", + ":1010C000116070B9FFE71098FFF72DFE119940F2FB", + ":1010D0007022C0F20102106852684A60086024B0B1", + ":1010E00080BDFFE710980B990022ADF88C2022916B", + ":1010F000FFF719FE11992298239A4A60086024B0DC", + ":1011000080BD80B56F4684B00190B8681268EC4627", + ":10111000CCF8000002A8FFF7CFFE01990298039ACD", + ":101120004A60086004B080BD80B56F468CB0049200", + ":101130000590069206985B2100F052F8C007A0B116", + ":10114000FFE70498079007985D21019100F099F856", + ":10115000024604980B46019902930392089008985E", + ":1011600000F03EF8C00708B114E01FE0059940F216", + ":10117000DC5CC0F2010CDCF80000DCF80420DCF8D8", + ":101180000830DCF80CC0C1F80CC08B604A60086005", + ":101190000CB080BDFFE705990398029A00238B816C", + ":1011A0004A600860022008720CB080BD0498099063", + ":1011B00009990AA800F0F6F89DF82C0048B1FFE75D", + ":1011C00005990A9800228A810860012008720CB0F3", + ":1011D00080BDFFE705990020888108720CB080BDB2", + ":1011E00080B56F468AB00590069141688068884254", + ":1011F0000BD2FFE70598016802914168806803906F", + ":101200000A460492884203D303E0002001900FE0D5", + ":1012100003E004990398FFF773FB06990298039A79", + ":10122000805CC9B2401AB0FA80F040090190FFE733", + ":101230000198C00790B1FFE705980790079951F80A", + ":10124000080F0091411C4FF0000040F10000089190", + ":101250008DF824009DF8240008B101E00EE007E0BD", + ":1012600040F2EC50C0F2010010210022FFF78BFB8E", + ":1012700000990898086001200AB080BD00200AB0DB", + ":1012800080BD80B56F4692B009900A914168806830", + ":101290000B90884205D3FFE74FF0AA30002112B02F", + ":1012A00080BDFFE7FFE709984168806888420BD25C", + ":1012B000FFE70998016806914168806807900A462F", + ":1012C0000892884201D301E02EE003E008990798D4", + ":1012D000FFF716FB0A990698079A805CC9B2884204", + ":1012E00001D1FFE720E0FFE7FFE709980C900C9998", + ":1012F00051F8080F0591411C4FF0000040F100002B", + ":101300000D918DF838009DF8380008B9FFE707E027", + ":1013100040F23C60C0F2010010210022FFF733FBD5", + ":1013200005990D980860BEE70B9909980F900F9BDF", + ":10133000806802901A685B6803930A440492411A19", + ":101340004FF0000040F10000C0F1010010918DF855", + ":1013500044009DF8440008B9FFE707E040F24C6004", + ":10136000C0F2010010210022FFF70DFB0298039943", + ":10137000109A00920A460192884201D8FFE703E0E2", + ":1013800001990298FFF7BCFA0B980299884201D89C", + ":10139000FFE703E002990B98FFF7B2FA009904986F", + ":1013A00012B080BD80B56F4698B00C910D9040F2A0", + ":1013B0007821C0F20101086849680F910E90FFE79B", + ":1013C0000C984168806888420BD2FFE70C9801684E", + ":1013D0000991416880680A900A460B92884201D3BD", + ":1013E00001E0C1E003E00B990A98FFF789FA099838", + ":1013F0000A99405C08900898C0B2302809D3FFE7EA", + ":101400000898C0B2392804D8FFE79DF83C0008B11D", + ":1014100009E0A9E040F28021C0F2010108684968B2", + ":101420000F910E9000E0FFE79DF83C0008B1FFE748", + ":1014300007E040F28C40C0F2010019210022FFF7C2", + ":10144000A2FA0EA807900E980A21A0FB011000280E", + ":1014500018BF012010918DF844009DF8440008B990", + ":10146000FFE707E040F2FC50C0F20100102100222B", + ":10147000FFF789FA0799109808609DF83C0008B1B9", + ":10148000FFE707E040F2A540C0F201001921002269", + ":10149000FFF779FA0C980EA902910E990391016851", + ":1014A00004914168806805900A460692884201D2FC", + ":1014B000FFE703E006990598FFF722FA04980599DB", + ":1014C000405CA0F13001C8B2401A18BF01208DF86D", + ":1014D00048108DF849009DF8490008B9FFE707E07A", + ":1014E00040F20C60C0F2010010210022FFF74BFA1D", + ":1014F00003989DF8481009184FF0000040F10000D3", + ":1015000013918DF850009DF8500008B9FFE707E0EF", + ":1015100040F21C60C0F2010010210022FFF733FAF4", + ":10152000029913980860FFE7FFE70C98159015994A", + ":1015300051F8080F0191411C4FF0000040F10000EC", + ":1015400016918DF85C009DF85C0008B9FFE707E094", + ":1015500040F22C60C0F2010010210022FFF713FAC4", + ":101560000199169808602BE70D990E980F9A4A601A", + ":10157000086018B080BD80B56F468CB006910146FA", + ":10158000069807914168806888420BD2FFE7069869", + ":10159000016803914168806804900A460592884278", + ":1015A00001D301E032E003E005990498FFF7A8F9C0", + ":1015B00006980399049A895C01910890089951F85A", + ":1015C000080F0291411C4FF0000040F1000009910A", + ":1015D0008DF828009DF8280008B9FFE707E040F2E1", + ":1015E0005C60C0F2010010210022FFF7CCF90799DE", + ":1015F0000198029B099A1A608DF82C0001208DF841", + ":101600002D00BDF82C0008800CB080BD079940F279", + ":10161000BE40C0F20100008808800CB080BD80B5DB", + ":101620006F468CB0049205910690886881184FF03F", + ":10163000000040F1000007918DF820009DF8200087", + ":1016400008B9FFE707E040F26C60C0F2010010212A", + ":101650000022FFF798F9059907984968884213D244", + ":10166000FFE7049905980268029242680392806835", + ":1016700009184FF0000040F1000009918DF8280092", + ":101680009DF8280040B108E0069940F2C040C0F241", + ":1016900001000088088022E007E040F27C60C0F290", + ":1016A000010010210022FFF76EF9039909980090BC", + ":1016B0000A460192884201D2FFE703E001990098AF", + ":1016C000FFF71EF906990298009A805C8DF82C00AD", + ":1016D00001208DF82D00BDF82C000880FFE70CB02C", + ":1016E00080BD80B56F4690B007920891099010793F", + ":1016F00020B1FFE707980068069021E0089801688C", + ":1017000004910A900A9805900068411C4FF000006F", + ":1017100040F100000B918DF830009DF8300008B9C1", + ":10172000FFE707E040F28C60C0F2010010210022C8", + ":10173000FFF729F90498059A0B9911600690FFE7C5", + ":10174000089906980390896888420BD3FFE70999A6", + ":1017500040F28822C0F20102106852684A600860B4", + ":1017600010B080BDFFE7039808990D910D9A52F8CB", + ":10177000041F01920291C0F11F001F2801D8FFE74A", + ":1017800007E040F2C240C0F201001B210022FFF737", + ":10179000FAF80999039ADDF804C0029B02F01F0EC3", + ":1017A000012000FA0EFE43EA0E03CCF800300E9240", + ":1017B0008DF83C000E980F9A4A60086010B080BD0A", + ":1017C00080B56F4682B000F006F827F8020C37F8B3", + ":1017D000020C02B080BD80B56F4684B09C466B465B", + ":1017E000C3F804C01A600A22002300F006F827F8A4", + ":1017F000020C37F8020C04B080BD80B56F46A2B071", + ":101800000D910890D1B2F8680990B8680A900B93CE", + ":101810000C920020012988BF0120FFF718FB0D98CA", + ":1018200000F0A5F80E90A7F14500AA2121220F9201", + ":1018300001F0ECF80E990F9819911A90FFE70C98A7", + ":10184000199AC1B2B2FBF1F000FB112007901A986F", + ":10185000411E4FF0000040F10000C0F101001B915B", + ":101860008DF870009DF8700008B9FFE707E040F2BE", + ":101870009C60C0F2010010210022FFF784F81B9841", + ":101880001A901A980690202801D8FFE703E00698DE", + ":101890002121FFF735F80798069AA7F14501114471", + ":1018A0000591C0F1FF00FF2801D8FFE707E040F2F3", + ":1018B000DF40C0F201001B210022FFF764F80B9902", + ":1018C000079800F055F8059A0C9910701998C9B24C", + ":1018D000B0FBF1F01990199808B9FFE701E0FFE7B4", + ":1018E000ADE71A980390A7F1450101440491D0F1A6", + ":1018F00021014FF0000040F10000C0F101001E91F5", + ":101900008DF87C009DF87C0008B9FFE707E040F205", + ":10191000AC60C0F2010010210022FFF734F81E98DD", + ":101920000290002008B9FFE703E021210846FEF7F6", + ":10193000E7FF0398212801D8FFE703E0039821215E", + ":10194000FEF7DEFF0A9B0898DDF824C00499029A8E", + ":10195000219220912099219AEE46CEF800C000F005", + ":101960008BF827F8120C37F8120C22B080BD7047A4", + ":1019700080B56F4688B0029103900020A8B9FFE7B8", + ":101980000398C0B2092810D8FFE70399302050FA15", + ":1019900081F1C8B2401A18BF01208DF814108DF8DB", + ":1019A00015009DF8150050B10AE00398C0B20A284E", + ":1019B00017D3FFE70398C0B224280ED311E007E045", + ":1019C00040F26C70C0F2010010210022FEF7DBFF34", + ":1019D0009DF8140007F80D0C4AE00298C00740B9C2", + ":1019E0000AE040F20D50C0F2010018210022FEF77B", + ":1019F000CAFF4120019002E061200190FFE70199B8", + ":101A00006FF0090050FA81F1C8B2401A18BF0120E6", + ":101A10008DF818108DF819009DF8190008B9FFE726", + ":101A200007E040F27C70C0F2010010210022FEF7B6", + ":101A3000AAFF03999DF8180050FA81F1C8B2401A24", + ":101A400018BF01208DF81C108DF81D009DF81D0099", + ":101A500008B9FFE707E040F28C70C0F201001021E6", + ":101A60000022FEF790FF9DF81C0007F80D0CFFE721", + ":101A700017F80D0C08B080BD80B56F46A8B0119363", + ":101A80001290B8681390149215919868D9681791BC", + ":101A900016909DF85C0060B1FFE7149B159A1299AF", + ":101AA0001698109018A800F06FF9BDF8640080B186", + ":101AB00012E0149B159A129813990968279127A987", + ":101AC000FFF7AAF801460F910004002840F0FF80BC", + ":101AD00003E118980E9002E014980E90FFE7109919", + ":101AE0000E980D90884210D2FFE710980D99411A78", + ":101AF0004FF0000040F10000C0F101001A918DF894", + ":101B00006C009DF86C0018B103E000200C900BE015", + ":101B100007E040F24C70C0F2010010210022FEF7F5", + ":101B200032FF1A980C90FFE70C980B9078B9FFE7FA", + ":101B3000149B159A1298139909681D911DA9FFF716", + ":101B40006BF827F82E0C37F82E0C28B080BDFFE775", + ":101B50001198007C01460A91022800F08D80FFE771", + ":101B60000A98800708B1FFE729E0149B159A12989C", + ":101B7000139909681E911EA9FFF74EF801460991B5", + ":101B8000000430B1FFE71298FFF7CDF8099828B0AC", + ":101B900080BD0B9B12981199139A12681F924A7C70", + ":101BA0001FA900F00AFB01460891000430B1FFE7CD", + ":101BB0001298FFF7B8F8089828B080BD86E00B9817", + ":101BC00041080791411C4FF0000040F100002091B6", + ":101BD0008DF884009DF8840008B9FFE707E040F223", + ":101BE0005C70C0F2010010210022FEF7CCFE079BC2", + ":101BF00012981199139ADDF880C04FEA5C0CCDF869", + ":101C000014C0126822924A7C22A900F0D6FA01463A", + ":101C10000691000430B1FFE71298FFF784F80698A8", + ":101C200028B080BD149B159A1298139909682391C6", + ":101C300023A9FEF7F1FF01460491000430B1FFE74C", + ":101C40001298FFF770F8049828B080BD059B129891", + ":101C50001199139A126824924A7C24A900F0ADFAD3", + ":101C600001460391000430B1FFE71298FFF75BF8DB", + ":101C7000039828B080BD29E00B9B12981199139A04", + ":101C8000126825924A7C25A900F097FA0146029134", + ":101C9000000430B1FFE71298FFF745F8029828B02A", + ":101CA00080BD149B159A129813990968269126A94C", + ":101CB000FEF7B2FF01460191000430B1FFE7129830", + ":101CC000FFF731F8019828B080BDFFE706E01298D1", + ":101CD000FFF729F80F9828B080BDFFE7002028B053", + ":101CE00080BD82B000900192002068B9FFE70198A2", + ":101CF00040B2002808D4FFE7009940F61A00C0F26D", + ":101D00000100006808603DE00198C0B2C0280DD312", + ":101D1000FFE70198C0B2DF2808D8FFE7009940F636", + ":101D20001E00C0F20100006808602BE00198C0B2FC", + ":101D3000E0280DD3FFE70198C0B2EF2808D8FFE7ED", + ":101D4000009940F62200C0F201000068086019E026", + ":101D50000198C0B2F0280DD3FFE70198C0B2F72870", + ":101D600008D8FFE7009940F62600C0F2010000689D", + ":101D7000086007E0009940F62A00C0F20100006800", + ":101D80000860FFE702B0704780B56F46B6B00F91AC", + ":101D9000109011931292002013901490FFE7119964", + ":101DA0001498884201D2FFE700E09BE11498011DDE", + ":101DB0004FF0000040F1000015918DF858009DF89B", + ":101DC000580008B9FFE707E040F2BC60C0F201002C", + ":101DD00010210022FEF7D7FD1199159888421BD8D3", + ":101DE000FFE7119812991791189014990B91179A6F", + ":101DF00018980C900A440D9202460E92411A4FF028", + ":101E0000000040F10000C0F1010019918DF8680058", + ":101E10009DF8680008B101E05FE007E040F2CC60A7", + ":101E2000C0F2010010210022FEF7ADFD0E980C99C2", + ":101E3000199A09920A460A92884201D8FFE703E0FC", + ":101E40000A990E98FEF75CFD0B980E99884201D80E", + ":101E5000FFE703E00E990B98FEF752FD0D980999E4", + ":101E60001C911B901B9800F04CF910F0803F01D0A2", + ":101E7000FFE732E0FFE71398011D4FF0000040F14B", + ":101E800000001D918DF878009DF8780008B9FFE7F3", + ":101E900007E040F2DC60C0F2010010210022FEF7F2", + ":101EA00072FD1D981390FFE71498011D4FF000007C", + ":101EB00040F100001F918DF880009DF8800008B966", + ":101EC000FFE707E040F2EC60C0F2010010210022C1", + ":101ED000FEF759FD1F98149068E7119914988842ED", + ":101EE00008D2FFE71199149807900A460892884291", + ":101EF00001D301E0F4E003E008990798FEF700FD44", + ":101F00000F991298079A825C21A8FFF7EAFEBDF8A4", + ":101F1000840070B1FFE70F98BDF88410ADF88C1005", + ":101F2000FEF701FF10992298239A4A60086036B0A4", + ":101F300080BD9DF8861008460690149809184FF049", + ":101F4000000040F1000024918DF894009DF8940069", + ":101F500008B9FFE707E040F2FC60C0F20100102181", + ":101F60000022FEF710FD1199249888420ED9FFE750", + ":101F70000F98FEF7D8FE109940F29022C0F20102AD", + ":101F8000106852684A60086036B080BDFFE7069866", + ":101F900000F00700012815D0FFE706991198129A62", + ":101FA000269227901498059001F0070109184FF028", + ":101FB000000040F1000028918DF8A4009DF8A400D5", + ":101FC00008B101E058E007E040F20C70C0F20100F7", + ":101FD00010210022FEF7D7FC059928980290269A36", + ":101FE000279B03930A440492411A4FF0000040F1EA", + ":101FF0000000C0F101002A918DF8AC009DF8AC0002", + ":1020000008B9FFE707E040F21C70C0F201001021A0", + ":102010000022FEF7B8FC029803992A9A00920A4619", + ":102020000192884201D8FFE703E001990298FEF788", + ":1020300067FC05980299884201D8FFE703E00299FE", + ":102040000598FEF75DFC009B049A0F992CA800F000", + ":102050005BF8BDF8B40070B1FFE70F98BDF8B4109D", + ":10206000ADF8BC10FEF75FFE10992E982F9A4A60CB", + ":10207000086036B080BDFFE70699149801F00701AB", + ":1020800009184FF0000040F1000030918DF8C400B5", + ":102090009DF8C40008B9FFE707E040F22C70C0F2D9", + ":1020A000010010210022FEF76EFC30981490139866", + ":1020B000411C4FF0000040F1000032918DF8CC003F", + ":1020C0009DF8CC0008B9FFE707E040F23C70C0F291", + ":1020D000010010210022FEF756FC32981390FFE712", + ":1020E000FFE75CE60F9813990022ADF8D4203491F5", + ":1020F000FEF719FE10993498359A4A60086036B098", + ":1021000080BD0068704700BF80B56F468EB00191FA", + ":102110000290184603900492581E01460591032828", + ":1021200004D80599DFE801F00A232F3B40F225503F", + ":10213000C0F2010018210022FEF725FC0398014699", + ":10214000009108B1FFE703E000990020FEF7D8FBFB", + ":102150000299049800780022ADF81C208DF81A200E", + ":10216000ADF818000698079A4A60086023E0039BC0", + ":10217000049A019908A800F0B0F802990898099A01", + ":102180004A60086017E0039B049A01990AA800F0CE", + ":1021900059F902990A980B9A4A6008600BE0039B70", + ":1021A000049A01990CA800F07EFA02990C980D9AF5", + ":1021B0004A600860FFE70EB080BD80B56F46D0B0C2", + ":1021C000089306920391049009A80790AA214FF45E", + ":1021D0008072059200F01AFC0599069A079800F0A3", + ":1021E000C9FB089B4993FFE7499890B1FFE74998DD", + ":1021F0004FF4807100F0FEFB0399024601920968DA", + ":102200004A914A994B9109A90291B0F5807F01D971", + ":1022100001E040E004E001984FF48071FEF770FBAC", + ":102220000198002801D3FFE703E001990020FEF7A1", + ":1022300067FB04980299019A4D924C914C9A4D9BE0", + ":102240004BA9FEF7E9FC01460091000430B1FFE71D", + ":102250000498FEF768FD009850B080BD0199499838", + ":10226000411A4FF0000040F10000C0F101004E9112", + ":102270008DF83C019DF83C0108B9FFE707E040F20A", + ":102280009C70C0F2010010210022FEF77CFB4E98EA", + ":102290004990FFE7A8E7002050B080BD4168806802", + ":1022A0004FF0553202EA5102891A4FF0333202EAF6", + ":1022B000910221F0CC31114401EB111121F0F031E8", + ":1022C0004FF001325143B0EB116018BF012070474D", + ":1022D00081B00091009801B0704780B56F468EB014", + ":1022E000099305910690184607900892981EB0FA37", + ":1022F00080F04009FEF7ABFD099B18460A900BB130", + ":10230000FFE703E00A990020FEF7FAFA0898007840", + ":1023100000F0E000C038B0FA80F04009FEF797FD09", + ":1023200007980146049108B1FFE703E004990020F3", + ":10233000FEF7E6FA07980899097801F01F010022D4", + ":102340008DF82E20ADF82C1001460391022801D300", + ":10235000FFE703E003990120FEF7D2FA08984078DE", + ":1023600000F0C00080280ED0FFE70598FEF7DBFCE8", + ":10237000069940F29822C0F20102106852684A6041", + ":1023800008600EB080BDFFE707989DF82E20BDF8CD", + ":102390002C1041EA02429101C2F384228DF82E20D2", + ":1023A000ADF82C109DF82E20BDF82C1041EA02410A", + ":1023B000019101460291022801D3FFE703E002994F", + ":1023C0000120FEF79DFA01980899497801F03F0134", + ":1023D0000843ADF82C006FF35F50000C8DF82E0011", + ":1023E0009DF82E10BDF82C0040EA01407F280ED841", + ":1023F000FFE70598FEF797FC069940F2A022C0F28D", + ":102400000102106852684A6008600EB080BDFFE7A4", + ":1024100005989DF82E10BDF82C2042EA01410023BA", + ":10242000ADF83430ADF830206FF35F51090C8DF802", + ":102430003210FEF778FC06990C980D9A4A600860F5", + ":102440000EB080BD80B56F4692B00D9309910A9091", + ":1024500018460B900C92D81EB0FA80F04009FEF797", + ":10246000F6FC0D9B18460E900BB1FFE703E00E99AA", + ":102470000020FEF745FA0C98007800F0F000E038F4", + ":10248000B0FA80F04009FEF7E2FC0B980146089193", + ":1024900008B1FFE703E008990020FEF731FA0B9836", + ":1024A0000C99097801F00F0100228DF83E20ADF85B", + ":1024B0003C1001460791022801D3FFE703E007998A", + ":1024C0000120FEF71DFA0C98407800F0C00080282B", + ":1024D0000ED0FFE70998FEF726FC0A9940F2A822E1", + ":1024E000C0F20102106852684A60086012B080BDF4", + ":1024F000FFE70B989DF83E20BDF83C1041EA0242F0", + ":102500009101C2F384228DF83E20ADF83C109DF875", + ":102510003E20BDF83C1041EA02410591014606917A", + ":10252000022801D3FFE703E006990120FEF7E8F94E", + ":102530000B9805990C9A527802F03F021143ADF8BE", + ":102540003C106FF35F51090C8DF83E100146049169", + ":10255000032801D3FFE703E004990220FEF7D0F936", + ":102560000C98807800F0C00080280ED0FFE7099812", + ":10257000FEF7D9FB0A9940F2B022C0F201021068BE", + ":1025800052684A60086012B080BDFFE70B989DF862", + ":102590003E20BDF83C1041EA02429101C2F3842280", + ":1025A0008DF83E20ADF83C109DF83E20BDF83C1063", + ":1025B00041EA0241029101460391032801D3FFE75A", + ":1025C00003E003990220FEF79BF902980C998978A1", + ":1025D00001F03F010843ADF83C006FF35F50000C81", + ":1025E0008DF83E009DF83E10BDF83C0040EA0141E8", + ":1025F0000020B0EBD12F0ED1FFE70998FEF793FB37", + ":102600000A9940F2B822C0F20102106852684A608A", + ":10261000086012B080BDFFE79DF83E10BDF83C0099", + ":1026200040EA0140B0F5584F0DD3FFE79DF83E104A", + ":10263000BDF83C0040EA01410020B1F5604F38BFD1", + ":102640000120019002E000200190FFE70198C007FF", + ":1026500070B1FFE70998FEF766FB0A9940F2C022C5", + ":10266000C0F20102106852684A60086012B080BD72", + ":10267000FFE709989DF83E10BDF83C2042EA014171", + ":102680000023ADF84430ADF840206FF35F51090CE2", + ":102690008DF84210FEF747FB0A991098119A4A608C", + ":1026A000086012B080BD80B56F4694B00F930B9157", + ":1026B0000C9018460D900E92181FB0FA80F0400949", + ":1026C000FEF7C5FB0F9B184610900BB1FFE703E028", + ":1026D00010990020FEF714F90E98007800F0F80029", + ":1026E000F038B0FA80F04009FEF7B1FB0D980146D2", + ":1026F0000A9108B1FFE703E00A990020FEF700F90C", + ":102700000D980E99097801F0070100228DF84620F6", + ":10271000ADF8441001460991022801D3FFE703E018", + ":1027200009990120FEF7ECF80E98407800F0C000FF", + ":1027300080280ED0FFE70B98FEF7F5FA0C9940F2CF", + ":10274000C822C0F20102106852684A60086014B0E2", + ":1027500080BDFFE70D989DF84620BDF8441041EA82", + ":1027600002429101C2F384228DF84620ADF8441054", + ":102770009DF84620BDF8441041EA02410791014608", + ":102780000891022801D3FFE703E008990120FEF732", + ":10279000B7F80D9807990E9A527802F03F0211434C", + ":1027A000ADF844106FF35F51090C8DF846100146E7", + ":1027B0000691032801D3FFE703E006990220FEF704", + ":1027C0009FF80E98807800F0C00080280ED0FFE7B8", + ":1027D0000B98FEF7A8FA0C9940F2D022C0F2010241", + ":1027E000106852684A60086014B080BDFFE70D9819", + ":1027F0009DF84620BDF8441041EA02429101C2F31F", + ":1028000084228DF84620ADF844109DF84620BDF88E", + ":10281000441041EA0241049101460591032801D385", + ":10282000FFE703E005990220FEF76AF80D98049986", + ":102830000E9A927802F03F021143ADF844106FF304", + ":102840005F51090C8DF8461001460391042801D30D", + ":10285000FFE703E003990320FEF752F80E98C078D3", + ":1028600000F0C00080280ED0FFE70B98FEF75BFA5F", + ":102870000C9940F2D822C0F20102106852684A60F6", + ":10288000086014B080BDFFE70D989DF84620BDF8A4", + ":10289000441041EA02429101C2F384228DF846209D", + ":1028A000ADF844109DF84620BDF8441041EA0241BD", + ":1028B000019101460291042801D3FFE703E0029948", + ":1028C0000320FEF71DF801980E99C97801F03F0129", + ":1028D0000843ADF844006FF35F50000C8DF84600DC", + ":1028E0009DF8460001040020B0EB114F0ED1FFE728", + ":1028F0000B98FEF718FA0C9940F2E022C0F20102A0", + ":10290000106852684A60086014B080BDFFE79DF807", + ":102910004610BDF8440040EA0140B0F5881F0ED3D0", + ":10292000FFE70B98FEF7FFF90C9940F2E822C0F29E", + ":102930000102106852684A60086014B080BDFFE769", + ":102940000B989DF84610BDF8442042EA014100234F", + ":10295000ADF84C30ADF848206FF35F51090C8DF89D", + ":102960004A10FEF7E0F90C991298139A4A60086031", + ":1029700014B080BD80B56F468AB003920691059071", + ":102980000698049000200790FFE7049907980290AA", + ":10299000884209D2FFE702980599009106990A46F4", + ":1029A0000192884201D301E022E003E001990298FC", + ":1029B000FDF7A6FF03980099029A8854FFE707984D", + ":1029C000411C4FF0000040F1000008918DF82400F8", + ":1029D0009DF8240008B9FFE707E040F2AC70C0F2B0", + ":1029E000010010210022FDF7CEFF08980790CCE7E8", + ":1029F0000AB080BD82B000910190884203D2FFE707", + ":102A0000019802B07047009802B0704780B56F46D9", + ":102A10001AB312F0030EA2F1010C034611D0BEF15D", + ":102A2000010F03F8011B01D162460AE0BEF1020F5B", + ":102A3000417003D1023A831C03E000BF033AC31C78", + ":102A40008170BCF1030F38BF80BD043B03F8041F45", + ":0C2A5000043A59709970D970F8D180BD1B", + ":00000001FF", + }; + const expected_hex = switch (builtin.zig_backend) { + .stage1 => expected_stage1_hex, + .stage2_llvm => expected_stage2_llvm_hex, + else => @compileError("honestly you should just delete this test"), + }; test_step.dependOn(&CheckFileStep.create(b, hex_step.getOutputSource(), expected_hex).step); test_step.dependOn(&CheckFileStep.create(b, explicit_format_hex_step.getOutputSource(), expected_hex).step); diff --git a/test/tests.zig b/test/tests.zig index c24a72c109..e70da1d070 100644 --- a/test/tests.zig +++ b/test/tests.zig @@ -1021,7 +1021,7 @@ pub const StandaloneContext = struct { defer zig_args.resize(zig_args_base_len) catch unreachable; const run_cmd = b.addSystemCommand(zig_args.items); - const log_step = b.addLog("PASS {s} ({s})\n", .{ annotated_case_name, @tagName(mode) }); + const log_step = b.addLog("PASS {s} ({s})", .{ annotated_case_name, @tagName(mode) }); log_step.step.dependOn(&run_cmd.step); self.step.dependOn(&log_step.step); @@ -1046,7 +1046,7 @@ pub const StandaloneContext = struct { exe.linkSystemLibrary("c"); } - const log_step = b.addLog("PASS {s}\n", .{annotated_case_name}); + const log_step = b.addLog("PASS {s}", .{annotated_case_name}); log_step.step.dependOn(&exe.step); self.step.dependOn(&log_step.step); diff --git a/test/translate_c.zig b/test/translate_c.zig index ec7c202742..a1a1736b2b 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -549,25 +549,27 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\}; }); - cases.add("function prototype translated as optional", - \\typedef void (*fnptr_ty)(void); - \\typedef __attribute__((cdecl)) void (*fnptr_attr_ty)(void); - \\struct foo { - \\ __attribute__((cdecl)) void (*foo)(void); - \\ void (*bar)(void); - \\ fnptr_ty baz; - \\ fnptr_attr_ty qux; - \\}; - , &[_][]const u8{ - \\pub const fnptr_ty = ?fn () callconv(.C) void; - \\pub const fnptr_attr_ty = ?fn () callconv(.C) void; - \\pub const struct_foo = extern struct { - \\ foo: ?fn () callconv(.C) void, - \\ bar: ?fn () callconv(.C) void, - \\ baz: fnptr_ty, - \\ qux: fnptr_attr_ty, - \\}; - }); + if (builtin.zig_backend != .stage1) { + cases.add("function prototype translated as optional", + \\typedef void (*fnptr_ty)(void); + \\typedef __attribute__((cdecl)) void (*fnptr_attr_ty)(void); + \\struct foo { + \\ __attribute__((cdecl)) void (*foo)(void); + \\ void (*bar)(void); + \\ fnptr_ty baz; + \\ fnptr_attr_ty qux; + \\}; + , &[_][]const u8{ + \\pub const fnptr_ty = ?*const fn () callconv(.C) void; + \\pub const fnptr_attr_ty = ?*const fn () callconv(.C) void; + \\pub const struct_foo = extern struct { + \\ foo: ?*const fn () callconv(.C) void, + \\ bar: ?*const fn () callconv(.C) void, + \\ baz: fnptr_ty, + \\ qux: fnptr_attr_ty, + \\}; + }); + } cases.add("function prototype with parenthesis", \\void (f0) (void *L); @@ -895,20 +897,22 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub const baz = c_int; }); - cases.add("casting pointers to ints and ints to pointers", - \\void foo(void); - \\void bar(void) { - \\ void *func_ptr = foo; - \\ void (*typed_func_ptr)(void) = (void (*)(void)) (unsigned long) func_ptr; - \\} - , &[_][]const u8{ - \\pub extern fn foo() void; - \\pub export fn bar() void { - \\ var func_ptr: ?*anyopaque = @ptrCast(?*anyopaque, foo); - \\ var typed_func_ptr: ?fn () callconv(.C) void = @intToPtr(?fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr))); - \\ _ = typed_func_ptr; - \\} - }); + if (builtin.zig_backend != .stage1) { + cases.add("casting pointers to ints and ints to pointers", + \\void foo(void); + \\void bar(void) { + \\ void *func_ptr = foo; + \\ void (*typed_func_ptr)(void) = (void (*)(void)) (unsigned long) func_ptr; + \\} + , &[_][]const u8{ + \\pub extern fn foo() void; + \\pub export fn bar() void { + \\ var func_ptr: ?*anyopaque = @ptrCast(?*anyopaque, foo); + \\ var typed_func_ptr: ?*const fn () callconv(.C) void = @intToPtr(?*const fn () callconv(.C) void, @intCast(c_ulong, @ptrToInt(func_ptr))); + \\ _ = typed_func_ptr; + \\} + }); + } cases.add("noreturn attribute", \\void foo(void) __attribute__((noreturn)); @@ -968,19 +972,21 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\} }); - cases.add("typedef of function in struct field", - \\typedef void lws_callback_function(void); - \\struct Foo { - \\ void (*func)(void); - \\ lws_callback_function *callback_http; - \\}; - , &[_][]const u8{ - \\pub const lws_callback_function = fn () callconv(.C) void; - \\pub const struct_Foo = extern struct { - \\ func: ?fn () callconv(.C) void, - \\ callback_http: ?lws_callback_function, - \\}; - }); + if (builtin.zig_backend != .stage1) { + cases.add("typedef of function in struct field", + \\typedef void lws_callback_function(void); + \\struct Foo { + \\ void (*func)(void); + \\ lws_callback_function *callback_http; + \\}; + , &[_][]const u8{ + \\pub const lws_callback_function = fn () callconv(.C) void; + \\pub const struct_Foo = extern struct { + \\ func: ?*const fn () callconv(.C) void, + \\ callback_http: ?*const lws_callback_function, + \\}; + }); + } cases.add("pointer to struct demoted to opaque due to bit fields", \\struct Foo { @@ -1051,17 +1057,19 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub const Foo = struct_Foo; }); - cases.add("self referential struct with function pointer", - \\struct Foo { - \\ void (*derp)(struct Foo *foo); - \\}; - , &[_][]const u8{ - \\pub const struct_Foo = extern struct { - \\ derp: ?fn ([*c]struct_Foo) callconv(.C) void, - \\}; - , - \\pub const Foo = struct_Foo; - }); + if (builtin.zig_backend != .stage1) { + cases.add("self referential struct with function pointer", + \\struct Foo { + \\ void (*derp)(struct Foo *foo); + \\}; + , &[_][]const u8{ + \\pub const struct_Foo = extern struct { + \\ derp: ?*const fn ([*c]struct_Foo) callconv(.C) void, + \\}; + , + \\pub const Foo = struct_Foo; + }); + } cases.add("struct prototype used in func", \\struct Foo; @@ -1327,11 +1335,13 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub extern fn func(array: [*c]c_int) void; }); - cases.add("__cdecl doesn't mess up function pointers", - \\void foo(void (__cdecl *fn_ptr)(void)); - , &[_][]const u8{ - \\pub extern fn foo(fn_ptr: ?fn () callconv(.C) void) void; - }); + if (builtin.zig_backend != .stage1) { + cases.add("__cdecl doesn't mess up function pointers", + \\void foo(void (__cdecl *fn_ptr)(void)); + , &[_][]const u8{ + \\pub extern fn foo(fn_ptr: ?*const fn () callconv(.C) void) void; + }); + } cases.add("void cast", \\void foo() { @@ -1674,13 +1684,15 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub extern var my_enum: enum_enum_ty; }); - cases.add("Parameterless function pointers", - \\typedef void (*fn0)(); - \\typedef void (*fn1)(char); - , &[_][]const u8{ - \\pub const fn0 = ?fn (...) callconv(.C) void; - \\pub const fn1 = ?fn (u8) callconv(.C) void; - }); + if (builtin.zig_backend != .stage1) { + cases.add("Parameterless function pointers", + \\typedef void (*fn0)(); + \\typedef void (*fn1)(char); + , &[_][]const u8{ + \\pub const fn0 = ?*const fn (...) callconv(.C) void; + \\pub const fn1 = ?*const fn (u8) callconv(.C) void; + }); + } cases.addWithTarget("Calling convention", .{ .cpu_arch = .i386, @@ -1880,60 +1892,64 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\pub const SDL_INIT_VIDEO = @as(c_ulonglong, 0x00000020); }); - cases.add("generate inline func for #define global extern fn", - \\extern void (*fn_ptr)(void); - \\#define foo fn_ptr - \\ - \\extern char (*fn_ptr2)(int, float); - \\#define bar fn_ptr2 - , &[_][]const u8{ - \\pub extern var fn_ptr: ?fn () callconv(.C) void; - , - \\pub inline fn foo() void { - \\ return fn_ptr.?(); - \\} - , - \\pub extern var fn_ptr2: ?fn (c_int, f32) callconv(.C) u8; - , - \\pub inline fn bar(arg_1: c_int, arg_2: f32) u8 { - \\ return fn_ptr2.?(arg_1, arg_2); - \\} - }); + if (builtin.zig_backend != .stage1) { + cases.add("generate inline func for #define global extern fn", + \\extern void (*fn_ptr)(void); + \\#define foo fn_ptr + \\ + \\extern char (*fn_ptr2)(int, float); + \\#define bar fn_ptr2 + , &[_][]const u8{ + \\pub extern var fn_ptr: ?*const fn () callconv(.C) void; + , + \\pub inline fn foo() void { + \\ return fn_ptr.?(); + \\} + , + \\pub extern var fn_ptr2: ?*const fn (c_int, f32) callconv(.C) u8; + , + \\pub inline fn bar(arg_1: c_int, arg_2: f32) u8 { + \\ return fn_ptr2.?(arg_1, arg_2); + \\} + }); + } - cases.add("macros with field targets", - \\typedef unsigned int GLbitfield; - \\typedef void (*PFNGLCLEARPROC) (GLbitfield mask); - \\typedef void(*OpenGLProc)(void); - \\union OpenGLProcs { - \\ OpenGLProc ptr[1]; - \\ struct { - \\ PFNGLCLEARPROC Clear; - \\ } gl; - \\}; - \\extern union OpenGLProcs glProcs; - \\#define glClearUnion glProcs.gl.Clear - \\#define glClearPFN PFNGLCLEARPROC - , &[_][]const u8{ - \\pub const GLbitfield = c_uint; - \\pub const PFNGLCLEARPROC = ?fn (GLbitfield) callconv(.C) void; - \\pub const OpenGLProc = ?fn () callconv(.C) void; - \\const struct_unnamed_1 = extern struct { - \\ Clear: PFNGLCLEARPROC, - \\}; - \\pub const union_OpenGLProcs = extern union { - \\ ptr: [1]OpenGLProc, - \\ gl: struct_unnamed_1, - \\}; - \\pub extern var glProcs: union_OpenGLProcs; - , - \\pub const glClearPFN = PFNGLCLEARPROC; - , - \\pub inline fn glClearUnion(arg_2: GLbitfield) void { - \\ return glProcs.gl.Clear.?(arg_2); - \\} - , - \\pub const OpenGLProcs = union_OpenGLProcs; - }); + if (builtin.zig_backend != .stage1) { + cases.add("macros with field targets", + \\typedef unsigned int GLbitfield; + \\typedef void (*PFNGLCLEARPROC) (GLbitfield mask); + \\typedef void(*OpenGLProc)(void); + \\union OpenGLProcs { + \\ OpenGLProc ptr[1]; + \\ struct { + \\ PFNGLCLEARPROC Clear; + \\ } gl; + \\}; + \\extern union OpenGLProcs glProcs; + \\#define glClearUnion glProcs.gl.Clear + \\#define glClearPFN PFNGLCLEARPROC + , &[_][]const u8{ + \\pub const GLbitfield = c_uint; + \\pub const PFNGLCLEARPROC = ?*const fn (GLbitfield) callconv(.C) void; + \\pub const OpenGLProc = ?*const fn () callconv(.C) void; + \\const struct_unnamed_1 = extern struct { + \\ Clear: PFNGLCLEARPROC, + \\}; + \\pub const union_OpenGLProcs = extern union { + \\ ptr: [1]OpenGLProc, + \\ gl: struct_unnamed_1, + \\}; + \\pub extern var glProcs: union_OpenGLProcs; + , + \\pub const glClearPFN = PFNGLCLEARPROC; + , + \\pub inline fn glClearUnion(arg_2: GLbitfield) void { + \\ return glProcs.gl.Clear.?(arg_2); + \\} + , + \\pub const OpenGLProcs = union_OpenGLProcs; + }); + } cases.add("macro pointer cast", \\#define NRF_GPIO_BASE 0 @@ -2840,35 +2856,37 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\} }); - cases.add("deref function pointer", - \\void foo(void) {} - \\int baz(void) { return 0; } - \\void bar(void) { - \\ void(*f)(void) = foo; - \\ int(*b)(void) = baz; - \\ f(); - \\ (*(f))(); - \\ foo(); - \\ b(); - \\ (*(b))(); - \\ baz(); - \\} - , &[_][]const u8{ - \\pub export fn foo() void {} - \\pub export fn baz() c_int { - \\ return 0; - \\} - \\pub export fn bar() void { - \\ var f: ?fn () callconv(.C) void = foo; - \\ var b: ?fn () callconv(.C) c_int = baz; - \\ f.?(); - \\ f.?(); - \\ foo(); - \\ _ = b.?(); - \\ _ = b.?(); - \\ _ = baz(); - \\} - }); + if (builtin.zig_backend != .stage1) { + cases.add("deref function pointer", + \\void foo(void) {} + \\int baz(void) { return 0; } + \\void bar(void) { + \\ void(*f)(void) = foo; + \\ int(*b)(void) = baz; + \\ f(); + \\ (*(f))(); + \\ foo(); + \\ b(); + \\ (*(b))(); + \\ baz(); + \\} + , &[_][]const u8{ + \\pub export fn foo() void {} + \\pub export fn baz() c_int { + \\ return 0; + \\} + \\pub export fn bar() void { + \\ var f: ?*const fn () callconv(.C) void = foo; + \\ var b: ?*const fn () callconv(.C) c_int = baz; + \\ f.?(); + \\ f.?(); + \\ foo(); + \\ _ = b.?(); + \\ _ = b.?(); + \\ _ = baz(); + \\} + }); + } cases.add("pre increment/decrement", \\void foo(void) { @@ -3143,73 +3161,77 @@ pub fn addCases(cases: *tests.TranslateCContext) void { \\} }); - cases.add("implicit casts", - \\#include - \\ - \\void fn_int(int x); - \\void fn_f32(float x); - \\void fn_f64(double x); - \\void fn_char(char x); - \\void fn_bool(bool x); - \\void fn_ptr(void *x); - \\ - \\void call() { - \\ fn_int(3.0f); - \\ fn_int(3.0); - \\ fn_int('ABCD'); - \\ fn_f32(3); - \\ fn_f64(3); - \\ fn_char('3'); - \\ fn_char('\x1'); - \\ fn_char(0); - \\ fn_f32(3.0f); - \\ fn_f64(3.0); - \\ fn_bool(123); - \\ fn_bool(0); - \\ fn_bool(&fn_int); - \\ fn_int(&fn_int); - \\ fn_ptr(42); - \\} - , &[_][]const u8{ - \\pub extern fn fn_int(x: c_int) void; - \\pub extern fn fn_f32(x: f32) void; - \\pub extern fn fn_f64(x: f64) void; - \\pub extern fn fn_char(x: u8) void; - \\pub extern fn fn_bool(x: bool) void; - \\pub extern fn fn_ptr(x: ?*anyopaque) void; - \\pub export fn call() void { - \\ fn_int(@floatToInt(c_int, 3.0)); - \\ fn_int(@floatToInt(c_int, 3.0)); - \\ fn_int(@as(c_int, 1094861636)); - \\ fn_f32(@intToFloat(f32, @as(c_int, 3))); - \\ fn_f64(@intToFloat(f64, @as(c_int, 3))); - \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '3')))); - \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '\x01')))); - \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, 0)))); - \\ fn_f32(3.0); - \\ fn_f64(3.0); - \\ fn_bool(@as(c_int, 123) != 0); - \\ fn_bool(@as(c_int, 0) != 0); - \\ fn_bool(@ptrToInt(fn_int) != 0); - \\ fn_int(@intCast(c_int, @ptrToInt(fn_int))); - \\ fn_ptr(@intToPtr(?*anyopaque, @as(c_int, 42))); - \\} - }); + if (builtin.zig_backend != .stage1) { + cases.add("implicit casts", + \\#include + \\ + \\void fn_int(int x); + \\void fn_f32(float x); + \\void fn_f64(double x); + \\void fn_char(char x); + \\void fn_bool(bool x); + \\void fn_ptr(void *x); + \\ + \\void call() { + \\ fn_int(3.0f); + \\ fn_int(3.0); + \\ fn_int('ABCD'); + \\ fn_f32(3); + \\ fn_f64(3); + \\ fn_char('3'); + \\ fn_char('\x1'); + \\ fn_char(0); + \\ fn_f32(3.0f); + \\ fn_f64(3.0); + \\ fn_bool(123); + \\ fn_bool(0); + \\ fn_bool(&fn_int); + \\ fn_int(&fn_int); + \\ fn_ptr(42); + \\} + , &[_][]const u8{ + \\pub extern fn fn_int(x: c_int) void; + \\pub extern fn fn_f32(x: f32) void; + \\pub extern fn fn_f64(x: f64) void; + \\pub extern fn fn_char(x: u8) void; + \\pub extern fn fn_bool(x: bool) void; + \\pub extern fn fn_ptr(x: ?*anyopaque) void; + \\pub export fn call() void { + \\ fn_int(@floatToInt(c_int, 3.0)); + \\ fn_int(@floatToInt(c_int, 3.0)); + \\ fn_int(@as(c_int, 1094861636)); + \\ fn_f32(@intToFloat(f32, @as(c_int, 3))); + \\ fn_f64(@intToFloat(f64, @as(c_int, 3))); + \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '3')))); + \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, '\x01')))); + \\ fn_char(@bitCast(u8, @truncate(i8, @as(c_int, 0)))); + \\ fn_f32(3.0); + \\ fn_f64(3.0); + \\ fn_bool(@as(c_int, 123) != 0); + \\ fn_bool(@as(c_int, 0) != 0); + \\ fn_bool(@ptrToInt(&fn_int) != 0); + \\ fn_int(@intCast(c_int, @ptrToInt(&fn_int))); + \\ fn_ptr(@intToPtr(?*anyopaque, @as(c_int, 42))); + \\} + }); + } - cases.add("function call", - \\static void bar(void) { } - \\void foo(int *(baz)(void)) { - \\ bar(); - \\ baz(); - \\} - , &[_][]const u8{ - \\pub fn bar() callconv(.C) void {} - \\pub export fn foo(arg_baz: ?fn () callconv(.C) [*c]c_int) void { - \\ var baz = arg_baz; - \\ bar(); - \\ _ = baz.?(); - \\} - }); + if (builtin.zig_backend != .stage1) { + cases.add("function call", + \\static void bar(void) { } + \\void foo(int *(baz)(void)) { + \\ bar(); + \\ baz(); + \\} + , &[_][]const u8{ + \\pub fn bar() callconv(.C) void {} + \\pub export fn foo(arg_baz: ?*const fn () callconv(.C) [*c]c_int) void { + \\ var baz = arg_baz; + \\ bar(); + \\ _ = baz.?(); + \\} + }); + } cases.add("macro defines string literal with octal", \\#define FOO "aoeu\023 derp"