diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 269383884d61728b748e6b566999274dee7a9193..d54ef6b6606cde1e2b00f20237cde1067f64ac7b 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -3193,7 +3193,7 @@ fn airEquality( try writer.writeAll(" = "); - if (operand_ty.tag() == .optional) { + if (operand_ty.zigTypeTag() == .Optional and !operand_ty.isPtrLikeOptional()) { // (A && B) || (C && (A == B)) // A = lhs.is_null ; B = rhs.is_null ; C = rhs.payload == lhs.payload @@ -3984,9 +3984,9 @@ fn airIsNull( const rhs = if (!payload_ty.hasRuntimeBitsIgnoreComptime()) TypedValue{ .ty = Type.bool, .val = Value.@"true" } - else if (operand_ty.isPtrLikeOptional()) + else if (optional_ty.isPtrLikeOptional()) // operand is a regular pointer, test `operand !=/== NULL` - TypedValue{ .ty = operand_ty, .val = Value.@"null" } + TypedValue{ .ty = optional_ty, .val = Value.@"null" } else if (payload_ty.zigTypeTag() == .ErrorSet) TypedValue{ .ty = payload_ty, .val = Value.zero } else if (payload_ty.isSlice() and optional_ty.optionalReprIsPayload()) rhs: { diff --git a/test/behavior/bugs/1851.zig b/test/behavior/bugs/1851.zig index cdbd5e26f7a720aae3251853a95c33898fbbe313..6209a2f2f18b932101000a6ad8f4b8365fa3e08d 100644 --- a/test/behavior/bugs/1851.zig +++ b/test/behavior/bugs/1851.zig @@ -5,7 +5,6 @@ const expect = std.testing.expect; test "allocation and looping over 3-byte integer" { if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO - if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index b1f9e86c05b4c684a34c073e0b8ed1d857bed477..573f3a7ac246a234732789168002096a51ca99d3 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -1178,7 +1178,6 @@ fn cast128Float(x: u128) f128 { test "implicit cast from *[N]T to ?[*]T" { if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; - if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO