mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-10-29 03:06:10 +08:00
91 lines
2.6 KiB
Plaintext
91 lines
2.6 KiB
Plaintext
#todo {
|
|
passes, but prints errors
|
|
#}
|
|
#skip x86_64-linux-none-whole-selfhosted-new-nopic
|
|
#skip x86_64-linux-none-whole-selfhosted-new-pic
|
|
#skip x86_64-linux-none-incremental-selfhosted-new-nopic
|
|
#skip x86_64-linux-none-incremental-selfhosted-new-pic
|
|
|
|
#exe {
|
|
--name unions
|
|
-Mroot=unions.zig
|
|
#}
|
|
|
|
#write unions.zig {
|
|
const Unions = struct {
|
|
const Enum = enum { first, second, third };
|
|
const Untagged = extern union {
|
|
u32: u32,
|
|
i32: i32,
|
|
f32: f32,
|
|
};
|
|
const SafetyTagged = union {
|
|
void: void,
|
|
en: Enum,
|
|
eu: error{Error}!Enum,
|
|
};
|
|
const Tagged = union(enum) {
|
|
void: void,
|
|
en: Enum,
|
|
eu: error{Error}!Enum,
|
|
};
|
|
|
|
untagged: Untagged = .{ .f32 = -1.5 },
|
|
safety_tagged: SafetyTagged = .{ .en = .second },
|
|
tagged: Tagged = .{ .eu = error.Error },
|
|
};
|
|
fn testUnions(unions: Unions) void {
|
|
_ = unions;
|
|
}
|
|
pub fn main() void {
|
|
testUnions(.{});
|
|
}
|
|
#}
|
|
#update
|
|
#check lldb {
|
|
(lldb) breakpoint set --file unions.zig --source-pattern-regexp '_ = unions;'
|
|
Breakpoint 1: where = unions`unions.testUnions + #... at unions.zig:25:1, address = 0x#...
|
|
(lldb) process launch
|
|
Process #... launched: '#.../unions' (#...)
|
|
Process #... stopped
|
|
* thread #1, name = 'unions', stop reason = breakpoint 1.1
|
|
frame #0: unions`unions.testUnions(unions=Unions @ 0x#...) at unions.zig:25:1
|
|
(lldb) expression --show-types -- Unions
|
|
(type) $0 = struct {
|
|
(type) Untagged = union {}
|
|
(type) SafetyTagged = union(enum) {
|
|
(@typeInfo(unions.Unions.SafetyTagged).@"union".tag_type.?) void = .void
|
|
(@typeInfo(unions.Unions.SafetyTagged).@"union".tag_type.?) en = .en
|
|
(@typeInfo(unions.Unions.SafetyTagged).@"union".tag_type.?) eu = .eu
|
|
}
|
|
(type) Enum = enum {
|
|
(root.unions.Unions.Enum) first = .first
|
|
(root.unions.Unions.Enum) second = .second
|
|
(root.unions.Unions.Enum) third = .third
|
|
}
|
|
(type) Tagged = union(enum) {
|
|
(@typeInfo(unions.Unions.Tagged).@"union".tag_type.?) void = .void
|
|
(@typeInfo(unions.Unions.Tagged).@"union".tag_type.?) en = .en
|
|
(@typeInfo(unions.Unions.Tagged).@"union".tag_type.?) eu = .eu
|
|
}
|
|
}
|
|
(lldb) frame variable --show-all-children --show-types -- unions
|
|
(root.unions.Unions) unions = {
|
|
(root.unions.Unions.Untagged) .untagged = {
|
|
(u32) .u32 = 3217031168
|
|
(i32) .i32 = -1077936128
|
|
(f32) .f32 = -1.5
|
|
}
|
|
(root.unions.Unions.SafetyTagged) .safety_tagged = {
|
|
(root.unions.Unions.Enum) .en = .second
|
|
}
|
|
(root.unions.Unions.Tagged) .tagged = {
|
|
(error{Error}!root.unions.Unions.Enum) .eu = {
|
|
(error{Error}) .error = error.Error
|
|
}
|
|
}
|
|
}
|
|
(lldb) breakpoint delete --force 1
|
|
1 breakpoints deleted; 0 breakpoint locations disabled.
|
|
#}
|