aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-09-10 00:53:26 +0300
committerVeikka Tuominen <git@vexu.eu>2022-09-15 00:50:18 +0300
commit5e4483fff8077ec8d87ba9125f946955a34b6fc0 (patch)
treed3c03ca0b8197aaf3f9163deb5ac13910bff19b5 /test
parent5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08 (diff)
downloadzig-5e4483fff8077ec8d87ba9125f946955a34b6fc0.tar.gz
zig-5e4483fff8077ec8d87ba9125f946955a34b6fc0.zip
Sema: handle comptime fields in field call bind
Closes #12801
Diffstat (limited to 'test')
-rw-r--r--test/behavior.zig2
-rw-r--r--test/behavior/bugs/12801-1.zig13
-rw-r--r--test/behavior/bugs/12801-2.zig24
3 files changed, 39 insertions, 0 deletions
diff --git a/test/behavior.zig b/test/behavior.zig
index e8a13d7034..dd7c843099 100644
--- a/test/behavior.zig
+++ b/test/behavior.zig
@@ -89,6 +89,8 @@ test {
_ = @import("behavior/bugs/12776.zig");
_ = @import("behavior/bugs/12786.zig");
_ = @import("behavior/bugs/12794.zig");
+ _ = @import("behavior/bugs/12801-1.zig");
+ _ = @import("behavior/bugs/12801-2.zig");
_ = @import("behavior/byteswap.zig");
_ = @import("behavior/byval_arg_var.zig");
_ = @import("behavior/call.zig");
diff --git a/test/behavior/bugs/12801-1.zig b/test/behavior/bugs/12801-1.zig
new file mode 100644
index 0000000000..ff94382d1f
--- /dev/null
+++ b/test/behavior/bugs/12801-1.zig
@@ -0,0 +1,13 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+comptime capacity: fn () u64 = capacity_,
+fn capacity_() u64 {
+ return 64;
+}
+
+test {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+
+ try std.testing.expect((@This(){}).capacity() == 64);
+}
diff --git a/test/behavior/bugs/12801-2.zig b/test/behavior/bugs/12801-2.zig
new file mode 100644
index 0000000000..f98fcfbcff
--- /dev/null
+++ b/test/behavior/bugs/12801-2.zig
@@ -0,0 +1,24 @@
+const std = @import("std");
+const builtin = @import("builtin");
+
+const Auto = struct {
+ auto: [max_len]u8 = undefined,
+ offset: u64 = 0,
+
+ comptime capacity: *const fn () u64 = capacity,
+
+ const max_len: u64 = 32;
+
+ fn capacity() u64 {
+ return max_len;
+ }
+};
+test {
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+
+ const a: Auto = .{ .offset = 16, .capacity = Auto.capacity };
+ try std.testing.expect(a.capacity() == 32);
+ try std.testing.expect((a.capacity)() == 32);
+}