#exe {
--name pointers
-Mroot=pointers.zig
#}

#write pointers.zig {
var array: [7]u32 = .{
    3010,
    3014,
    3018,
    3022,
    3026,
    3030,
    3034,
};
const Pointers = struct {
    single: *u32 = @ptrFromInt(0x1010),
    single_const: *const u32 = @ptrFromInt(0x1014),
    single_volatile: *volatile u32 = @ptrFromInt(0x1018),
    single_const_volatile: *const volatile u32 = @ptrFromInt(0x101c),
    single_allowzero: *allowzero u32 = @ptrFromInt(0x1020),
    single_allowzero_const: *allowzero const u32 = @ptrFromInt(0x1024),
    single_allowzero_volatile: *allowzero volatile u32 = @ptrFromInt(0x1028),
    single_allowzero_const_volatile: *allowzero const volatile u32 = @ptrFromInt(0x102c),

    many: [*]u32 = @ptrFromInt(0x2010),
    many_const: [*]const u32 = @ptrFromInt(0x2014),
    many_volatile: [*]volatile u32 = @ptrFromInt(0x2018),
    many_const_volatile: [*]const volatile u32 = @ptrFromInt(0x201c),
    many_allowzero: [*]allowzero u32 = @ptrFromInt(0x2020),
    many_allowzero_const: [*]allowzero const u32 = @ptrFromInt(0x2024),
    many_allowzero_volatile: [*]allowzero volatile u32 = @ptrFromInt(0x2028),
    many_allowzero_const_volatile: [*]allowzero const volatile u32 = @ptrFromInt(0x202c),
    slice: []u32 = array[0..1],
    slice_const: []const u32 = array[0..2],
    slice_volatile: []volatile u32 = array[0..3],
    slice_const_volatile: []const volatile u32 = array[0..4],
    slice_allowzero: []allowzero u32 = array[4..4],
    slice_allowzero_const: []allowzero const u32 = array[4..5],
    slice_allowzero_volatile: []allowzero volatile u32 = array[4..6],
    slice_allowzero_const_volatile: []allowzero const volatile u32 = array[4..7],

    c: [*c]u32 = @ptrFromInt(0x4010),
    c_const: [*c]const u32 = @ptrFromInt(0x4014),
    c_volatile: [*c]volatile u32 = @ptrFromInt(0x4018),
    c_const_volatile: [*c]const volatile u32 = @ptrFromInt(0x401c),
};
const Access = struct {
    single: *u32 = &array[0],
    many: [*]u32 = array[1..3],
    slice: []u32 = array[3..5],
    c: [*c]u32 = array[5..7],
};
fn testPointers(pointers: Pointers, access: Access) void {
    _ = pointers;
    _ = access;
}
pub fn main() void {
    testPointers(.{}, .{});
}
#}
#update
#check lldb {
(lldb) breakpoint set --file pointers.zig --source-pattern-regexp '_ = access;'
Breakpoint 1: where = pointers`pointers.testPointers + #... at pointers.zig:51:1, address = 0x#...
(lldb) process launch
Process #... launched: '#.../pointers' (#...)
Process #... stopped
* thread #1, name = 'pointers', stop reason = breakpoint 1.1
       frame #0: pointers`pointers.testPointers(pointers=Pointers @ 0x#..., access=Access @ 0x#...) at pointers.zig:51:1
(lldb) frame variable --show-all-children --show-types -- pointers access.single.* access.many[0] access.many[1] access.slice[0] access.slice[1] access.c.* access.c[0] access.c[1]
(root.pointers.Pointers) pointers = {
  (*u32) .single = 0x0000000000001010
  (*const u32) .single_const = 0x0000000000001014
  (*volatile u32) .single_volatile = 0x0000000000001018
  (*const volatile u32) .single_const_volatile = 0x000000000000101c
  (*allowzero u32) .single_allowzero = 0x0000000000001020
  (*allowzero const u32) .single_allowzero_const = 0x0000000000001024
  (*allowzero volatile u32) .single_allowzero_volatile = 0x0000000000001028
  (*allowzero const volatile u32) .single_allowzero_const_volatile = 0x000000000000102c
  ([*]u32) .many = 0x0000000000002010
  ([*]const u32) .many_const = 0x0000000000002014
  ([*]volatile u32) .many_volatile = 0x0000000000002018
  ([*]const volatile u32) .many_const_volatile = 0x000000000000201c
  ([*]allowzero u32) .many_allowzero = 0x0000000000002020
  ([*]allowzero const u32) .many_allowzero_const = 0x0000000000002024
  ([*]allowzero volatile u32) .many_allowzero_volatile = 0x0000000000002028
  ([*]allowzero const volatile u32) .many_allowzero_const_volatile = 0x000000000000202c
  ([]u32) .slice = len=1 {
    (u32) [0] = 3010
  }
  ([]const u32) .slice_const = len=2 {
    (u32) [0] = 3010
    (u32) [1] = 3014
  }
  ([]volatile u32) .slice_volatile = len=3 {
    (u32) [0] = 3010
    (u32) [1] = 3014
    (u32) [2] = 3018
  }
  ([]const volatile u32) .slice_const_volatile = len=4 {
    (u32) [0] = 3010
    (u32) [1] = 3014
    (u32) [2] = 3018
    (u32) [3] = 3022
  }
  ([]allowzero u32) .slice_allowzero = len=0 {}
  ([]allowzero const u32) .slice_allowzero_const = len=1 {
    (u32) [0] = 3026
  }
  ([]allowzero volatile u32) .slice_allowzero_volatile = len=2 {
    (u32) [0] = 3026
    (u32) [1] = 3030
  }
  ([]allowzero const volatile u32) .slice_allowzero_const_volatile = len=3 {
    (u32) [0] = 3026
    (u32) [1] = 3030
    (u32) [2] = 3034
  }
  ([*c]u32) .c = 0x0000000000004010
  ([*c]const u32) .c_const = 0x0000000000004014
  ([*c]volatile u32) .c_volatile = 0x0000000000004018
  ([*c]const volatile u32) .c_const_volatile = 0x000000000000401c
}
(u32) access.single.* = 3010
(u32) access.many[0] = 3014
(u32) access.many[1] = 3018
(u32) access.slice[0] = 3022
(u32) access.slice[1] = 3026
(u32) access.c.* = 3030
(u32) access.c[0] = 3030
(u32) access.c[1] = 3034
(lldb) breakpoint delete --force 1
1 breakpoints deleted; 0 breakpoint locations disabled.
#}
