aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/struct_llvm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-12-27 22:04:21 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-12-27 22:06:23 -0700
commit85d4c8620f602726b159efe1fe2ea0e07e3c5b59 (patch)
tree73399f38f3a9782a9ecf067eec3cc612d79a4591 /test/behavior/struct_llvm.zig
parent042b770d6272391a9c25f3444991b439ae07a1b5 (diff)
downloadzig-85d4c8620f602726b159efe1fe2ea0e07e3c5b59.tar.gz
zig-85d4c8620f602726b159efe1fe2ea0e07e3c5b59.zip
Sema: implement array coercion
Diffstat (limited to 'test/behavior/struct_llvm.zig')
-rw-r--r--test/behavior/struct_llvm.zig39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/behavior/struct_llvm.zig b/test/behavior/struct_llvm.zig
index 9b19abf030..36310d797b 100644
--- a/test/behavior/struct_llvm.zig
+++ b/test/behavior/struct_llvm.zig
@@ -246,3 +246,42 @@ test "packed struct with non-ABI-aligned field" {
try expect(s.x == 1);
try expect(s.y == 42);
}
+
+const BitField1 = packed struct {
+ a: u3,
+ b: u3,
+ c: u2,
+};
+
+const bit_field_1 = BitField1{
+ .a = 1,
+ .b = 2,
+ .c = 3,
+};
+
+test "bit field access" {
+ var data = bit_field_1;
+ try expect(getA(&data) == 1);
+ try expect(getB(&data) == 2);
+ try expect(getC(&data) == 3);
+ comptime try expect(@sizeOf(BitField1) == 1);
+
+ data.b += 1;
+ try expect(data.b == 3);
+
+ data.a += 1;
+ try expect(data.a == 2);
+ try expect(data.b == 3);
+}
+
+fn getA(data: *const BitField1) u3 {
+ return data.a;
+}
+
+fn getB(data: *const BitField1) u3 {
+ return data.b;
+}
+
+fn getC(data: *const BitField1) u2 {
+ return data.c;
+}