1#exe {
2--name pointers
3-Mroot=pointers.zig
4#}
5
6#write pointers.zig {
7var array: [7]u32 = .{
8 3010,
9 3014,
10 3018,
11 3022,
12 3026,
13 3030,
14 3034,
15};
16const Pointers = struct {
17 single: *u32 = @ptrFromInt(0x1010),
18 single_const: *const u32 = @ptrFromInt(0x1014),
19 single_volatile: *volatile u32 = @ptrFromInt(0x1018),
20 single_const_volatile: *const volatile u32 = @ptrFromInt(0x101c),
21 single_allowzero: *allowzero u32 = @ptrFromInt(0x1020),
22 single_allowzero_const: *allowzero const u32 = @ptrFromInt(0x1024),
23 single_allowzero_volatile: *allowzero volatile u32 = @ptrFromInt(0x1028),
24 single_allowzero_const_volatile: *allowzero const volatile u32 = @ptrFromInt(0x102c),
25
26 many: [*]u32 = @ptrFromInt(0x2010),
27 many_const: [*]const u32 = @ptrFromInt(0x2014),
28 many_volatile: [*]volatile u32 = @ptrFromInt(0x2018),
29 many_const_volatile: [*]const volatile u32 = @ptrFromInt(0x201c),
30 many_allowzero: [*]allowzero u32 = @ptrFromInt(0x2020),
31 many_allowzero_const: [*]allowzero const u32 = @ptrFromInt(0x2024),
32 many_allowzero_volatile: [*]allowzero volatile u32 = @ptrFromInt(0x2028),
33 many_allowzero_const_volatile: [*]allowzero const volatile u32 = @ptrFromInt(0x202c),
34 slice: []u32 = array[0..1],
35 slice_const: []const u32 = array[0..2],
36 slice_volatile: []volatile u32 = array[0..3],
37 slice_const_volatile: []const volatile u32 = array[0..4],
38 slice_allowzero: []allowzero u32 = array[4..4],
39 slice_allowzero_const: []allowzero const u32 = array[4..5],
40 slice_allowzero_volatile: []allowzero volatile u32 = array[4..6],
41 slice_allowzero_const_volatile: []allowzero const volatile u32 = array[4..7],
42
43 c: [*c]u32 = @ptrFromInt(0x4010),
44 c_const: [*c]const u32 = @ptrFromInt(0x4014),
45 c_volatile: [*c]volatile u32 = @ptrFromInt(0x4018),
46 c_const_volatile: [*c]const volatile u32 = @ptrFromInt(0x401c),
47};
48const Access = struct {
49 single: *u32 = &array[0],
50 many: [*]u32 = array[1..3],
51 slice: []u32 = array[3..5],
52 c: [*c]u32 = array[5..7],
53};
54fn testPointers(pointers: Pointers, access: Access) void {
55 _ = pointers;
56 _ = access;
57}
58pub fn main() void {
59 testPointers(.{}, .{});
60}
61#}
62#update
63#check lldb {
64(lldb) breakpoint set --file pointers.zig --source-pattern-regexp '_ = access;'
65Breakpoint 1: where = pointers`pointers.testPointers + #... at pointers.zig:51:1, address = 0x#...
66(lldb) process launch
67Process #... launched: '#.../pointers' (#...)
68Process #... stopped
69* thread #1, name = 'pointers', stop reason = breakpoint 1.1
70 frame #0: pointers`pointers.testPointers(pointers=Pointers @ 0x#..., access=Access @ 0x#...) at pointers.zig:51:1
71(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]
72(root.pointers.Pointers) pointers = {
73 (*u32) .single = 0x0000000000001010
74 (*const u32) .single_const = 0x0000000000001014
75 (*volatile u32) .single_volatile = 0x0000000000001018
76 (*const volatile u32) .single_const_volatile = 0x000000000000101c
77 (*allowzero u32) .single_allowzero = 0x0000000000001020
78 (*allowzero const u32) .single_allowzero_const = 0x0000000000001024
79 (*allowzero volatile u32) .single_allowzero_volatile = 0x0000000000001028
80 (*allowzero const volatile u32) .single_allowzero_const_volatile = 0x000000000000102c
81 ([*]u32) .many = 0x0000000000002010
82 ([*]const u32) .many_const = 0x0000000000002014
83 ([*]volatile u32) .many_volatile = 0x0000000000002018
84 ([*]const volatile u32) .many_const_volatile = 0x000000000000201c
85 ([*]allowzero u32) .many_allowzero = 0x0000000000002020
86 ([*]allowzero const u32) .many_allowzero_const = 0x0000000000002024
87 ([*]allowzero volatile u32) .many_allowzero_volatile = 0x0000000000002028
88 ([*]allowzero const volatile u32) .many_allowzero_const_volatile = 0x000000000000202c
89 ([]u32) .slice = len=1 {
90 (u32) [0] = 3010
91 }
92 ([]const u32) .slice_const = len=2 {
93 (u32) [0] = 3010
94 (u32) [1] = 3014
95 }
96 ([]volatile u32) .slice_volatile = len=3 {
97 (u32) [0] = 3010
98 (u32) [1] = 3014
99 (u32) [2] = 3018
100 }
101 ([]const volatile u32) .slice_const_volatile = len=4 {
102 (u32) [0] = 3010
103 (u32) [1] = 3014
104 (u32) [2] = 3018
105 (u32) [3] = 3022
106 }
107 ([]allowzero u32) .slice_allowzero = len=0 {}
108 ([]allowzero const u32) .slice_allowzero_const = len=1 {
109 (u32) [0] = 3026
110 }
111 ([]allowzero volatile u32) .slice_allowzero_volatile = len=2 {
112 (u32) [0] = 3026
113 (u32) [1] = 3030
114 }
115 ([]allowzero const volatile u32) .slice_allowzero_const_volatile = len=3 {
116 (u32) [0] = 3026
117 (u32) [1] = 3030
118 (u32) [2] = 3034
119 }
120 ([*c]u32) .c = 0x0000000000004010
121 ([*c]const u32) .c_const = 0x0000000000004014
122 ([*c]volatile u32) .c_volatile = 0x0000000000004018
123 ([*c]const volatile u32) .c_const_volatile = 0x000000000000401c
124}
125(u32) access.single.* = 3010
126(u32) access.many[0] = 3014
127(u32) access.many[1] = 3018
128(u32) access.slice[0] = 3022
129(u32) access.slice[1] = 3026
130(u32) access.c.* = 3030
131(u32) access.c[0] = 3030
132(u32) access.c[1] = 3034
133(lldb) breakpoint delete --force 1
1341 breakpoints deleted; 0 breakpoint locations disabled.
135#}