From cc89908e826882065eeaa23bb8827fb7d7cd6219 Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Wed, 5 Oct 2022 14:55:36 +0300 Subject: [PATCH] Sema: do not emit `is(_non)_null` for invalid types Closes #13024 --- src/Sema.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Sema.zig b/src/Sema.zig index 3ccad330ee..7b9f7da769 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -26897,10 +26897,14 @@ fn analyzeIsNull( } } + const inverted_non_null_res = if (invert_logic) Air.Inst.Ref.bool_true else Air.Inst.Ref.bool_false; const operand_ty = sema.typeOf(operand); var buf: Type.Payload.ElemType = undefined; if (operand_ty.zigTypeTag() == .Optional and operand_ty.optionalChild(&buf).zigTypeTag() == .NoReturn) { - return Air.Inst.Ref.bool_true; + return inverted_non_null_res; + } + if (operand_ty.zigTypeTag() != .Optional and !operand_ty.isPtrLikeOptional()) { + return inverted_non_null_res; } try sema.requireRuntimeBlock(block, src, null); const air_tag: Air.Inst.Tag = if (invert_logic) .is_non_null else .is_null;