aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-04 17:47:53 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-04 23:13:49 +0200
commit35afa3fd8bdc140baf9d135711833e836de04d86 (patch)
tree37ad1c960d929b520da6ef336c5ea0a237292f38
parent799a558e393d1c8286e8faec2bf8930138d8b1f4 (diff)
downloadzig-35afa3fd8bdc140baf9d135711833e836de04d86.tar.gz
zig-35afa3fd8bdc140baf9d135711833e836de04d86.zip
Sema: correct condition in validateArrayInit
Closes #13425
-rw-r--r--src/Sema.zig2
-rw-r--r--test/behavior/array.zig22
2 files changed, 23 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index a127031808..08aecb6097 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -4380,7 +4380,7 @@ fn zirValidateArrayInit(
var block_index = block.instructions.items.len - 1;
while (block.instructions.items[block_index] != elem_ptr_air_inst) {
if (block_index == 0) {
- array_is_comptime = true;
+ array_is_comptime = false;
continue :outer;
}
block_index -= 1;
diff --git a/test/behavior/array.zig b/test/behavior/array.zig
index 6311c4cd30..f1dcb3b95d 100644
--- a/test/behavior/array.zig
+++ b/test/behavior/array.zig
@@ -574,3 +574,25 @@ test "tuple to array handles sentinel" {
};
try expect(S.b[0] == 1);
}
+
+test "array init of container level array variable" {
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ var pair: [2]usize = .{ 1, 2 };
+ noinline fn foo(x: usize, y: usize) void {
+ pair = [2]usize{ x, y };
+ }
+ noinline fn bar(x: usize, y: usize) void {
+ var tmp: [2]usize = .{ x, y };
+ pair = tmp;
+ }
+ };
+ try expectEqual([2]usize{ 1, 2 }, S.pair);
+ S.foo(3, 4);
+ try expectEqual([2]usize{ 3, 4 }, S.pair);
+ S.bar(5, 6);
+ try expectEqual([2]usize{ 5, 6 }, S.pair);
+}