stage2: fix airIsErr when is_ptr == true

This commit is contained in:
Veikka Tuominen
2022-07-22 21:07:55 +03:00
parent 1f748fe426
commit 03b1fbe50d
3 changed files with 17 additions and 3 deletions

View File

@@ -3618,8 +3618,9 @@ fn airIsErr(
const operand = try f.resolveInst(un_op);
const operand_ty = f.air.typeOf(un_op);
const local = try f.allocLocal(Type.initTag(.bool), .Const);
const payload_ty = operand_ty.errorUnionPayload();
const error_ty = operand_ty.errorUnionSet();
const err_union_ty = if (is_ptr) operand_ty.childType() else operand_ty;
const payload_ty = err_union_ty.errorUnionPayload();
const error_ty = err_union_ty.errorUnionSet();
try writer.writeAll(" = ");

View File

@@ -5693,7 +5693,8 @@ pub const FuncGen = struct {
const un_op = self.air.instructions.items(.data)[inst].un_op;
const operand = try self.resolveInst(un_op);
const err_union_ty = self.air.typeOf(un_op);
const operand_ty = self.air.typeOf(un_op);
const err_union_ty = if (operand_is_ptr) operand_ty.childType() else operand_ty;
const payload_ty = err_union_ty.errorUnionPayload();
const err_set_ty = try self.dg.lowerType(Type.initTag(.anyerror));
const zero = err_set_ty.constNull();