diff --git a/src/codegen/x86_64/CodeGen.zig b/src/codegen/x86_64/CodeGen.zig index 9ba98c3e833cc11ff996a61a7d624a62ebdda3fa..50b5bdc15035ac7341b00ec4b6fe60902291965c 100644 --- a/src/codegen/x86_64/CodeGen.zig +++ b/src/codegen/x86_64/CodeGen.zig @@ -170801,6 +170801,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void { else => |e| return e, }; try ops[0].toSlicePtr(cg); + try ops[1].toSlicePtr(cg); cg.select(&.{}, &.{}, &ops, switch (air_tag) { else => unreachable, inline .memcpy, .memmove => |symbol| comptime &.{.{ diff --git a/test/behavior/array.zig b/test/behavior/array.zig index 2bd85555297beed2d7b33de499e272ddc639a175..2f3aa841bc58fc9494e88f0c918744c4de0eb0e5 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -45,6 +45,18 @@ fn getArrayLen(a: []const u32) usize { return a.len; } +test "runtime array concat with comptime slice" { + if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; + if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest; + + var a: [1]u8 = .{1}; + const b = (comptime @as([]const u8, &.{0})) ++ &a; + const c = &a ++ (comptime @as([]const u8, &.{0})); + try std.testing.expectEqualSlices(u8, &.{ 0, 1 }, b); + try std.testing.expectEqualSlices(u8, &.{ 1, 0 }, c); +} + test "array concat with undefined" { if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_spirv) return error.SkipZigTest;