aboutsummaryrefslogtreecommitdiff
path: root/test/behavior/enum_llvm.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-12-27 17:56:33 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-12-27 17:56:33 -0700
commit9dd4fb4130a71d2aaaaa361d8ee0b7135cb84162 (patch)
tree569ebd4a536b1df12976d6c6c19e3725ef6b7e98 /test/behavior/enum_llvm.zig
parent886df772f06377df95f867e8b18ee47bbd0fcd8b (diff)
downloadzig-9dd4fb4130a71d2aaaaa361d8ee0b7135cb84162.tar.gz
zig-9dd4fb4130a71d2aaaaa361d8ee0b7135cb84162.zip
stage2: fix 0-bit function parameters
Before this commit, Zig would incorrectly emit `arg` AIR instructions for parameters whose types were 0-bit.
Diffstat (limited to 'test/behavior/enum_llvm.zig')
-rw-r--r--test/behavior/enum_llvm.zig32
1 files changed, 32 insertions, 0 deletions
diff --git a/test/behavior/enum_llvm.zig b/test/behavior/enum_llvm.zig
index c0d536c029..700e396087 100644
--- a/test/behavior/enum_llvm.zig
+++ b/test/behavior/enum_llvm.zig
@@ -90,3 +90,35 @@ fn getB(data: *const BitFieldOfEnums) B {
fn getC(data: *const BitFieldOfEnums) C {
return data.c;
}
+
+const EnumWithOneMember = enum { Eof };
+
+fn doALoopThing(id: EnumWithOneMember) void {
+ while (true) {
+ if (id == EnumWithOneMember.Eof) {
+ break;
+ }
+ @compileError("above if condition should be comptime");
+ }
+}
+
+test "comparison operator on enum with one member is comptime known" {
+ doALoopThing(EnumWithOneMember.Eof);
+}
+
+const State = enum { Start };
+test "switch on enum with one member is comptime known" {
+ var state = State.Start;
+ switch (state) {
+ State.Start => return,
+ }
+ @compileError("analysis should not reach here");
+}
+
+test "enum literal in array literal" {
+ const Items = enum { one, two };
+ const array = [_]Items{ .one, .two };
+
+ try expect(array[0] == .one);
+ try expect(array[1] == .two);
+}