Skip to content

incorrect alignment panic using zig native backend for linux x86_64 #6

@pfgithub

Description

@pfgithub

I believe it is a real crash and it is revealed by the native backend initializing MultiArrayList.bytes to 0xaaaaaaaaaaaaaaaa instead of 0.

The fix is:

# src/pool.zig
        fn updateSlices(self: *Self) void {
            var slice = self._storage.slice();

            const free_queue_storage = slice.items(.@"Pool._free_queue");
            self._free_queue.resize(free_queue_storage);

            self._curr_cycle = slice.items(.@"Pool._curr_cycle");
            inline for (column_fields, 0..) |column_field, i| {
                const F = column_field.type;
                const p = slice.ptrs[private_fields.len + i];
-               const f = @as([*]F, @ptrCast(@alignCast(p)));
-               @field(self.columns, column_field.name) = f[0..slice.len];
+               if (slice.len == 0) {
+                   @field(self.columns, column_field.name) = &.{};
+               } else {
+                   const f = @as([*]F, @ptrCast(@alignCast(p)));
+                   @field(self.columns, column_field.name) = f[0..slice.len];
+               }
            }
        }

Stacktrace:

thread 4516 panic: incorrect alignment
.zig-cache/p/zpool-0.11.0-dev-bG692QtEAQCyqBnzSBJbJlY0-a_3v1YcjFTGmg0VBjOc/src/pool.zig:543:37: 0x106f8f0 in updateSlices (main.zig)
                const f = @as([*]F, @ptrCast(@alignCast(p)));
                                    ^
.zig-cache/p/zpool-0.11.0-dev-bG692QtEAQCyqBnzSBJbJlY0-a_3v1YcjFTGmg0VBjOc/src/pool.zig:135:25: 0x104efa7 in init (main.zig)
            updateSlices(&self);
                        ^
src/main.zig:330:29: 0x104885b in init (main.zig)
            .players = .init(gpa),
                            ^

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions