-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Description
Zig Version
0.12.0-dev.494+a8d2ed806
Steps to Reproduce and Observed Behavior
Clone https://github.com/dweiller/zimalloc and run
git checkout d577c4a3
zig buildI will try to make a smaller repro case and bisect the Zig commit introducing it when I get time (and llvm17 finishes compiling). A minimal repro case is below in #17255 (comment).
Here is the full error message:
Build Summary: 1/4 steps succeeded; 1 failed (disable with --summary none)
test transitive failure
└─ run test transitive failure
└─ zig test Debug native 3 errors
src/Segment.zig:9:5: error: dependency loop detected
pub const Ptr = *align(segment_alignment) @This();
~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/zimalloc.zig:50:32: error: missing struct field: thread_heaps
var gpa = Allocator(config){};
~~~~~~~~~~~~~~~~~^~
src/zimalloc.zig:50:32: note: missing struct field: thread_heaps_lock
src/allocator.zig:8:12: note: struct 'allocator.Allocator(.{.thread_data_prealloc = 128, .thread_safe = true, .safety_checks = false})' declared here
return struct {
^~~~~~
src/allocator.zig:10:79: error: missing struct field: prealloc_segment
thread_heaps: std.SegmentedList(Heap, config.thread_data_prealloc) = .{},
~^~
src/allocator.zig:10:79: note: missing struct field: dynamic_segments
src/allocator.zig:10:79: note: missing struct field: len
/path/to/zig/zig-linux-x86_64-0.12.0-dev.494+a8d2ed806/lib/std/segmented_list.zig:79:12: note: struct 'segmented_list.SegmentedList(Heap,128)' declared here
return struct {
^~~~~~
These errors are not encountered when compiling with 0.12.0-dev.464+a63a1c5cb (the commit that merged llvm17, though I can't find the tarball for this to test locally now, but my CI worked using it), so it seems the issue was introduced between that commit and when #17172 got merged.
The dependency loop issue shouldn't be the same issue as other dependency issue in the issue tracker (e.g. #16932, #16419, #14353) which are all about function pointers and affect earlier compiler versions than 0.12.0-dev.464+a63a1c5cb.
Expected Behavior
The code should compile as far as I can tell - the dependency loop is (according to the compile error) caused by a decl that is creates a type alias like pub const Ptr = *align(alignment) @This(); and the missing struct fields all have default values.