| ... | ... | @@ -6188,7 +6188,9 @@ pub const FuncGen = struct { |
| 6188 | 6188 | } |
| 6189 | 6189 | const llvm_optional_ty = try self.dg.lowerType(optional_ty); |
| 6190 | 6190 | if (isByRef(optional_ty)) { |
| 6191 | const target = self.dg.module.getTarget(); |
| 6191 | 6192 | const optional_ptr = self.buildAlloca(llvm_optional_ty); |
| 6193 | optional_ptr.setAlignment(optional_ty.abiAlignment(target)); |
| 6192 | 6194 | const payload_ptr = self.builder.buildStructGEP(optional_ptr, 0, ""); |
| 6193 | 6195 | var ptr_ty_payload: Type.Payload.ElemType = .{ |
| 6194 | 6196 | .base = .{ .tag = .single_mut_pointer }, |
| ... | ... | @@ -6208,20 +6210,21 @@ pub const FuncGen = struct { |
| 6208 | 6210 | if (self.liveness.isUnused(inst)) return null; |
| 6209 | 6211 | |
| 6210 | 6212 | const ty_op = self.air.instructions.items(.data)[inst].ty_op; |
| 6211 | | const inst_ty = self.air.typeOfIndex(inst); |
| 6213 | const err_un_ty = self.air.typeOfIndex(inst); |
| 6212 | 6214 | const operand = try self.resolveInst(ty_op.operand); |
| 6213 | 6215 | const payload_ty = self.air.typeOf(ty_op.operand); |
| 6214 | 6216 | if (!payload_ty.hasRuntimeBitsIgnoreComptime()) { |
| 6215 | 6217 | return operand; |
| 6216 | 6218 | } |
| 6217 | 6219 | const ok_err_code = (try self.dg.lowerType(Type.anyerror)).constNull(); |
| 6218 | | const err_un_llvm_ty = try self.dg.lowerType(inst_ty); |
| 6220 | const err_un_llvm_ty = try self.dg.lowerType(err_un_ty); |
| 6219 | 6221 | |
| 6220 | 6222 | const target = self.dg.module.getTarget(); |
| 6221 | 6223 | const payload_offset = errUnionPayloadOffset(payload_ty, target); |
| 6222 | 6224 | const error_offset = errUnionErrorOffset(payload_ty, target); |
| 6223 | | if (isByRef(inst_ty)) { |
| 6225 | if (isByRef(err_un_ty)) { |
| 6224 | 6226 | const result_ptr = self.buildAlloca(err_un_llvm_ty); |
| 6227 | result_ptr.setAlignment(err_un_ty.abiAlignment(target)); |
| 6225 | 6228 | const err_ptr = self.builder.buildStructGEP(result_ptr, error_offset, ""); |
| 6226 | 6229 | const store_inst = self.builder.buildStore(ok_err_code, err_ptr); |
| 6227 | 6230 | store_inst.setAlignment(Type.anyerror.abiAlignment(target)); |
| ... | ... | @@ -6256,6 +6259,7 @@ pub const FuncGen = struct { |
| 6256 | 6259 | const error_offset = errUnionErrorOffset(payload_ty, target); |
| 6257 | 6260 | if (isByRef(err_un_ty)) { |
| 6258 | 6261 | const result_ptr = self.buildAlloca(err_un_llvm_ty); |
| 6262 | result_ptr.setAlignment(err_un_ty.abiAlignment(target)); |
| 6259 | 6263 | const err_ptr = self.builder.buildStructGEP(result_ptr, error_offset, ""); |
| 6260 | 6264 | const store_inst = self.builder.buildStore(operand, err_ptr); |
| 6261 | 6265 | store_inst.setAlignment(Type.anyerror.abiAlignment(target)); |