| ... | @@ -22130,6 +22130,14 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void | ... | @@ -22130,6 +22130,14 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void |
| 22130 | const ok = try block.addBinOp(.cmp_eq, dest_len, src_len); | 22130 | const ok = try block.addBinOp(.cmp_eq, dest_len, src_len); |
| 22131 | try sema.addSafetyCheck(block, ok, .memcpy_len_mismatch); | 22131 | try sema.addSafetyCheck(block, ok, .memcpy_len_mismatch); |
| 22132 | } | 22132 | } |
| | 22133 | } else if (dest_len != .none) { |
| | 22134 | if (try sema.resolveDefinedValue(block, dest_src, dest_len)) |dest_len_val| { |
| | 22135 | len_val = dest_len_val; |
| | 22136 | } |
| | 22137 | } else if (src_len != .none) { |
| | 22138 | if (try sema.resolveDefinedValue(block, src_src, src_len)) |src_len_val| { |
| | 22139 | len_val = src_len_val; |
| | 22140 | } |
| 22133 | } | 22141 | } |
| 22134 | | 22142 | |
| 22135 | const runtime_src = if (try sema.resolveDefinedValue(block, dest_src, dest_ptr)) |dest_ptr_val| rs: { | 22143 | const runtime_src = if (try sema.resolveDefinedValue(block, dest_src, dest_ptr)) |dest_ptr_val| rs: { |
| ... | @@ -22213,6 +22221,10 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void | ... | @@ -22213,6 +22221,10 @@ fn zirMemcpy(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!void |
| 22213 | if (new_src_ptr_ty.isSlice()) { | 22221 | if (new_src_ptr_ty.isSlice()) { |
| 22214 | new_src_ptr = try sema.analyzeSlicePtr(block, src_src, new_src_ptr, new_src_ptr_ty); | 22222 | new_src_ptr = try sema.analyzeSlicePtr(block, src_src, new_src_ptr, new_src_ptr_ty); |
| 22215 | } | 22223 | } |
| | 22224 | } else if (dest_len == .none and len_val == null) { |
| | 22225 | // Change the dest to a slice, since its type must have the length. |
| | 22226 | const dest_ptr_ptr = try sema.analyzeRef(block, dest_src, new_dest_ptr); |
| | 22227 | new_dest_ptr = try sema.analyzeSlice(block, dest_src, dest_ptr_ptr, .zero, src_len, .none, .unneeded, dest_src, dest_src, dest_src, false); |
| 22216 | } | 22228 | } |
| 22217 | | 22229 | |
| 22218 | try sema.requireRuntimeBlock(block, src, runtime_src); | 22230 | try sema.requireRuntimeBlock(block, src, runtime_src); |