diff --git a/lib/std/hash_map.zig b/lib/std/hash_map.zig index a812760172..e9ec5c8149 100644 --- a/lib/std/hash_map.zig +++ b/lib/std/hash_map.zig @@ -1767,7 +1767,7 @@ pub fn HashMapUnmanaged( } comptime { - if (!builtin.strip_debug_info) { + if (builtin.zig_backend == .stage2_llvm and !builtin.strip_debug_info) { _ = &dbHelper; } } diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index 0d9272d492..eedc540db2 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -573,7 +573,7 @@ pub fn MultiArrayList(comptime T: type) type { } comptime { - if (!builtin.strip_debug_info) { + if (builtin.zig_backend == .stage2_llvm and !builtin.strip_debug_info) { _ = &dbHelper; _ = &Slice.dbHelper; } diff --git a/src/InternPool.zig b/src/InternPool.zig index e09576c5aa..fbfd29369f 100644 --- a/src/InternPool.zig +++ b/src/InternPool.zig @@ -4723,7 +4723,7 @@ pub const Index = enum(u32) { } comptime { - if (!builtin.strip_debug_info) { + if (builtin.zig_backend == .stage2_llvm and !builtin.strip_debug_info) { _ = &dbHelper; } } diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index ab71e0ec64..8fda9a38a3 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -1762,7 +1762,7 @@ pub const WipNav = struct { fn blockValue(wip_nav: *WipNav, src_loc: Zcu.LazySrcLoc, val: Value) UpdateError!void { const ty = val.typeOf(wip_nav.pt.zcu); const diw = wip_nav.debug_info.writer(wip_nav.dwarf.gpa); - const bytes = ty.abiSize(wip_nav.pt.zcu); + const bytes = if (ty.hasRuntimeBits(wip_nav.pt.zcu)) ty.abiSize(wip_nav.pt.zcu) else 0; try uleb128(diw, bytes); if (bytes == 0) return; var dim = wip_nav.debug_info.toManaged(wip_nav.dwarf.gpa); diff --git a/test/src/Debugger.zig b/test/src/Debugger.zig index 977bd4a776..7df3dedc0c 100644 --- a/test/src/Debugger.zig +++ b/test/src/Debugger.zig @@ -1325,6 +1325,149 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { \\1 breakpoints deleted; 0 breakpoint locations disabled. }, ); + db.addLldbTest( + "multi_array_list", + target, + &.{ + .{ + .path = "main.zig", + .source = + \\const std = @import("std"); + \\fn testMultiArrayList() void {} + \\pub fn main() !void { + \\ const Elem0 = struct { u32, u8, u16 }; + \\ var list0: std.MultiArrayList(Elem0) = .{}; + \\ defer list0.deinit(std.heap.page_allocator); + \\ try list0.setCapacity(std.heap.page_allocator, 8); + \\ list0.appendAssumeCapacity(.{ 1, 2, 3 }); + \\ list0.appendAssumeCapacity(.{ 4, 5, 6 }); + \\ list0.appendAssumeCapacity(.{ 7, 8, 9 }); + \\ + \\ const Elem1 = struct { a: u32, b: u8, c: u16 }; + \\ var list1: std.MultiArrayList(Elem1) = .{}; + \\ defer list1.deinit(std.heap.page_allocator); + \\ try list1.setCapacity(std.heap.page_allocator, 12); + \\ list1.appendAssumeCapacity(.{ .a = 1, .b = 2, .c = 3 }); + \\ list1.appendAssumeCapacity(.{ .a = 4, .b = 5, .c = 6 }); + \\ list1.appendAssumeCapacity(.{ .a = 7, .b = 8, .c = 9 }); + \\ + \\ testMultiArrayList(); + \\} + \\ + , + }, + }, + \\breakpoint set --file main.zig --source-pattern-regexp 'testMultiArrayList\(\);' + \\process launch + \\frame variable --show-types -- list0 list0.len list0.capacity list0[0] list0[1] list0[2] list0.0 list0.1 list0.2 + \\frame variable --show-types -- list1 list1.len list1.capacity list1[0] list1[1] list1[2] list1.a list1.b list1.c + \\breakpoint delete --force 1 + , + &.{ + \\(lldb) frame variable --show-types -- list0 list0.len list0.capacity list0[0] list0[1] list0[2] list0.0 list0.1 list0.2 + \\(std.multi_array_list.MultiArrayList(main.main.Elem0)) list0 = len=3 capacity=8 { + \\ (root.main.main.Elem0) [0] = { + \\ (u32) 0 = 1 + \\ (u8) 1 = 2 + \\ (u16) 2 = 3 + \\ } + \\ (root.main.main.Elem0) [1] = { + \\ (u32) 0 = 4 + \\ (u8) 1 = 5 + \\ (u16) 2 = 6 + \\ } + \\ (root.main.main.Elem0) [2] = { + \\ (u32) 0 = 7 + \\ (u8) 1 = 8 + \\ (u16) 2 = 9 + \\ } + \\} + \\(usize) list0.len = 3 + \\(usize) list0.capacity = 8 + \\(root.main.main.Elem0) list0[0] = { + \\ (u32) 0 = 1 + \\ (u8) 1 = 2 + \\ (u16) 2 = 3 + \\} + \\(root.main.main.Elem0) list0[1] = { + \\ (u32) 0 = 4 + \\ (u8) 1 = 5 + \\ (u16) 2 = 6 + \\} + \\(root.main.main.Elem0) list0[2] = { + \\ (u32) 0 = 7 + \\ (u8) 1 = 8 + \\ (u16) 2 = 9 + \\} + \\([3]u32) list0.0 = { + \\ (u32) [0] = 1 + \\ (u32) [1] = 4 + \\ (u32) [2] = 7 + \\} + \\([3]u8) list0.1 = { + \\ (u8) [0] = 2 + \\ (u8) [1] = 5 + \\ (u8) [2] = 8 + \\} + \\([3]u16) list0.2 = { + \\ (u16) [0] = 3 + \\ (u16) [1] = 6 + \\ (u16) [2] = 9 + \\} + \\(lldb) frame variable --show-types -- list1 list1.len list1.capacity list1[0] list1[1] list1[2] list1.a list1.b list1.c + \\(std.multi_array_list.MultiArrayList(main.main.Elem1)) list1 = len=3 capacity=12 { + \\ (root.main.main.Elem1) [0] = { + \\ (u32) a = 1 + \\ (u8) b = 2 + \\ (u16) c = 3 + \\ } + \\ (root.main.main.Elem1) [1] = { + \\ (u32) a = 4 + \\ (u8) b = 5 + \\ (u16) c = 6 + \\ } + \\ (root.main.main.Elem1) [2] = { + \\ (u32) a = 7 + \\ (u8) b = 8 + \\ (u16) c = 9 + \\ } + \\} + \\(usize) list1.len = 3 + \\(usize) list1.capacity = 12 + \\(root.main.main.Elem1) list1[0] = { + \\ (u32) a = 1 + \\ (u8) b = 2 + \\ (u16) c = 3 + \\} + \\(root.main.main.Elem1) list1[1] = { + \\ (u32) a = 4 + \\ (u8) b = 5 + \\ (u16) c = 6 + \\} + \\(root.main.main.Elem1) list1[2] = { + \\ (u32) a = 7 + \\ (u8) b = 8 + \\ (u16) c = 9 + \\} + \\([3]u32) list1.a = { + \\ (u32) [0] = 1 + \\ (u32) [1] = 4 + \\ (u32) [2] = 7 + \\} + \\([3]u8) list1.b = { + \\ (u8) [0] = 2 + \\ (u8) [1] = 5 + \\ (u8) [2] = 8 + \\} + \\([3]u16) list1.c = { + \\ (u16) [0] = 3 + \\ (u16) [1] = 6 + \\ (u16) [2] = 9 + \\} + \\(lldb) breakpoint delete --force 1 + \\1 breakpoints deleted; 0 breakpoint locations disabled. + }, + ); db.addLldbTest( "segmented_list", target,