| author | |
| committer | |
| log | c40fb96ca358e2ef28aecc2b7ebc5ffab43ccac8 |
| tree | 3aa9f1c66c4558472fbdd3c212a3b116385298e8 |
| parent | 741a66e03cd8644d01b38849f2bd8f70cae6beca |
tried to be too clever, wrote bad code7 files changed, 35 insertions(+), 46 deletions(-)
lib/compiler/test_runner.zig+6-6| ... | ... | @@ -10,10 +10,10 @@ pub const std_options: std.Options = .{ |
| 10 | 10 | }; |
| 11 | 11 | |
| 12 | 12 | var log_err_count: usize = 0; |
| 13 | var fba_buffer: [8192]u8 = undefined; | |
| 14 | 13 | var fba = std.heap.FixedBufferAllocator.init(&fba_buffer); |
| 15 | var stdin_buffer: [std.heap.page_size_min]u8 align(std.heap.page_size_min) = undefined; | |
| 16 | var stdout_buffer: [std.heap.page_size_min]u8 align(std.heap.page_size_min) = undefined; | |
| 14 | var fba_buffer: [8192]u8 = undefined; | |
| 15 | var stdin_buffer: [4096]u8 = undefined; | |
| 16 | var stdout_buffer: [4096]u8 = undefined; | |
| 17 | 17 | |
| 18 | 18 | const crippled = switch (builtin.zig_backend) { |
| 19 | 19 | .stage2_powerpc, |
| ... | ... | @@ -68,8 +68,8 @@ pub fn main() void { |
| 68 | 68 | |
| 69 | 69 | fn mainServer() !void { |
| 70 | 70 | @disableInstrumentation(); |
| 71 | var stdin_reader = std.fs.File.stdin().reader(&stdin_buffer); | |
| 72 | var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer); | |
| 71 | var stdin_reader = std.fs.File.stdin().readerStreaming(&stdin_buffer); | |
| 72 | var stdout_writer = std.fs.File.stdout().writerStreaming(&stdout_buffer); | |
| 73 | 73 | var server = try std.zig.Server.init(.{ |
| 74 | 74 | .in = &stdin_reader.interface, |
| 75 | 75 | .out = &stdout_writer.interface, |
| ... | ... | @@ -104,7 +104,7 @@ fn mainServer() !void { |
| 104 | 104 | defer testing.allocator.free(expected_panic_msgs); |
| 105 | 105 | |
| 106 | 106 | for (test_fns, names, expected_panic_msgs) |test_fn, *name, *expected_panic_msg| { |
| 107 | name.* = @as(u32, @intCast(string_bytes.items.len)); | |
| 107 | name.* = @intCast(string_bytes.items.len); | |
| 108 | 108 | try string_bytes.ensureUnusedCapacity(testing.allocator, test_fn.name.len + 1); |
| 109 | 109 | string_bytes.appendSliceAssumeCapacity(test_fn.name); |
| 110 | 110 | string_bytes.appendAssumeCapacity(0); |
lib/std/Build/Step/Run.zig+1-1| ... | ... | @@ -1742,7 +1742,7 @@ fn sendMessage(file: std.fs.File, tag: std.zig.Client.Message.Tag) !void { |
| 1742 | 1742 | .tag = tag, |
| 1743 | 1743 | .bytes_len = 0, |
| 1744 | 1744 | }; |
| 1745 | try file.writeAll(std.mem.asBytes(&header)); | |
| 1745 | try file.writeAll(@ptrCast(&header)); | |
| 1746 | 1746 | } |
| 1747 | 1747 | |
| 1748 | 1748 | fn sendRunTestMessage(file: std.fs.File, tag: std.zig.Client.Message.Tag, index: u32) !void { |
lib/std/Io/Reader.zig+17-17| ... | ... | @@ -1108,9 +1108,9 @@ pub fn takeVarInt(r: *Reader, comptime Int: type, endian: std.builtin.Endian, n: |
| 1108 | 1108 | /// Asserts the buffer was initialized with a capacity at least `@sizeOf(T)`. |
| 1109 | 1109 | /// |
| 1110 | 1110 | /// See also: |
| 1111 | /// * `peekStructReference` | |
| 1111 | /// * `peekStructPointer` | |
| 1112 | 1112 | /// * `takeStruct` |
| 1113 | pub fn takeStructReference(r: *Reader, comptime T: type) Error!*align(1) T { | |
| 1113 | pub fn takeStructPointer(r: *Reader, comptime T: type) Error!*align(1) T { | |
| 1114 | 1114 | // Only extern and packed structs have defined in-memory layout. |
| 1115 | 1115 | comptime assert(@typeInfo(T).@"struct".layout != .auto); |
| 1116 | 1116 | return @ptrCast(try r.takeArray(@sizeOf(T))); |
| ... | ... | @@ -1122,9 +1122,9 @@ pub fn takeStructReference(r: *Reader, comptime T: type) Error!*align(1) T { |
| 1122 | 1122 | /// Asserts the buffer was initialized with a capacity at least `@sizeOf(T)`. |
| 1123 | 1123 | /// |
| 1124 | 1124 | /// See also: |
| 1125 | /// * `takeStructReference` | |
| 1125 | /// * `takeStructPointer` | |
| 1126 | 1126 | /// * `peekStruct` |
| 1127 | pub fn peekStructReference(r: *Reader, comptime T: type) Error!*align(1) T { | |
| 1127 | pub fn peekStructPointer(r: *Reader, comptime T: type) Error!*align(1) T { | |
| 1128 | 1128 | // Only extern and packed structs have defined in-memory layout. |
| 1129 | 1129 | comptime assert(@typeInfo(T).@"struct".layout != .auto); |
| 1130 | 1130 | return @ptrCast(try r.peekArray(@sizeOf(T))); |
| ... | ... | @@ -1136,14 +1136,14 @@ pub fn peekStructReference(r: *Reader, comptime T: type) Error!*align(1) T { |
| 1136 | 1136 | /// when `endian` is comptime-known and matches the host endianness. |
| 1137 | 1137 | /// |
| 1138 | 1138 | /// See also: |
| 1139 | /// * `takeStructReference` | |
| 1139 | /// * `takeStructPointer` | |
| 1140 | 1140 | /// * `peekStruct` |
| 1141 | 1141 | pub inline fn takeStruct(r: *Reader, comptime T: type, endian: std.builtin.Endian) Error!T { |
| 1142 | 1142 | switch (@typeInfo(T)) { |
| 1143 | 1143 | .@"struct" => |info| switch (info.layout) { |
| 1144 | 1144 | .auto => @compileError("ill-defined memory layout"), |
| 1145 | 1145 | .@"extern" => { |
| 1146 | var res = (try r.takeStructReference(T)).*; | |
| 1146 | var res = (try r.takeStructPointer(T)).*; | |
| 1147 | 1147 | if (native_endian != endian) std.mem.byteSwapAllFields(T, &res); |
| 1148 | 1148 | return res; |
| 1149 | 1149 | }, |
| ... | ... | @@ -1162,13 +1162,13 @@ pub inline fn takeStruct(r: *Reader, comptime T: type, endian: std.builtin.Endia |
| 1162 | 1162 | /// |
| 1163 | 1163 | /// See also: |
| 1164 | 1164 | /// * `takeStruct` |
| 1165 | /// * `peekStructReference` | |
| 1165 | /// * `peekStructPointer` | |
| 1166 | 1166 | pub inline fn peekStruct(r: *Reader, comptime T: type, endian: std.builtin.Endian) Error!T { |
| 1167 | 1167 | switch (@typeInfo(T)) { |
| 1168 | 1168 | .@"struct" => |info| switch (info.layout) { |
| 1169 | 1169 | .auto => @compileError("ill-defined memory layout"), |
| 1170 | 1170 | .@"extern" => { |
| 1171 | var res = (try r.peekStructReference(T)).*; | |
| 1171 | var res = (try r.peekStructPointer(T)).*; | |
| 1172 | 1172 | if (native_endian != endian) std.mem.byteSwapAllFields(T, &res); |
| 1173 | 1173 | return res; |
| 1174 | 1174 | }, |
| ... | ... | @@ -1557,27 +1557,27 @@ test takeVarInt { |
| 1557 | 1557 | try testing.expectError(error.EndOfStream, r.takeVarInt(u16, .little, 1)); |
| 1558 | 1558 | } |
| 1559 | 1559 | |
| 1560 | test takeStructReference { | |
| 1560 | test takeStructPointer { | |
| 1561 | 1561 | var r: Reader = .fixed(&.{ 0x12, 0x00, 0x34, 0x56 }); |
| 1562 | 1562 | const S = extern struct { a: u8, b: u16 }; |
| 1563 | 1563 | switch (native_endian) { |
| 1564 | .little => try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.takeStructReference(S)).*), | |
| 1565 | .big => try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.takeStructReference(S)).*), | |
| 1564 | .little => try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.takeStructPointer(S)).*), | |
| 1565 | .big => try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.takeStructPointer(S)).*), | |
| 1566 | 1566 | } |
| 1567 | try testing.expectError(error.EndOfStream, r.takeStructReference(S)); | |
| 1567 | try testing.expectError(error.EndOfStream, r.takeStructPointer(S)); | |
| 1568 | 1568 | } |
| 1569 | 1569 | |
| 1570 | test peekStructReference { | |
| 1570 | test peekStructPointer { | |
| 1571 | 1571 | var r: Reader = .fixed(&.{ 0x12, 0x00, 0x34, 0x56 }); |
| 1572 | 1572 | const S = extern struct { a: u8, b: u16 }; |
| 1573 | 1573 | switch (native_endian) { |
| 1574 | 1574 | .little => { |
| 1575 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.peekStructReference(S)).*); | |
| 1576 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.peekStructReference(S)).*); | |
| 1575 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.peekStructPointer(S)).*); | |
| 1576 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x5634 }), (try r.peekStructPointer(S)).*); | |
| 1577 | 1577 | }, |
| 1578 | 1578 | .big => { |
| 1579 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.peekStructReference(S)).*); | |
| 1580 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.peekStructReference(S)).*); | |
| 1579 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.peekStructPointer(S)).*); | |
| 1580 | try testing.expectEqual(@as(S, .{ .a = 0x12, .b = 0x3456 }), (try r.peekStructPointer(S)).*); | |
| 1581 | 1581 | }, |
| 1582 | 1582 | } |
| 1583 | 1583 | } |
lib/std/Io/Writer.zig+7-16| ... | ... | @@ -851,9 +851,6 @@ pub inline fn writeStruct(w: *Writer, value: anytype, endian: std.builtin.Endian |
| 851 | 851 | } |
| 852 | 852 | } |
| 853 | 853 | |
| 854 | /// If, `endian` is not native, | |
| 855 | /// * Asserts that the buffer storage capacity is at least enough to store `@sizeOf(Elem)` | |
| 856 | /// * Asserts that the buffer is aligned enough for `@alignOf(Elem)`. | |
| 857 | 854 | pub inline fn writeSliceEndian( |
| 858 | 855 | w: *Writer, |
| 859 | 856 | Elem: type, |
| ... | ... | @@ -867,18 +864,11 @@ pub inline fn writeSliceEndian( |
| 867 | 864 | } |
| 868 | 865 | } |
| 869 | 866 | |
| 870 | /// Asserts that the buffer storage capacity is at least enough to store `@sizeOf(Elem)` | |
| 871 | /// | |
| 872 | /// Asserts that the buffer is aligned enough for `@alignOf(Elem)`. | |
| 873 | 867 | pub fn writeSliceSwap(w: *Writer, Elem: type, slice: []const Elem) Error!void { |
| 874 | var i: usize = 0; | |
| 875 | while (i < slice.len) { | |
| 876 | const dest_bytes = try w.writableSliceGreedy(@sizeOf(Elem)); | |
| 877 | const dest: []Elem = @alignCast(@ptrCast(dest_bytes[0 .. dest_bytes.len - dest_bytes.len % @sizeOf(Elem)])); | |
| 878 | const copy_len = @min(dest.len, slice.len - i); | |
| 879 | @memcpy(dest[0..copy_len], slice[i..][0..copy_len]); | |
| 880 | i += copy_len; | |
| 881 | std.mem.byteSwapAllElements(Elem, dest); | |
| 868 | for (slice) |elem| { | |
| 869 | var tmp = elem; | |
| 870 | std.mem.byteSwapAllFields(Elem, &tmp); | |
| 871 | try w.writeAll(@ptrCast(&tmp)); | |
| 882 | 872 | } |
| 883 | 873 | } |
| 884 | 874 | |
| ... | ... | @@ -2650,9 +2640,10 @@ test writeStruct { |
| 2650 | 2640 | } |
| 2651 | 2641 | |
| 2652 | 2642 | test writeSliceEndian { |
| 2653 | var buffer: [4]u8 align(2) = undefined; | |
| 2643 | var buffer: [5]u8 align(2) = undefined; | |
| 2654 | 2644 | var w: Writer = .fixed(&buffer); |
| 2645 | try w.writeByte('x'); | |
| 2655 | 2646 | const array: [2]u16 = .{ 0x1234, 0x5678 }; |
| 2656 | 2647 | try writeSliceEndian(&w, u16, &array, .big); |
| 2657 | try testing.expectEqualSlices(u8, &.{ 0x12, 0x34, 0x56, 0x78 }, &buffer); | |
| 2648 | try testing.expectEqualSlices(u8, &.{ 'x', 0x12, 0x34, 0x56, 0x78 }, &buffer); | |
| 2658 | 2649 | } |
lib/std/zig/Server.zig+2-4| ... | ... | @@ -118,8 +118,6 @@ pub fn init(options: Options) !Server { |
| 118 | 118 | .in = options.in, |
| 119 | 119 | .out = options.out, |
| 120 | 120 | }; |
| 121 | assert(s.out.buffer.len >= 4); | |
| 122 | std.debug.assertAligned(s.out.buffer.ptr, .@"4"); | |
| 123 | 121 | try s.serveStringMessage(.zig_version, options.zig_version); |
| 124 | 122 | return s; |
| 125 | 123 | } |
| ... | ... | @@ -203,8 +201,8 @@ pub const TestMetadata = struct { |
| 203 | 201 | |
| 204 | 202 | pub fn serveTestMetadata(s: *Server, test_metadata: TestMetadata) !void { |
| 205 | 203 | const header: OutMessage.TestMetadata = .{ |
| 206 | .tests_len = @as(u32, @intCast(test_metadata.names.len)), | |
| 207 | .string_bytes_len = @as(u32, @intCast(test_metadata.string_bytes.len)), | |
| 204 | .tests_len = @intCast(test_metadata.names.len), | |
| 205 | .string_bytes_len = @intCast(test_metadata.string_bytes.len), | |
| 208 | 206 | }; |
| 209 | 207 | const trailing = 2; |
| 210 | 208 | const bytes_len = @sizeOf(OutMessage.TestMetadata) + |
src/Zcu.zig+1-1| ... | ... | @@ -2821,7 +2821,7 @@ pub fn loadZirCache(gpa: Allocator, cache_file: std.fs.File) !Zir { |
| 2821 | 2821 | var buffer: [2000]u8 = undefined; |
| 2822 | 2822 | var file_reader = cache_file.reader(&buffer); |
| 2823 | 2823 | return result: { |
| 2824 | const header = file_reader.interface.takeStructReference(Zir.Header) catch |err| break :result err; | |
| 2824 | const header = file_reader.interface.takeStructPointer(Zir.Header) catch |err| break :result err; | |
| 2825 | 2825 | break :result loadZirCacheBody(gpa, header.*, &file_reader.interface); |
| 2826 | 2826 | } catch |err| switch (err) { |
| 2827 | 2827 | error.ReadFailed => return file_reader.err.?, |
src/Zcu/PerThread.zig+1-1| ... | ... | @@ -349,7 +349,7 @@ fn loadZirZoirCache( |
| 349 | 349 | const cache_br = &cache_fr.interface; |
| 350 | 350 | |
| 351 | 351 | // First we read the header to determine the lengths of arrays. |
| 352 | const header = (cache_br.takeStructReference(Header) catch |err| switch (err) { | |
| 352 | const header = (cache_br.takeStructPointer(Header) catch |err| switch (err) { | |
| 353 | 353 | error.ReadFailed => return cache_fr.err.?, |
| 354 | 354 | // This can happen if Zig bails out of this function between creating |
| 355 | 355 | // the cached file and writing it. |