mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 21:08:36 +00:00
cbe: fix loads and stores of 0-bit types
This commit is contained in:
parent
962f33ee11
commit
40b5bb7161
@ -2409,10 +2409,11 @@ fn airLoad(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
const ty_op = f.air.instructions.items(.data)[inst].ty_op;
|
||||
const is_volatile = f.air.typeOf(ty_op.operand).isVolatilePtr();
|
||||
|
||||
if (!is_volatile and f.liveness.isUnused(inst))
|
||||
const inst_ty = f.air.typeOfIndex(inst);
|
||||
if (!inst_ty.hasRuntimeBitsIgnoreComptime() or
|
||||
!is_volatile and f.liveness.isUnused(inst))
|
||||
return CValue.none;
|
||||
|
||||
const inst_ty = f.air.typeOfIndex(inst);
|
||||
const is_array = inst_ty.zigTypeTag() == .Array;
|
||||
const operand = try f.resolveInst(ty_op.operand);
|
||||
const writer = f.object.writer();
|
||||
@ -2565,9 +2566,11 @@ fn airStoreUndefined(f: *Function, dest_ptr: CValue) !CValue {
|
||||
fn airStore(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
// *a = b;
|
||||
const bin_op = f.air.instructions.items(.data)[inst].bin_op;
|
||||
const lhs_child_type = f.air.typeOf(bin_op.lhs).childType();
|
||||
if (!lhs_child_type.hasRuntimeBitsIgnoreComptime()) return CValue.none;
|
||||
|
||||
const dest_ptr = try f.resolveInst(bin_op.lhs);
|
||||
const src_val = try f.resolveInst(bin_op.rhs);
|
||||
const lhs_child_type = f.air.typeOf(bin_op.lhs).childType();
|
||||
|
||||
// TODO Sema should emit a different instruction when the store should
|
||||
// possibly do the safety 0xaa bytes for undefined.
|
||||
|
||||
@ -3,7 +3,6 @@ const std = @import("std");
|
||||
const expect = std.testing.expect;
|
||||
|
||||
test "switch on empty enum" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
|
||||
const E = enum {};
|
||||
@ -29,7 +28,6 @@ test "switch on empty auto numbered tagged union" {
|
||||
}
|
||||
|
||||
test "switch on empty tagged union" {
|
||||
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_wasm) return error.SkipZigTest; // TODO
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user