mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
70 lines
1.3 KiB
Zig
70 lines
1.3 KiB
Zig
const builtin = @import("builtin");
|
|
const std = @import("std");
|
|
|
|
const A = packed struct {
|
|
a: bool,
|
|
b: bool,
|
|
c: bool,
|
|
d: bool,
|
|
|
|
e: bool,
|
|
f: bool,
|
|
g: bool,
|
|
h: bool,
|
|
};
|
|
|
|
const X = union {
|
|
x: A,
|
|
y: u64,
|
|
};
|
|
|
|
pub fn a(
|
|
x0: i32,
|
|
x1: i32,
|
|
x2: i32,
|
|
x3: i32,
|
|
x4: i32,
|
|
flag_a: bool,
|
|
flag_b: bool,
|
|
) !void {
|
|
_ = x0;
|
|
_ = x1;
|
|
_ = x2;
|
|
_ = x3;
|
|
_ = x4;
|
|
_ = flag_a;
|
|
// With this bug present, `flag_b` would actually contain the value 17.
|
|
// Note: this bug only presents itself on debug mode.
|
|
const flag_b_byte: u8 = @intFromBool(flag_b);
|
|
try std.testing.expect(flag_b_byte == 1);
|
|
}
|
|
|
|
pub fn b(x: *X) !void {
|
|
try a(0, 1, 2, 3, 4, x.x.a, x.x.b);
|
|
}
|
|
|
|
test {
|
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
|
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
|
|
|
var flags = A{
|
|
.a = false,
|
|
.b = true,
|
|
.c = false,
|
|
.d = false,
|
|
|
|
.e = false,
|
|
.f = true,
|
|
.g = false,
|
|
.h = false,
|
|
};
|
|
_ = &flags;
|
|
var x = X{
|
|
.x = flags,
|
|
};
|
|
try b(&x);
|
|
comptime if (@sizeOf(A) != 1) unreachable;
|
|
}
|