mirror of
https://github.com/ziglang/zig.git
synced 2025-12-10 08:13:07 +00:00
cbe: fix optional access
This commit is contained in:
parent
8e52be1602
commit
071404ff65
@ -3193,7 +3193,7 @@ fn airEquality(
|
|||||||
|
|
||||||
try writer.writeAll(" = ");
|
try writer.writeAll(" = ");
|
||||||
|
|
||||||
if (operand_ty.tag() == .optional) {
|
if (operand_ty.zigTypeTag() == .Optional and !operand_ty.isPtrLikeOptional()) {
|
||||||
// (A && B) || (C && (A == B))
|
// (A && B) || (C && (A == B))
|
||||||
// A = lhs.is_null ; B = rhs.is_null ; C = rhs.payload == lhs.payload
|
// 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())
|
const rhs = if (!payload_ty.hasRuntimeBitsIgnoreComptime())
|
||||||
TypedValue{ .ty = Type.bool, .val = Value.@"true" }
|
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`
|
// 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)
|
else if (payload_ty.zigTypeTag() == .ErrorSet)
|
||||||
TypedValue{ .ty = payload_ty, .val = Value.zero }
|
TypedValue{ .ty = payload_ty, .val = Value.zero }
|
||||||
else if (payload_ty.isSlice() and optional_ty.optionalReprIsPayload()) rhs: {
|
else if (payload_ty.isSlice() and optional_ty.optionalReprIsPayload()) rhs: {
|
||||||
|
|||||||
@ -5,7 +5,6 @@ const expect = std.testing.expect;
|
|||||||
test "allocation and looping over 3-byte integer" {
|
test "allocation and looping over 3-byte integer" {
|
||||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
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_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_arm) return error.SkipZigTest; // TODO
|
||||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||||
|
|
||||||
|
|||||||
@ -1178,7 +1178,6 @@ fn cast128Float(x: u128) f128 {
|
|||||||
|
|
||||||
test "implicit cast from *[N]T to ?[*]T" {
|
test "implicit cast from *[N]T to ?[*]T" {
|
||||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
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_arm) return error.SkipZigTest; // TODO
|
||||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user