mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
cbe: fix atomics
This commit is contained in:
parent
6921b0a850
commit
912b84bbad
65
lib/include/zig.h
vendored
65
lib/include/zig.h
vendored
@ -101,19 +101,20 @@
|
||||
|
||||
#if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__)
|
||||
#include <stdatomic.h>
|
||||
#define zig_atomic(type) _Atomic(type)
|
||||
#define zig_cmpxchg_strong(obj, expected, desired, succ, fail) atomic_compare_exchange_strong_explicit(obj, &(expected), desired, succ, fail)
|
||||
#define zig_cmpxchg_weak (obj, expected, desired, succ, fail) atomic_compare_exchange_weak_explicit (obj, &(expected), desired, succ, fail)
|
||||
#define zig_cmpxchg_weak(obj, expected, desired, succ, fail) atomic_compare_exchange_weak_explicit (obj, &(expected), desired, succ, fail)
|
||||
#define zig_atomicrmw_xchg(obj, arg, order) atomic_exchange_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_add (obj, arg, order) atomic_fetch_add_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_sub (obj, arg, order) atomic_fetch_sub_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_or (obj, arg, order) atomic_fetch_or_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_xor (obj, arg, order) atomic_fetch_xor_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_and (obj, arg, order) atomic_fetch_and_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_nand(obj, arg, order) atomic_fetch_nand_explicit(obj, arg, order)
|
||||
#define zig_atomicrmw_min (obj, arg, order) atomic_fetch_min_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_max (obj, arg, order) atomic_fetch_max_explicit (obj, arg, order)
|
||||
#define zig_atomic_store (obj, arg, order) atomic_store_explicit (obj, arg, order)
|
||||
#define zig_atomic_load (obj, order) atomic_load_explicit (obj, order)
|
||||
#define zig_atomicrmw_add(obj, arg, order) atomic_fetch_add_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_sub(obj, arg, order) atomic_fetch_sub_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_or(obj, arg, order) atomic_fetch_or_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_xor(obj, arg, order) atomic_fetch_xor_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_and(obj, arg, order) atomic_fetch_and_explicit (obj, arg, order)
|
||||
#define zig_atomicrmw_nand(obj, arg, order) __atomic_fetch_nand (obj, arg, order)
|
||||
#define zig_atomicrmw_min(obj, arg, order) __atomic_fetch_min (obj, arg, order)
|
||||
#define zig_atomicrmw_max(obj, arg, order) __atomic_fetch_max (obj, arg, order)
|
||||
#define zig_atomic_store(obj, arg, order) atomic_store_explicit (obj, arg, order)
|
||||
#define zig_atomic_load(obj, order) atomic_load_explicit (obj, order)
|
||||
#define zig_fence(order) atomic_thread_fence(order)
|
||||
#elif __GNUC__
|
||||
#define memory_order_relaxed __ATOMIC_RELAXED
|
||||
@ -122,19 +123,20 @@
|
||||
#define memory_order_release __ATOMIC_RELEASE
|
||||
#define memory_order_acq_rel __ATOMIC_ACQ_REL
|
||||
#define memory_order_seq_cst __ATOMIC_SEQ_CST
|
||||
#define zig_atomic(type) type
|
||||
#define zig_cmpxchg_strong(obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, false, succ, fail)
|
||||
#define zig_cmpxchg_weak (obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, true , succ, fail)
|
||||
#define zig_cmpxchg_weak(obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, true , succ, fail)
|
||||
#define zig_atomicrmw_xchg(obj, arg, order) __atomic_exchange_n(obj, arg, order)
|
||||
#define zig_atomicrmw_add (obj, arg, order) __atomic_fetch_add (obj, arg, order)
|
||||
#define zig_atomicrmw_sub (obj, arg, order) __atomic_fetch_sub (obj, arg, order)
|
||||
#define zig_atomicrmw_or (obj, arg, order) __atomic_fetch_or (obj, arg, order)
|
||||
#define zig_atomicrmw_xor (obj, arg, order) __atomic_fetch_xor (obj, arg, order)
|
||||
#define zig_atomicrmw_and (obj, arg, order) __atomic_fetch_and (obj, arg, order)
|
||||
#define zig_atomicrmw_add(obj, arg, order) __atomic_fetch_add (obj, arg, order)
|
||||
#define zig_atomicrmw_sub(obj, arg, order) __atomic_fetch_sub (obj, arg, order)
|
||||
#define zig_atomicrmw_or(obj, arg, order) __atomic_fetch_or (obj, arg, order)
|
||||
#define zig_atomicrmw_xor(obj, arg, order) __atomic_fetch_xor (obj, arg, order)
|
||||
#define zig_atomicrmw_and(obj, arg, order) __atomic_fetch_and (obj, arg, order)
|
||||
#define zig_atomicrmw_nand(obj, arg, order) __atomic_fetch_nand(obj, arg, order)
|
||||
#define zig_atomicrmw_min (obj, arg, order) __atomic_fetch_min (obj, arg, order)
|
||||
#define zig_atomicrmw_max (obj, arg, order) __atomic_fetch_max (obj, arg, order)
|
||||
#define zig_atomic_store (obj, arg, order) __atomic_store (obj, arg, order)
|
||||
#define zig_atomic_load (obj, order) __atomic_load (obj, order)
|
||||
#define zig_atomicrmw_min(obj, arg, order) __atomic_fetch_min (obj, arg, order)
|
||||
#define zig_atomicrmw_max(obj, arg, order) __atomic_fetch_max (obj, arg, order)
|
||||
#define zig_atomic_store(obj, arg, order) __atomic_store_n (obj, arg, order)
|
||||
#define zig_atomic_load(obj, order) __atomic_load_n (obj, order)
|
||||
#define zig_fence(order) __atomic_thread_fence(order)
|
||||
#else
|
||||
#define memory_order_relaxed 0
|
||||
@ -143,19 +145,20 @@
|
||||
#define memory_order_release 3
|
||||
#define memory_order_acq_rel 4
|
||||
#define memory_order_seq_cst 5
|
||||
#define zig_atomic(type) type
|
||||
#define zig_cmpxchg_strong(obj, expected, desired, succ, fail) zig_unimplemented()
|
||||
#define zig_cmpxchg_weak (obj, expected, desired, succ, fail) zig_unimplemented()
|
||||
#define zig_cmpxchg_weak(obj, expected, desired, succ, fail) zig_unimplemented()
|
||||
#define zig_atomicrmw_xchg(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_add (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_sub (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_or (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_xor (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_and (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_add(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_sub(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_or(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_xor(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_and(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_nand(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_min (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_max (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomic_store (obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomic_load (obj, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_min(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomicrmw_max(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomic_store(obj, arg, order) zig_unimplemented()
|
||||
#define zig_atomic_load(obj, order) zig_unimplemented()
|
||||
#define zig_fence(order) zig_unimplemented()
|
||||
#endif
|
||||
|
||||
|
||||
@ -587,9 +587,9 @@ pub const DeclGen = struct {
|
||||
|
||||
try writer.writeByte('(');
|
||||
try dg.renderTypecast(writer, ty);
|
||||
try writer.writeAll("){ .is_null = ");
|
||||
try writer.writeAll("){ .payload = ");
|
||||
try dg.renderValue(writer, Type.bool, val, location);
|
||||
try writer.writeAll(", .payload = ");
|
||||
try writer.writeAll(", .is_null = ");
|
||||
try dg.renderValue(writer, payload_ty, val, location);
|
||||
return writer.writeAll(" }");
|
||||
},
|
||||
@ -820,11 +820,13 @@ pub const DeclGen = struct {
|
||||
try writer.writeAll("){");
|
||||
if (val.castTag(.opt_payload)) |pl| {
|
||||
const payload_val = pl.data;
|
||||
try writer.writeAll(" .is_null = false, .payload = ");
|
||||
try writer.writeAll(" .payload = ");
|
||||
try dg.renderValue(writer, payload_ty, payload_val, location);
|
||||
try writer.writeAll(" }");
|
||||
try writer.writeAll(", .is_null = false }");
|
||||
} else {
|
||||
try writer.writeAll(" .is_null = true }");
|
||||
try writer.writeAll(" .payload = ");
|
||||
try dg.renderValue(writer, payload_ty, Value.undef, location);
|
||||
try writer.writeAll(", .is_null = true }");
|
||||
}
|
||||
},
|
||||
.ErrorSet => {
|
||||
@ -3870,10 +3872,23 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
const payload = if (struct_ty.tag() == .union_tagged or struct_ty.tag() == .union_safety_tagged) "payload." else "";
|
||||
|
||||
const inst_ty = f.air.typeOfIndex(inst);
|
||||
const local = try f.allocLocal(inst_ty, .Const);
|
||||
try writer.writeAll(" = ");
|
||||
try f.writeCValue(writer, struct_byval);
|
||||
try writer.print(".{s}{ };\n", .{ payload, fmtIdent(field_name) });
|
||||
const is_array = inst_ty.zigTypeTag() == .Array;
|
||||
const local = try f.allocLocal(inst_ty, if (is_array) .Mut else .Const);
|
||||
|
||||
if (is_array) {
|
||||
try writer.writeAll(";\n");
|
||||
try writer.writeAll("memcpy(");
|
||||
try f.writeCValue(writer, local);
|
||||
try writer.writeAll(", ");
|
||||
try f.writeCValue(writer, struct_byval);
|
||||
try writer.print(".{s}{ }, sizeof(", .{ payload, fmtIdent(field_name) });
|
||||
try f.writeCValue(writer, local);
|
||||
try writer.writeAll("));\n");
|
||||
} else {
|
||||
try writer.writeAll(" = ");
|
||||
try f.writeCValue(writer, struct_byval);
|
||||
try writer.print(".{s}{ };\n", .{ payload, fmtIdent(field_name) });
|
||||
}
|
||||
return local;
|
||||
}
|
||||
|
||||
@ -3962,9 +3977,9 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
|
||||
// .wrap_optional is used to convert non-optionals into optionals so it can never be null.
|
||||
const local = try f.allocLocal(inst_ty, .Const);
|
||||
try writer.writeAll(" = { .is_null = false, .payload =");
|
||||
try writer.writeAll(" = { .payload = ");
|
||||
try f.writeCValue(writer, operand);
|
||||
try writer.writeAll("};\n");
|
||||
try writer.writeAll(", .is_null = false };\n");
|
||||
return local;
|
||||
}
|
||||
|
||||
@ -4203,23 +4218,54 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue
|
||||
const ty_pl = f.air.instructions.items(.data)[inst].ty_pl;
|
||||
const extra = f.air.extraData(Air.Cmpxchg, ty_pl.payload).data;
|
||||
const inst_ty = f.air.typeOfIndex(inst);
|
||||
const is_struct = !inst_ty.isPtrLikeOptional();
|
||||
const ptr_ty = f.air.typeOf(extra.ptr);
|
||||
const ptr = try f.resolveInst(extra.ptr);
|
||||
const expected_value = try f.resolveInst(extra.expected_value);
|
||||
const new_value = try f.resolveInst(extra.new_value);
|
||||
const local = try f.allocLocal(inst_ty, .Const);
|
||||
const writer = f.object.writer();
|
||||
|
||||
try writer.print(" = zig_cmpxchg_{s}(", .{flavor});
|
||||
const local = try f.allocLocal(inst_ty, .Mut);
|
||||
try writer.writeAll(" = ");
|
||||
if (is_struct) try writer.writeAll("{ .payload = ");
|
||||
try f.writeCValue(writer, expected_value);
|
||||
if (is_struct) try writer.writeAll(", .is_null = false }");
|
||||
try writer.writeAll(";\n");
|
||||
|
||||
if (is_struct) {
|
||||
try f.writeCValue(writer, local);
|
||||
try writer.writeAll(".is_null = ");
|
||||
} else {
|
||||
try writer.writeAll("if (");
|
||||
}
|
||||
try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor});
|
||||
try f.object.dg.renderTypecast(writer, ptr_ty.elemType());
|
||||
try writer.writeByte(')');
|
||||
if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile");
|
||||
try writer.writeAll(" *)");
|
||||
try f.writeCValue(writer, ptr);
|
||||
try writer.writeAll(", ");
|
||||
try f.writeCValue(writer, expected_value);
|
||||
try f.writeCValue(writer, local);
|
||||
if (is_struct) {
|
||||
try writer.writeAll(".payload");
|
||||
}
|
||||
try writer.writeAll(", ");
|
||||
try f.writeCValue(writer, new_value);
|
||||
try writer.writeAll(", ");
|
||||
try writeMemoryOrder(writer, extra.successOrder());
|
||||
try writer.writeAll(", ");
|
||||
try writeMemoryOrder(writer, extra.failureOrder());
|
||||
try writer.writeAll(");\n");
|
||||
try writer.writeByte(')');
|
||||
if (is_struct) {
|
||||
try writer.writeAll(";\n");
|
||||
} else {
|
||||
try writer.writeAll(") {\n");
|
||||
f.object.indent_writer.pushIndent();
|
||||
try f.writeCValue(writer, local);
|
||||
try writer.writeAll(" = NULL;\n");
|
||||
f.object.indent_writer.popIndent();
|
||||
try writer.writeAll("}\n");
|
||||
}
|
||||
|
||||
return local;
|
||||
}
|
||||
@ -4228,12 +4274,26 @@ fn airAtomicRmw(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
const pl_op = f.air.instructions.items(.data)[inst].pl_op;
|
||||
const extra = f.air.extraData(Air.AtomicRmw, pl_op.payload).data;
|
||||
const inst_ty = f.air.typeOfIndex(inst);
|
||||
const ptr_ty = f.air.typeOf(pl_op.operand);
|
||||
const ptr = try f.resolveInst(pl_op.operand);
|
||||
const operand = try f.resolveInst(extra.operand);
|
||||
const local = try f.allocLocal(inst_ty, .Const);
|
||||
const writer = f.object.writer();
|
||||
|
||||
try writer.print(" = zig_atomicrmw_{s}(", .{toAtomicRmwSuffix(extra.op())});
|
||||
try writer.print(" = zig_atomicrmw_{s}((", .{toAtomicRmwSuffix(extra.op())});
|
||||
switch (extra.op()) {
|
||||
else => {
|
||||
try writer.writeAll("zig_atomic(");
|
||||
try f.object.dg.renderTypecast(writer, ptr_ty.elemType());
|
||||
try writer.writeByte(')');
|
||||
},
|
||||
.Nand, .Min, .Max => {
|
||||
// These are missing from stdatomic.h, so no atomic types for now.
|
||||
try f.object.dg.renderTypecast(writer, ptr_ty.elemType());
|
||||
},
|
||||
}
|
||||
if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile");
|
||||
try writer.writeAll(" *)");
|
||||
try f.writeCValue(writer, ptr);
|
||||
try writer.writeAll(", ");
|
||||
try f.writeCValue(writer, operand);
|
||||
@ -4255,7 +4315,11 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
const local = try f.allocLocal(inst_ty, .Const);
|
||||
const writer = f.object.writer();
|
||||
|
||||
try writer.writeAll(" = zig_atomic_load(");
|
||||
try writer.writeAll(" = zig_atomic_load((zig_atomic(");
|
||||
try f.object.dg.renderTypecast(writer, ptr_ty.elemType());
|
||||
try writer.writeByte(')');
|
||||
if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile");
|
||||
try writer.writeAll(" *)");
|
||||
try f.writeCValue(writer, ptr);
|
||||
try writer.writeAll(", ");
|
||||
try writeMemoryOrder(writer, atomic_load.order);
|
||||
@ -4266,19 +4330,22 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
|
||||
fn airAtomicStore(f: *Function, inst: Air.Inst.Index, order: [*:0]const u8) !CValue {
|
||||
const bin_op = f.air.instructions.items(.data)[inst].bin_op;
|
||||
const ptr_ty = f.air.typeOf(bin_op.lhs);
|
||||
const ptr = try f.resolveInst(bin_op.lhs);
|
||||
const element = try f.resolveInst(bin_op.rhs);
|
||||
const inst_ty = f.air.typeOfIndex(inst);
|
||||
const local = try f.allocLocal(inst_ty, .Const);
|
||||
const writer = f.object.writer();
|
||||
|
||||
try writer.writeAll(" = zig_atomic_store(");
|
||||
try writer.writeAll("zig_atomic_store((zig_atomic(");
|
||||
try f.object.dg.renderTypecast(writer, ptr_ty.elemType());
|
||||
try writer.writeByte(')');
|
||||
if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile");
|
||||
try writer.writeAll(" *)");
|
||||
try f.writeCValue(writer, ptr);
|
||||
try writer.writeAll(", ");
|
||||
try f.writeCValue(writer, element);
|
||||
try writer.print(", {s});\n", .{order});
|
||||
|
||||
return local;
|
||||
return CValue.none;
|
||||
}
|
||||
|
||||
fn airMemset(f: *Function, inst: Air.Inst.Index) !CValue {
|
||||
|
||||
@ -4,7 +4,6 @@ const expect = std.testing.expect;
|
||||
const expectEqual = std.testing.expectEqual;
|
||||
|
||||
test "cmpxchg" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -44,7 +43,6 @@ test "fence" {
|
||||
}
|
||||
|
||||
test "atomicrmw and atomicload" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -74,7 +72,6 @@ fn testAtomicLoad(ptr: *u8) !void {
|
||||
}
|
||||
|
||||
test "cmpxchg with ptr" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -101,7 +98,6 @@ test "cmpxchg with ptr" {
|
||||
}
|
||||
|
||||
test "cmpxchg with ignored result" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -116,7 +112,6 @@ test "cmpxchg with ignored result" {
|
||||
}
|
||||
|
||||
test "128-bit cmpxchg" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -150,7 +145,6 @@ fn test_u128_cmpxchg() !void {
|
||||
var a_global_variable = @as(u32, 1234);
|
||||
|
||||
test "cmpxchg on a global variable" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -169,7 +163,6 @@ test "cmpxchg on a global variable" {
|
||||
}
|
||||
|
||||
test "atomic load and rmw with enum" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -188,7 +181,6 @@ test "atomic load and rmw with enum" {
|
||||
}
|
||||
|
||||
test "atomic store" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -203,7 +195,6 @@ test "atomic store" {
|
||||
}
|
||||
|
||||
test "atomic store comptime" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -223,7 +214,6 @@ fn testAtomicStore() !void {
|
||||
}
|
||||
|
||||
test "atomicrmw with floats" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -252,7 +242,6 @@ fn testAtomicRmwFloat() !void {
|
||||
}
|
||||
|
||||
test "atomicrmw with ints" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -287,7 +276,6 @@ fn testAtomicRmwInt() !void {
|
||||
}
|
||||
|
||||
test "atomics with different types" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -318,7 +306,6 @@ fn testAtomicsWithType(comptime T: type, a: T, b: T) !void {
|
||||
}
|
||||
|
||||
test "return @atomicStore, using it as a void value" {
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -7,7 +7,6 @@ var list = std.ArrayList(u32).init(allocator);
|
||||
test {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_c) 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
|
||||
|
||||
|
||||
@ -108,7 +108,6 @@ test "mixing normal and error defers" {
|
||||
}
|
||||
|
||||
test "errdefer with payload" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -531,7 +531,6 @@ test "@tagName of @typeInfo" {
|
||||
}
|
||||
|
||||
test "static eval list init" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -150,7 +150,6 @@ test "consistent size of packed structs" {
|
||||
|
||||
test "correct sizeOf and offsets in packed structs" {
|
||||
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -221,7 +220,6 @@ test "correct sizeOf and offsets in packed structs" {
|
||||
|
||||
test "nested packed structs" {
|
||||
if (builtin.zig_backend == .stage1) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -270,7 +268,6 @@ test "nested packed structs" {
|
||||
|
||||
test "regular in irregular packed struct" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||
|
||||
@ -6,7 +6,6 @@ const native_endian = builtin.cpu.arch.endian();
|
||||
|
||||
test "packed struct explicit backing integer" {
|
||||
assert(builtin.zig_backend != .stage1);
|
||||
if (builtin.zig_backend == .stage2_c) 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_aarch64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -157,7 +157,6 @@ test "implicit casting between C pointer and optional non-C pointer" {
|
||||
}
|
||||
|
||||
test "implicit cast error unions with non-optional to optional pointer" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -403,7 +402,6 @@ test "@ptrToInt on null optional at comptime" {
|
||||
}
|
||||
|
||||
test "indexing array with sentinel returns correct type" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) 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
|
||||
|
||||
@ -339,7 +339,6 @@ fn testPassSliceOfEmptyStructToFn(slice: []const EmptyStruct2) usize {
|
||||
|
||||
test "self-referencing struct via array member" {
|
||||
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
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
@ -978,7 +977,6 @@ test "comptime struct field" {
|
||||
}
|
||||
|
||||
test "tuple element initialized with fn call" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -420,7 +420,6 @@ test "else prong of switch on error set excludes other cases" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) 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_c) return error.SkipZigTest; // TODO
|
||||
|
||||
const S = struct {
|
||||
fn doTheTest() !void {
|
||||
@ -455,7 +454,6 @@ test "switch prongs with error set cases make a new error set type for capture v
|
||||
if (builtin.zig_backend == .stage2_x86_64) 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_c) return error.SkipZigTest; // TODO
|
||||
|
||||
const S = struct {
|
||||
fn doTheTest() !void {
|
||||
@ -621,7 +619,6 @@ test "switch capture copies its payload" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) 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_c) return error.SkipZigTest; // TODO
|
||||
|
||||
const S = struct {
|
||||
fn doTheTest() !void {
|
||||
|
||||
@ -21,7 +21,6 @@ test "casting to void with a macro" {
|
||||
}
|
||||
|
||||
test "initializer list expression" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -48,7 +47,6 @@ test "reference to a struct type" {
|
||||
test "cast negative integer to pointer" {
|
||||
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
|
||||
|
||||
@ -93,7 +91,6 @@ test "casting or calling a value with a paren-surrounded macro" {
|
||||
test "nested comma operator" {
|
||||
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
|
||||
|
||||
@ -117,7 +114,6 @@ test "cast functions" {
|
||||
test "large integer macro" {
|
||||
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
|
||||
|
||||
|
||||
@ -200,7 +200,6 @@ test "Type.ErrorUnion" {
|
||||
|
||||
test "Type.Opaque" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -350,7 +349,6 @@ test "Type.Struct" {
|
||||
}
|
||||
|
||||
test "Type.Enum" {
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
@ -395,7 +393,6 @@ test "Type.Enum" {
|
||||
|
||||
test "Type.Union" {
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -1056,7 +1056,6 @@ test "containers with single-field enums" {
|
||||
}
|
||||
|
||||
test "@unionInit on union with tag but no fields" {
|
||||
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
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user