diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index a600f055df..86f8da6cd4 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -776,6 +776,7 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr if (builtin.zig_backend == .stage2_riscv64) { std.debug.print("panic: {s}\n", .{msg}); + @breakpoint(); std.posix.exit(127); } diff --git a/src/arch/riscv64/CodeGen.zig b/src/arch/riscv64/CodeGen.zig index 56815f63b9..6ca4f37695 100644 --- a/src/arch/riscv64/CodeGen.zig +++ b/src/arch/riscv64/CodeGen.zig @@ -3433,8 +3433,13 @@ fn airPtrSliceLenPtr(func: *Func, inst: Air.Inst.Index) !void { fn airPtrSlicePtrPtr(func: *Func, inst: Air.Inst.Index) !void { const ty_op = func.air.instructions.items(.data)[@intFromEnum(inst)].ty_op; - const result: MCValue = if (func.liveness.isUnused(inst)) .unreach else return func.fail("TODO implement ptr_slice_ptr_ptr for {}", .{func.target.cpu.arch}); - return func.finishAir(inst, result, .{ ty_op.operand, .none, .none }); + + const opt_mcv = try func.resolveInst(ty_op.operand); + const dst_mcv = if (func.reuseOperand(inst, ty_op.operand, 0, opt_mcv)) + opt_mcv + else + try func.copyToNewRegister(inst, opt_mcv); + return func.finishAir(inst, dst_mcv, .{ ty_op.operand, .none, .none }); } fn airSliceElemVal(func: *Func, inst: Air.Inst.Index) !void {