| ... | @@ -1732,6 +1732,7 @@ pub const DeclGen = struct { | ... | @@ -1732,6 +1732,7 @@ pub const DeclGen = struct { |
| 1732 | .unreach, .trap => return self.airUnreach(), | 1732 | .unreach, .trap => return self.airUnreach(), |
| 1733 | | 1733 | |
| 1734 | .unwrap_errunion_err => try self.airErrUnionErr(inst), | 1734 | .unwrap_errunion_err => try self.airErrUnionErr(inst), |
| | 1735 | .unwrap_errunion_payload => try self.airErrUnionPayload(inst), |
| 1735 | .wrap_errunion_err => try self.airWrapErrUnionErr(inst), | 1736 | .wrap_errunion_err => try self.airWrapErrUnionErr(inst), |
| 1736 | | 1737 | |
| 1737 | .is_null => try self.airIsNull(inst, .is_null), | 1738 | .is_null => try self.airIsNull(inst, .is_null), |
| ... | @@ -3185,6 +3186,21 @@ pub const DeclGen = struct { | ... | @@ -3185,6 +3186,21 @@ pub const DeclGen = struct { |
| 3185 | return try self.extractField(Type.anyerror, operand_id, eu_layout.errorFieldIndex()); | 3186 | return try self.extractField(Type.anyerror, operand_id, eu_layout.errorFieldIndex()); |
| 3186 | } | 3187 | } |
| 3187 | | 3188 | |
| | 3189 | fn airErrUnionPayload(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| | 3190 | if (self.liveness.isUnused(inst)) return null; |
| | 3191 | |
| | 3192 | const ty_op = self.air.instructions.items(.data)[inst].ty_op; |
| | 3193 | const operand_id = try self.resolve(ty_op.operand); |
| | 3194 | const payload_ty = self.typeOfIndex(inst); |
| | 3195 | const eu_layout = self.errorUnionLayout(payload_ty); |
| | 3196 | |
| | 3197 | if (!eu_layout.payload_has_bits) { |
| | 3198 | return null; // No error possible. |
| | 3199 | } |
| | 3200 | |
| | 3201 | return try self.extractField(payload_ty, operand_id, eu_layout.payloadFieldIndex()); |
| | 3202 | } |
| | 3203 | |
| 3188 | fn airWrapErrUnionErr(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { | 3204 | fn airWrapErrUnionErr(self: *DeclGen, inst: Air.Inst.Index) !?IdRef { |
| 3189 | if (self.liveness.isUnused(inst)) return null; | 3205 | if (self.liveness.isUnused(inst)) return null; |
| 3190 | | 3206 | |