| author | |
| committer | |
| log | 912b84bbad698d18a6b844f9c05c074d2880e35b |
| tree | 9432636c0915dfdbb3bd23e26aa725debad56d2b |
| parent | 6921b0a850771fa7729930a9ec64b27b4e57e79b |
14 files changed, 122 insertions(+), 87 deletions(-)
lib/include/zig.h+34-31| ... | @@ -101,19 +101,20 @@ | ... | @@ -101,19 +101,20 @@ |
| 101 | 101 | ||
| 102 | #if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) | 102 | #if __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_ATOMICS__) |
| 103 | #include <stdatomic.h> | 103 | #include <stdatomic.h> |
| 104 | #define zig_atomic(type) _Atomic(type) | ||
| 104 | #define zig_cmpxchg_strong(obj, expected, desired, succ, fail) atomic_compare_exchange_strong_explicit(obj, &(expected), desired, succ, fail) | 105 | #define zig_cmpxchg_strong(obj, expected, desired, succ, fail) atomic_compare_exchange_strong_explicit(obj, &(expected), desired, succ, fail) |
| 105 | #define zig_cmpxchg_weak (obj, expected, desired, succ, fail) atomic_compare_exchange_weak_explicit (obj, &(expected), desired, succ, fail) | 106 | #define zig_cmpxchg_weak(obj, expected, desired, succ, fail) atomic_compare_exchange_weak_explicit (obj, &(expected), desired, succ, fail) |
| 106 | #define zig_atomicrmw_xchg(obj, arg, order) atomic_exchange_explicit (obj, arg, order) | 107 | #define zig_atomicrmw_xchg(obj, arg, order) atomic_exchange_explicit (obj, arg, order) |
| 107 | #define zig_atomicrmw_add (obj, arg, order) atomic_fetch_add_explicit (obj, arg, order) | 108 | #define zig_atomicrmw_add(obj, arg, order) atomic_fetch_add_explicit (obj, arg, order) |
| 108 | #define zig_atomicrmw_sub (obj, arg, order) atomic_fetch_sub_explicit (obj, arg, order) | 109 | #define zig_atomicrmw_sub(obj, arg, order) atomic_fetch_sub_explicit (obj, arg, order) |
| 109 | #define zig_atomicrmw_or (obj, arg, order) atomic_fetch_or_explicit (obj, arg, order) | 110 | #define zig_atomicrmw_or(obj, arg, order) atomic_fetch_or_explicit (obj, arg, order) |
| 110 | #define zig_atomicrmw_xor (obj, arg, order) atomic_fetch_xor_explicit (obj, arg, order) | 111 | #define zig_atomicrmw_xor(obj, arg, order) atomic_fetch_xor_explicit (obj, arg, order) |
| 111 | #define zig_atomicrmw_and (obj, arg, order) atomic_fetch_and_explicit (obj, arg, order) | 112 | #define zig_atomicrmw_and(obj, arg, order) atomic_fetch_and_explicit (obj, arg, order) |
| 112 | #define zig_atomicrmw_nand(obj, arg, order) atomic_fetch_nand_explicit(obj, arg, order) | 113 | #define zig_atomicrmw_nand(obj, arg, order) __atomic_fetch_nand (obj, arg, order) |
| 113 | #define zig_atomicrmw_min (obj, arg, order) atomic_fetch_min_explicit (obj, arg, order) | 114 | #define zig_atomicrmw_min(obj, arg, order) __atomic_fetch_min (obj, arg, order) |
| 114 | #define zig_atomicrmw_max (obj, arg, order) atomic_fetch_max_explicit (obj, arg, order) | 115 | #define zig_atomicrmw_max(obj, arg, order) __atomic_fetch_max (obj, arg, order) |
| 115 | #define zig_atomic_store (obj, arg, order) atomic_store_explicit (obj, arg, order) | 116 | #define zig_atomic_store(obj, arg, order) atomic_store_explicit (obj, arg, order) |
| 116 | #define zig_atomic_load (obj, order) atomic_load_explicit (obj, order) | 117 | #define zig_atomic_load(obj, order) atomic_load_explicit (obj, order) |
| 117 | #define zig_fence(order) atomic_thread_fence(order) | 118 | #define zig_fence(order) atomic_thread_fence(order) |
| 118 | #elif __GNUC__ | 119 | #elif __GNUC__ |
| 119 | #define memory_order_relaxed __ATOMIC_RELAXED | 120 | #define memory_order_relaxed __ATOMIC_RELAXED |
| ... | @@ -122,19 +123,20 @@ | ... | @@ -122,19 +123,20 @@ |
| 122 | #define memory_order_release __ATOMIC_RELEASE | 123 | #define memory_order_release __ATOMIC_RELEASE |
| 123 | #define memory_order_acq_rel __ATOMIC_ACQ_REL | 124 | #define memory_order_acq_rel __ATOMIC_ACQ_REL |
| 124 | #define memory_order_seq_cst __ATOMIC_SEQ_CST | 125 | #define memory_order_seq_cst __ATOMIC_SEQ_CST |
| 126 | #define zig_atomic(type) type | ||
| 125 | #define zig_cmpxchg_strong(obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, false, succ, fail) | 127 | #define zig_cmpxchg_strong(obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, false, succ, fail) |
| 126 | #define zig_cmpxchg_weak (obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, true , succ, fail) | 128 | #define zig_cmpxchg_weak(obj, expected, desired, succ, fail) __atomic_compare_exchange_n(obj, &(expected), desired, true , succ, fail) |
| 127 | #define zig_atomicrmw_xchg(obj, arg, order) __atomic_exchange_n(obj, arg, order) | 129 | #define zig_atomicrmw_xchg(obj, arg, order) __atomic_exchange_n(obj, arg, order) |
| 128 | #define zig_atomicrmw_add (obj, arg, order) __atomic_fetch_add (obj, arg, order) | 130 | #define zig_atomicrmw_add(obj, arg, order) __atomic_fetch_add (obj, arg, order) |
| 129 | #define zig_atomicrmw_sub (obj, arg, order) __atomic_fetch_sub (obj, arg, order) | 131 | #define zig_atomicrmw_sub(obj, arg, order) __atomic_fetch_sub (obj, arg, order) |
| 130 | #define zig_atomicrmw_or (obj, arg, order) __atomic_fetch_or (obj, arg, order) | 132 | #define zig_atomicrmw_or(obj, arg, order) __atomic_fetch_or (obj, arg, order) |
| 131 | #define zig_atomicrmw_xor (obj, arg, order) __atomic_fetch_xor (obj, arg, order) | 133 | #define zig_atomicrmw_xor(obj, arg, order) __atomic_fetch_xor (obj, arg, order) |
| 132 | #define zig_atomicrmw_and (obj, arg, order) __atomic_fetch_and (obj, arg, order) | 134 | #define zig_atomicrmw_and(obj, arg, order) __atomic_fetch_and (obj, arg, order) |
| 133 | #define zig_atomicrmw_nand(obj, arg, order) __atomic_fetch_nand(obj, arg, order) | 135 | #define zig_atomicrmw_nand(obj, arg, order) __atomic_fetch_nand(obj, arg, order) |
| 134 | #define zig_atomicrmw_min (obj, arg, order) __atomic_fetch_min (obj, arg, order) | 136 | #define zig_atomicrmw_min(obj, arg, order) __atomic_fetch_min (obj, arg, order) |
| 135 | #define zig_atomicrmw_max (obj, arg, order) __atomic_fetch_max (obj, arg, order) | 137 | #define zig_atomicrmw_max(obj, arg, order) __atomic_fetch_max (obj, arg, order) |
| 136 | #define zig_atomic_store (obj, arg, order) __atomic_store (obj, arg, order) | 138 | #define zig_atomic_store(obj, arg, order) __atomic_store_n (obj, arg, order) |
| 137 | #define zig_atomic_load (obj, order) __atomic_load (obj, order) | 139 | #define zig_atomic_load(obj, order) __atomic_load_n (obj, order) |
| 138 | #define zig_fence(order) __atomic_thread_fence(order) | 140 | #define zig_fence(order) __atomic_thread_fence(order) |
| 139 | #else | 141 | #else |
| 140 | #define memory_order_relaxed 0 | 142 | #define memory_order_relaxed 0 |
| ... | @@ -143,19 +145,20 @@ | ... | @@ -143,19 +145,20 @@ |
| 143 | #define memory_order_release 3 | 145 | #define memory_order_release 3 |
| 144 | #define memory_order_acq_rel 4 | 146 | #define memory_order_acq_rel 4 |
| 145 | #define memory_order_seq_cst 5 | 147 | #define memory_order_seq_cst 5 |
| 148 | #define zig_atomic(type) type | ||
| 146 | #define zig_cmpxchg_strong(obj, expected, desired, succ, fail) zig_unimplemented() | 149 | #define zig_cmpxchg_strong(obj, expected, desired, succ, fail) zig_unimplemented() |
| 147 | #define zig_cmpxchg_weak (obj, expected, desired, succ, fail) zig_unimplemented() | 150 | #define zig_cmpxchg_weak(obj, expected, desired, succ, fail) zig_unimplemented() |
| 148 | #define zig_atomicrmw_xchg(obj, arg, order) zig_unimplemented() | 151 | #define zig_atomicrmw_xchg(obj, arg, order) zig_unimplemented() |
| 149 | #define zig_atomicrmw_add (obj, arg, order) zig_unimplemented() | 152 | #define zig_atomicrmw_add(obj, arg, order) zig_unimplemented() |
| 150 | #define zig_atomicrmw_sub (obj, arg, order) zig_unimplemented() | 153 | #define zig_atomicrmw_sub(obj, arg, order) zig_unimplemented() |
| 151 | #define zig_atomicrmw_or (obj, arg, order) zig_unimplemented() | 154 | #define zig_atomicrmw_or(obj, arg, order) zig_unimplemented() |
| 152 | #define zig_atomicrmw_xor (obj, arg, order) zig_unimplemented() | 155 | #define zig_atomicrmw_xor(obj, arg, order) zig_unimplemented() |
| 153 | #define zig_atomicrmw_and (obj, arg, order) zig_unimplemented() | 156 | #define zig_atomicrmw_and(obj, arg, order) zig_unimplemented() |
| 154 | #define zig_atomicrmw_nand(obj, arg, order) zig_unimplemented() | 157 | #define zig_atomicrmw_nand(obj, arg, order) zig_unimplemented() |
| 155 | #define zig_atomicrmw_min (obj, arg, order) zig_unimplemented() | 158 | #define zig_atomicrmw_min(obj, arg, order) zig_unimplemented() |
| 156 | #define zig_atomicrmw_max (obj, arg, order) zig_unimplemented() | 159 | #define zig_atomicrmw_max(obj, arg, order) zig_unimplemented() |
| 157 | #define zig_atomic_store (obj, arg, order) zig_unimplemented() | 160 | #define zig_atomic_store(obj, arg, order) zig_unimplemented() |
| 158 | #define zig_atomic_load (obj, order) zig_unimplemented() | 161 | #define zig_atomic_load(obj, order) zig_unimplemented() |
| 159 | #define zig_fence(order) zig_unimplemented() | 162 | #define zig_fence(order) zig_unimplemented() |
| 160 | #endif | 163 | #endif |
| 161 | 164 |
src/codegen/c.zig+88-21| ... | @@ -587,9 +587,9 @@ pub const DeclGen = struct { | ... | @@ -587,9 +587,9 @@ pub const DeclGen = struct { |
| 587 | 587 | ||
| 588 | try writer.writeByte('('); | 588 | try writer.writeByte('('); |
| 589 | try dg.renderTypecast(writer, ty); | 589 | try dg.renderTypecast(writer, ty); |
| 590 | try writer.writeAll("){ .is_null = "); | 590 | try writer.writeAll("){ .payload = "); |
| 591 | try dg.renderValue(writer, Type.bool, val, location); | 591 | try dg.renderValue(writer, Type.bool, val, location); |
| 592 | try writer.writeAll(", .payload = "); | 592 | try writer.writeAll(", .is_null = "); |
| 593 | try dg.renderValue(writer, payload_ty, val, location); | 593 | try dg.renderValue(writer, payload_ty, val, location); |
| 594 | return writer.writeAll(" }"); | 594 | return writer.writeAll(" }"); |
| 595 | }, | 595 | }, |
| ... | @@ -820,11 +820,13 @@ pub const DeclGen = struct { | ... | @@ -820,11 +820,13 @@ pub const DeclGen = struct { |
| 820 | try writer.writeAll("){"); | 820 | try writer.writeAll("){"); |
| 821 | if (val.castTag(.opt_payload)) |pl| { | 821 | if (val.castTag(.opt_payload)) |pl| { |
| 822 | const payload_val = pl.data; | 822 | const payload_val = pl.data; |
| 823 | try writer.writeAll(" .is_null = false, .payload = "); | 823 | try writer.writeAll(" .payload = "); |
| 824 | try dg.renderValue(writer, payload_ty, payload_val, location); | 824 | try dg.renderValue(writer, payload_ty, payload_val, location); |
| 825 | try writer.writeAll(" }"); | 825 | try writer.writeAll(", .is_null = false }"); |
| 826 | } else { | 826 | } else { |
| 827 | try writer.writeAll(" .is_null = true }"); | 827 | try writer.writeAll(" .payload = "); |
| 828 | try dg.renderValue(writer, payload_ty, Value.undef, location); | ||
| 829 | try writer.writeAll(", .is_null = true }"); | ||
| 828 | } | 830 | } |
| 829 | }, | 831 | }, |
| 830 | .ErrorSet => { | 832 | .ErrorSet => { |
| ... | @@ -3870,10 +3872,23 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue { | ... | @@ -3870,10 +3872,23 @@ fn airStructFieldVal(f: *Function, inst: Air.Inst.Index) !CValue { |
| 3870 | const payload = if (struct_ty.tag() == .union_tagged or struct_ty.tag() == .union_safety_tagged) "payload." else ""; | 3872 | const payload = if (struct_ty.tag() == .union_tagged or struct_ty.tag() == .union_safety_tagged) "payload." else ""; |
| 3871 | 3873 | ||
| 3872 | const inst_ty = f.air.typeOfIndex(inst); | 3874 | const inst_ty = f.air.typeOfIndex(inst); |
| 3873 | const local = try f.allocLocal(inst_ty, .Const); | 3875 | const is_array = inst_ty.zigTypeTag() == .Array; |
| 3874 | try writer.writeAll(" = "); | 3876 | const local = try f.allocLocal(inst_ty, if (is_array) .Mut else .Const); |
| 3875 | try f.writeCValue(writer, struct_byval); | 3877 | |
| 3876 | try writer.print(".{s}{ };\n", .{ payload, fmtIdent(field_name) }); | 3878 | if (is_array) { |
| 3879 | try writer.writeAll(";\n"); | ||
| 3880 | try writer.writeAll("memcpy("); | ||
| 3881 | try f.writeCValue(writer, local); | ||
| 3882 | try writer.writeAll(", "); | ||
| 3883 | try f.writeCValue(writer, struct_byval); | ||
| 3884 | try writer.print(".{s}{ }, sizeof(", .{ payload, fmtIdent(field_name) }); | ||
| 3885 | try f.writeCValue(writer, local); | ||
| 3886 | try writer.writeAll("));\n"); | ||
| 3887 | } else { | ||
| 3888 | try writer.writeAll(" = "); | ||
| 3889 | try f.writeCValue(writer, struct_byval); | ||
| 3890 | try writer.print(".{s}{ };\n", .{ payload, fmtIdent(field_name) }); | ||
| 3891 | } | ||
| 3877 | return local; | 3892 | return local; |
| 3878 | } | 3893 | } |
| 3879 | 3894 | ||
| ... | @@ -3962,9 +3977,9 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue { | ... | @@ -3962,9 +3977,9 @@ fn airWrapOptional(f: *Function, inst: Air.Inst.Index) !CValue { |
| 3962 | 3977 | ||
| 3963 | // .wrap_optional is used to convert non-optionals into optionals so it can never be null. | 3978 | // .wrap_optional is used to convert non-optionals into optionals so it can never be null. |
| 3964 | const local = try f.allocLocal(inst_ty, .Const); | 3979 | const local = try f.allocLocal(inst_ty, .Const); |
| 3965 | try writer.writeAll(" = { .is_null = false, .payload ="); | 3980 | try writer.writeAll(" = { .payload = "); |
| 3966 | try f.writeCValue(writer, operand); | 3981 | try f.writeCValue(writer, operand); |
| 3967 | try writer.writeAll("};\n"); | 3982 | try writer.writeAll(", .is_null = false };\n"); |
| 3968 | return local; | 3983 | return local; |
| 3969 | } | 3984 | } |
| 3970 | 3985 | ||
| ... | @@ -4203,23 +4218,54 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue | ... | @@ -4203,23 +4218,54 @@ fn airCmpxchg(f: *Function, inst: Air.Inst.Index, flavor: [*:0]const u8) !CValue |
| 4203 | const ty_pl = f.air.instructions.items(.data)[inst].ty_pl; | 4218 | const ty_pl = f.air.instructions.items(.data)[inst].ty_pl; |
| 4204 | const extra = f.air.extraData(Air.Cmpxchg, ty_pl.payload).data; | 4219 | const extra = f.air.extraData(Air.Cmpxchg, ty_pl.payload).data; |
| 4205 | const inst_ty = f.air.typeOfIndex(inst); | 4220 | const inst_ty = f.air.typeOfIndex(inst); |
| 4221 | const is_struct = !inst_ty.isPtrLikeOptional(); | ||
| 4222 | const ptr_ty = f.air.typeOf(extra.ptr); | ||
| 4206 | const ptr = try f.resolveInst(extra.ptr); | 4223 | const ptr = try f.resolveInst(extra.ptr); |
| 4207 | const expected_value = try f.resolveInst(extra.expected_value); | 4224 | const expected_value = try f.resolveInst(extra.expected_value); |
| 4208 | const new_value = try f.resolveInst(extra.new_value); | 4225 | const new_value = try f.resolveInst(extra.new_value); |
| 4209 | const local = try f.allocLocal(inst_ty, .Const); | ||
| 4210 | const writer = f.object.writer(); | 4226 | const writer = f.object.writer(); |
| 4211 | 4227 | ||
| 4212 | try writer.print(" = zig_cmpxchg_{s}(", .{flavor}); | 4228 | const local = try f.allocLocal(inst_ty, .Mut); |
| 4229 | try writer.writeAll(" = "); | ||
| 4230 | if (is_struct) try writer.writeAll("{ .payload = "); | ||
| 4231 | try f.writeCValue(writer, expected_value); | ||
| 4232 | if (is_struct) try writer.writeAll(", .is_null = false }"); | ||
| 4233 | try writer.writeAll(";\n"); | ||
| 4234 | |||
| 4235 | if (is_struct) { | ||
| 4236 | try f.writeCValue(writer, local); | ||
| 4237 | try writer.writeAll(".is_null = "); | ||
| 4238 | } else { | ||
| 4239 | try writer.writeAll("if ("); | ||
| 4240 | } | ||
| 4241 | try writer.print("zig_cmpxchg_{s}((zig_atomic(", .{flavor}); | ||
| 4242 | try f.object.dg.renderTypecast(writer, ptr_ty.elemType()); | ||
| 4243 | try writer.writeByte(')'); | ||
| 4244 | if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile"); | ||
| 4245 | try writer.writeAll(" *)"); | ||
| 4213 | try f.writeCValue(writer, ptr); | 4246 | try f.writeCValue(writer, ptr); |
| 4214 | try writer.writeAll(", "); | 4247 | try writer.writeAll(", "); |
| 4215 | try f.writeCValue(writer, expected_value); | 4248 | try f.writeCValue(writer, local); |
| 4249 | if (is_struct) { | ||
| 4250 | try writer.writeAll(".payload"); | ||
| 4251 | } | ||
| 4216 | try writer.writeAll(", "); | 4252 | try writer.writeAll(", "); |
| 4217 | try f.writeCValue(writer, new_value); | 4253 | try f.writeCValue(writer, new_value); |
| 4218 | try writer.writeAll(", "); | 4254 | try writer.writeAll(", "); |
| 4219 | try writeMemoryOrder(writer, extra.successOrder()); | 4255 | try writeMemoryOrder(writer, extra.successOrder()); |
| 4220 | try writer.writeAll(", "); | 4256 | try writer.writeAll(", "); |
| 4221 | try writeMemoryOrder(writer, extra.failureOrder()); | 4257 | try writeMemoryOrder(writer, extra.failureOrder()); |
| 4222 | try writer.writeAll(");\n"); | 4258 | try writer.writeByte(')'); |
| 4259 | if (is_struct) { | ||
| 4260 | try writer.writeAll(";\n"); | ||
| 4261 | } else { | ||
| 4262 | try writer.writeAll(") {\n"); | ||
| 4263 | f.object.indent_writer.pushIndent(); | ||
| 4264 | try f.writeCValue(writer, local); | ||
| 4265 | try writer.writeAll(" = NULL;\n"); | ||
| 4266 | f.object.indent_writer.popIndent(); | ||
| 4267 | try writer.writeAll("}\n"); | ||
| 4268 | } | ||
| 4223 | 4269 | ||
| 4224 | return local; | 4270 | return local; |
| 4225 | } | 4271 | } |
| ... | @@ -4228,12 +4274,26 @@ fn airAtomicRmw(f: *Function, inst: Air.Inst.Index) !CValue { | ... | @@ -4228,12 +4274,26 @@ fn airAtomicRmw(f: *Function, inst: Air.Inst.Index) !CValue { |
| 4228 | const pl_op = f.air.instructions.items(.data)[inst].pl_op; | 4274 | const pl_op = f.air.instructions.items(.data)[inst].pl_op; |
| 4229 | const extra = f.air.extraData(Air.AtomicRmw, pl_op.payload).data; | 4275 | const extra = f.air.extraData(Air.AtomicRmw, pl_op.payload).data; |
| 4230 | const inst_ty = f.air.typeOfIndex(inst); | 4276 | const inst_ty = f.air.typeOfIndex(inst); |
| 4277 | const ptr_ty = f.air.typeOf(pl_op.operand); | ||
| 4231 | const ptr = try f.resolveInst(pl_op.operand); | 4278 | const ptr = try f.resolveInst(pl_op.operand); |
| 4232 | const operand = try f.resolveInst(extra.operand); | 4279 | const operand = try f.resolveInst(extra.operand); |
| 4233 | const local = try f.allocLocal(inst_ty, .Const); | 4280 | const local = try f.allocLocal(inst_ty, .Const); |
| 4234 | const writer = f.object.writer(); | 4281 | const writer = f.object.writer(); |
| 4235 | 4282 | ||
| 4236 | try writer.print(" = zig_atomicrmw_{s}(", .{toAtomicRmwSuffix(extra.op())}); | 4283 | try writer.print(" = zig_atomicrmw_{s}((", .{toAtomicRmwSuffix(extra.op())}); |
| 4284 | switch (extra.op()) { | ||
| 4285 | else => { | ||
| 4286 | try writer.writeAll("zig_atomic("); | ||
| 4287 | try f.object.dg.renderTypecast(writer, ptr_ty.elemType()); | ||
| 4288 | try writer.writeByte(')'); | ||
| 4289 | }, | ||
| 4290 | .Nand, .Min, .Max => { | ||
| 4291 | // These are missing from stdatomic.h, so no atomic types for now. | ||
| 4292 | try f.object.dg.renderTypecast(writer, ptr_ty.elemType()); | ||
| 4293 | }, | ||
| 4294 | } | ||
| 4295 | if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile"); | ||
| 4296 | try writer.writeAll(" *)"); | ||
| 4237 | try f.writeCValue(writer, ptr); | 4297 | try f.writeCValue(writer, ptr); |
| 4238 | try writer.writeAll(", "); | 4298 | try writer.writeAll(", "); |
| 4239 | try f.writeCValue(writer, operand); | 4299 | try f.writeCValue(writer, operand); |
| ... | @@ -4255,7 +4315,11 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue { | ... | @@ -4255,7 +4315,11 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue { |
| 4255 | const local = try f.allocLocal(inst_ty, .Const); | 4315 | const local = try f.allocLocal(inst_ty, .Const); |
| 4256 | const writer = f.object.writer(); | 4316 | const writer = f.object.writer(); |
| 4257 | 4317 | ||
| 4258 | try writer.writeAll(" = zig_atomic_load("); | 4318 | try writer.writeAll(" = zig_atomic_load((zig_atomic("); |
| 4319 | try f.object.dg.renderTypecast(writer, ptr_ty.elemType()); | ||
| 4320 | try writer.writeByte(')'); | ||
| 4321 | if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile"); | ||
| 4322 | try writer.writeAll(" *)"); | ||
| 4259 | try f.writeCValue(writer, ptr); | 4323 | try f.writeCValue(writer, ptr); |
| 4260 | try writer.writeAll(", "); | 4324 | try writer.writeAll(", "); |
| 4261 | try writeMemoryOrder(writer, atomic_load.order); | 4325 | try writeMemoryOrder(writer, atomic_load.order); |
| ... | @@ -4266,19 +4330,22 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue { | ... | @@ -4266,19 +4330,22 @@ fn airAtomicLoad(f: *Function, inst: Air.Inst.Index) !CValue { |
| 4266 | 4330 | ||
| 4267 | fn airAtomicStore(f: *Function, inst: Air.Inst.Index, order: [*:0]const u8) !CValue { | 4331 | fn airAtomicStore(f: *Function, inst: Air.Inst.Index, order: [*:0]const u8) !CValue { |
| 4268 | const bin_op = f.air.instructions.items(.data)[inst].bin_op; | 4332 | const bin_op = f.air.instructions.items(.data)[inst].bin_op; |
| 4333 | const ptr_ty = f.air.typeOf(bin_op.lhs); | ||
| 4269 | const ptr = try f.resolveInst(bin_op.lhs); | 4334 | const ptr = try f.resolveInst(bin_op.lhs); |
| 4270 | const element = try f.resolveInst(bin_op.rhs); | 4335 | const element = try f.resolveInst(bin_op.rhs); |
| 4271 | const inst_ty = f.air.typeOfIndex(inst); | ||
| 4272 | const local = try f.allocLocal(inst_ty, .Const); | ||
| 4273 | const writer = f.object.writer(); | 4336 | const writer = f.object.writer(); |
| 4274 | 4337 | ||
| 4275 | try writer.writeAll(" = zig_atomic_store("); | 4338 | try writer.writeAll("zig_atomic_store((zig_atomic("); |
| 4339 | try f.object.dg.renderTypecast(writer, ptr_ty.elemType()); | ||
| 4340 | try writer.writeByte(')'); | ||
| 4341 | if (ptr_ty.isVolatilePtr()) try writer.writeAll(" volatile"); | ||
| 4342 | try writer.writeAll(" *)"); | ||
| 4276 | try f.writeCValue(writer, ptr); | 4343 | try f.writeCValue(writer, ptr); |
| 4277 | try writer.writeAll(", "); | 4344 | try writer.writeAll(", "); |
| 4278 | try f.writeCValue(writer, element); | 4345 | try f.writeCValue(writer, element); |
| 4279 | try writer.print(", {s});\n", .{order}); | 4346 | try writer.print(", {s});\n", .{order}); |
| 4280 | 4347 | ||
| 4281 | return local; | 4348 | return CValue.none; |
| 4282 | } | 4349 | } |
| 4283 | 4350 | ||
| 4284 | fn airMemset(f: *Function, inst: Air.Inst.Index) !CValue { | 4351 | fn airMemset(f: *Function, inst: Air.Inst.Index) !CValue { |
test/behavior/atomics.zig-13| ... | @@ -4,7 +4,6 @@ const expect = std.testing.expect; | ... | @@ -4,7 +4,6 @@ const expect = std.testing.expect; |
| 4 | const expectEqual = std.testing.expectEqual; | 4 | const expectEqual = std.testing.expectEqual; |
| 5 | 5 | ||
| 6 | test "cmpxchg" { | 6 | test "cmpxchg" { |
| 7 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 8 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 7 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 9 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 8 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 10 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 9 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -44,7 +43,6 @@ test "fence" { | ... | @@ -44,7 +43,6 @@ test "fence" { |
| 44 | } | 43 | } |
| 45 | 44 | ||
| 46 | test "atomicrmw and atomicload" { | 45 | test "atomicrmw and atomicload" { |
| 47 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 48 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 46 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 49 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 47 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 50 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 48 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -74,7 +72,6 @@ fn testAtomicLoad(ptr: *u8) !void { | ... | @@ -74,7 +72,6 @@ fn testAtomicLoad(ptr: *u8) !void { |
| 74 | } | 72 | } |
| 75 | 73 | ||
| 76 | test "cmpxchg with ptr" { | 74 | test "cmpxchg with ptr" { |
| 77 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 78 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 75 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 79 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 76 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 80 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 77 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -101,7 +98,6 @@ test "cmpxchg with ptr" { | ... | @@ -101,7 +98,6 @@ test "cmpxchg with ptr" { |
| 101 | } | 98 | } |
| 102 | 99 | ||
| 103 | test "cmpxchg with ignored result" { | 100 | test "cmpxchg with ignored result" { |
| 104 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 105 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 101 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 106 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 102 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 107 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 103 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -116,7 +112,6 @@ test "cmpxchg with ignored result" { | ... | @@ -116,7 +112,6 @@ test "cmpxchg with ignored result" { |
| 116 | } | 112 | } |
| 117 | 113 | ||
| 118 | test "128-bit cmpxchg" { | 114 | test "128-bit cmpxchg" { |
| 119 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 120 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 115 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 121 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 116 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 122 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 117 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -150,7 +145,6 @@ fn test_u128_cmpxchg() !void { | ... | @@ -150,7 +145,6 @@ fn test_u128_cmpxchg() !void { |
| 150 | var a_global_variable = @as(u32, 1234); | 145 | var a_global_variable = @as(u32, 1234); |
| 151 | 146 | ||
| 152 | test "cmpxchg on a global variable" { | 147 | test "cmpxchg on a global variable" { |
| 153 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 154 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 148 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 155 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 149 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 156 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 150 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -169,7 +163,6 @@ test "cmpxchg on a global variable" { | ... | @@ -169,7 +163,6 @@ test "cmpxchg on a global variable" { |
| 169 | } | 163 | } |
| 170 | 164 | ||
| 171 | test "atomic load and rmw with enum" { | 165 | test "atomic load and rmw with enum" { |
| 172 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 173 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 166 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 174 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 167 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 175 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 168 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -188,7 +181,6 @@ test "atomic load and rmw with enum" { | ... | @@ -188,7 +181,6 @@ test "atomic load and rmw with enum" { |
| 188 | } | 181 | } |
| 189 | 182 | ||
| 190 | test "atomic store" { | 183 | test "atomic store" { |
| 191 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 192 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 184 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 193 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 185 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 194 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 186 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -203,7 +195,6 @@ test "atomic store" { | ... | @@ -203,7 +195,6 @@ test "atomic store" { |
| 203 | } | 195 | } |
| 204 | 196 | ||
| 205 | test "atomic store comptime" { | 197 | test "atomic store comptime" { |
| 206 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 207 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 198 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 208 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 199 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 209 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 200 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -223,7 +214,6 @@ fn testAtomicStore() !void { | ... | @@ -223,7 +214,6 @@ fn testAtomicStore() !void { |
| 223 | } | 214 | } |
| 224 | 215 | ||
| 225 | test "atomicrmw with floats" { | 216 | test "atomicrmw with floats" { |
| 226 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 227 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 217 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 228 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 218 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 229 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 219 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -252,7 +242,6 @@ fn testAtomicRmwFloat() !void { | ... | @@ -252,7 +242,6 @@ fn testAtomicRmwFloat() !void { |
| 252 | } | 242 | } |
| 253 | 243 | ||
| 254 | test "atomicrmw with ints" { | 244 | test "atomicrmw with ints" { |
| 255 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 256 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 245 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 257 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 246 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 258 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 247 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -287,7 +276,6 @@ fn testAtomicRmwInt() !void { | ... | @@ -287,7 +276,6 @@ fn testAtomicRmwInt() !void { |
| 287 | } | 276 | } |
| 288 | 277 | ||
| 289 | test "atomics with different types" { | 278 | test "atomics with different types" { |
| 290 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 291 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 279 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 292 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 280 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 293 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 281 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -318,7 +306,6 @@ fn testAtomicsWithType(comptime T: type, a: T, b: T) !void { | ... | @@ -318,7 +306,6 @@ fn testAtomicsWithType(comptime T: type, a: T, b: T) !void { |
| 318 | } | 306 | } |
| 319 | 307 | ||
| 320 | test "return @atomicStore, using it as a void value" { | 308 | test "return @atomicStore, using it as a void value" { |
| 321 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 322 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 309 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 323 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 310 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 324 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 311 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
test/behavior/bugs/13068.zig-1| ... | @@ -7,7 +7,6 @@ var list = std.ArrayList(u32).init(allocator); | ... | @@ -7,7 +7,6 @@ var list = std.ArrayList(u32).init(allocator); |
| 7 | test { | 7 | test { |
| 8 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 8 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 9 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 9 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 10 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 11 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 10 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 12 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 11 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 13 | 12 |
test/behavior/defer.zig-1| ... | @@ -108,7 +108,6 @@ test "mixing normal and error defers" { | ... | @@ -108,7 +108,6 @@ test "mixing normal and error defers" { |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | test "errdefer with payload" { | 110 | test "errdefer with payload" { |
| 111 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 112 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 111 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 113 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 112 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 114 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 113 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/eval.zig-1| ... | @@ -531,7 +531,6 @@ test "@tagName of @typeInfo" { | ... | @@ -531,7 +531,6 @@ test "@tagName of @typeInfo" { |
| 531 | } | 531 | } |
| 532 | 532 | ||
| 533 | test "static eval list init" { | 533 | test "static eval list init" { |
| 534 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 535 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 534 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 536 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 535 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 537 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 536 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
test/behavior/packed-struct.zig-3| ... | @@ -150,7 +150,6 @@ test "consistent size of packed structs" { | ... | @@ -150,7 +150,6 @@ test "consistent size of packed structs" { |
| 150 | 150 | ||
| 151 | test "correct sizeOf and offsets in packed structs" { | 151 | test "correct sizeOf and offsets in packed structs" { |
| 152 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; | 152 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; |
| 153 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 154 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 153 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 155 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 154 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 156 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 155 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -221,7 +220,6 @@ test "correct sizeOf and offsets in packed structs" { | ... | @@ -221,7 +220,6 @@ test "correct sizeOf and offsets in packed structs" { |
| 221 | 220 | ||
| 222 | test "nested packed structs" { | 221 | test "nested packed structs" { |
| 223 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; | 222 | if (builtin.zig_backend == .stage1) return error.SkipZigTest; |
| 224 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 225 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 223 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 226 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 224 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 227 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 225 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -270,7 +268,6 @@ test "nested packed structs" { | ... | @@ -270,7 +268,6 @@ test "nested packed structs" { |
| 270 | 268 | ||
| 271 | test "regular in irregular packed struct" { | 269 | test "regular in irregular packed struct" { |
| 272 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; | 270 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| 273 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; | ||
| 274 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | 271 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; |
| 275 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 272 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 276 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | 273 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
test/behavior/packed_struct_explicit_backing_int.zig-1| ... | @@ -6,7 +6,6 @@ const native_endian = builtin.cpu.arch.endian(); | ... | @@ -6,7 +6,6 @@ const native_endian = builtin.cpu.arch.endian(); |
| 6 | 6 | ||
| 7 | test "packed struct explicit backing integer" { | 7 | test "packed struct explicit backing integer" { |
| 8 | assert(builtin.zig_backend != .stage1); | 8 | assert(builtin.zig_backend != .stage1); |
| 9 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 10 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 9 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 11 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 10 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 12 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 11 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
test/behavior/pointers.zig-2| ... | @@ -157,7 +157,6 @@ test "implicit casting between C pointer and optional non-C pointer" { | ... | @@ -157,7 +157,6 @@ test "implicit casting between C pointer and optional non-C pointer" { |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | test "implicit cast error unions with non-optional to optional pointer" { | 159 | test "implicit cast error unions with non-optional to optional pointer" { |
| 160 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 161 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 160 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 162 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 161 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 163 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 162 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -403,7 +402,6 @@ test "@ptrToInt on null optional at comptime" { | ... | @@ -403,7 +402,6 @@ test "@ptrToInt on null optional at comptime" { |
| 403 | } | 402 | } |
| 404 | 403 | ||
| 405 | test "indexing array with sentinel returns correct type" { | 404 | test "indexing array with sentinel returns correct type" { |
| 406 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 407 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 405 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 408 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 406 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 409 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 407 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
test/behavior/struct.zig-2| ... | @@ -339,7 +339,6 @@ fn testPassSliceOfEmptyStructToFn(slice: []const EmptyStruct2) usize { | ... | @@ -339,7 +339,6 @@ fn testPassSliceOfEmptyStructToFn(slice: []const EmptyStruct2) usize { |
| 339 | 339 | ||
| 340 | test "self-referencing struct via array member" { | 340 | test "self-referencing struct via array member" { |
| 341 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; | 341 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| 342 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 343 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 342 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 344 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 343 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 345 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO | 344 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| ... | @@ -978,7 +977,6 @@ test "comptime struct field" { | ... | @@ -978,7 +977,6 @@ test "comptime struct field" { |
| 978 | } | 977 | } |
| 979 | 978 | ||
| 980 | test "tuple element initialized with fn call" { | 979 | test "tuple element initialized with fn call" { |
| 981 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 982 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 980 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 983 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 981 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 984 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 982 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
test/behavior/switch.zig-3| ... | @@ -420,7 +420,6 @@ test "else prong of switch on error set excludes other cases" { | ... | @@ -420,7 +420,6 @@ test "else prong of switch on error set excludes other cases" { |
| 420 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 420 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 421 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 421 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 422 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 422 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 423 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 424 | 423 | ||
| 425 | const S = struct { | 424 | const S = struct { |
| 426 | fn doTheTest() !void { | 425 | fn doTheTest() !void { |
| ... | @@ -455,7 +454,6 @@ test "switch prongs with error set cases make a new error set type for capture v | ... | @@ -455,7 +454,6 @@ test "switch prongs with error set cases make a new error set type for capture v |
| 455 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 454 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 456 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 455 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 457 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 456 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 458 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 459 | 457 | ||
| 460 | const S = struct { | 458 | const S = struct { |
| 461 | fn doTheTest() !void { | 459 | fn doTheTest() !void { |
| ... | @@ -621,7 +619,6 @@ test "switch capture copies its payload" { | ... | @@ -621,7 +619,6 @@ test "switch capture copies its payload" { |
| 621 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 619 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 622 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 620 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 623 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 621 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 624 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 625 | 622 | ||
| 626 | const S = struct { | 623 | const S = struct { |
| 627 | fn doTheTest() !void { | 624 | fn doTheTest() !void { |
test/behavior/translate_c_macros.zig-4| ... | @@ -21,7 +21,6 @@ test "casting to void with a macro" { | ... | @@ -21,7 +21,6 @@ test "casting to void with a macro" { |
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | test "initializer list expression" { | 23 | test "initializer list expression" { |
| 24 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 25 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 24 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 26 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 25 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 27 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 26 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -48,7 +47,6 @@ test "reference to a struct type" { | ... | @@ -48,7 +47,6 @@ test "reference to a struct type" { |
| 48 | test "cast negative integer to pointer" { | 47 | test "cast negative integer to pointer" { |
| 49 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 48 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 50 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 49 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 51 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 52 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 50 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 53 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 51 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 54 | 52 | ||
| ... | @@ -93,7 +91,6 @@ test "casting or calling a value with a paren-surrounded macro" { | ... | @@ -93,7 +91,6 @@ test "casting or calling a value with a paren-surrounded macro" { |
| 93 | test "nested comma operator" { | 91 | test "nested comma operator" { |
| 94 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 92 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 95 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 93 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 96 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 97 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 94 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 98 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 95 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 99 | 96 | ||
| ... | @@ -117,7 +114,6 @@ test "cast functions" { | ... | @@ -117,7 +114,6 @@ test "cast functions" { |
| 117 | test "large integer macro" { | 114 | test "large integer macro" { |
| 118 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 115 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 119 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 116 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 120 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 121 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 117 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 122 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 118 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 123 | 119 |
test/behavior/type.zig-3| ... | @@ -200,7 +200,6 @@ test "Type.ErrorUnion" { | ... | @@ -200,7 +200,6 @@ test "Type.ErrorUnion" { |
| 200 | 200 | ||
| 201 | test "Type.Opaque" { | 201 | test "Type.Opaque" { |
| 202 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 202 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 203 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 204 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 203 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 205 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 204 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 206 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 205 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -350,7 +349,6 @@ test "Type.Struct" { | ... | @@ -350,7 +349,6 @@ test "Type.Struct" { |
| 350 | } | 349 | } |
| 351 | 350 | ||
| 352 | test "Type.Enum" { | 351 | test "Type.Enum" { |
| 353 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 354 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 352 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 355 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 353 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 356 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 354 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| ... | @@ -395,7 +393,6 @@ test "Type.Enum" { | ... | @@ -395,7 +393,6 @@ test "Type.Enum" { |
| 395 | 393 | ||
| 396 | test "Type.Union" { | 394 | test "Type.Union" { |
| 397 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO | 395 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 398 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 399 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 396 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |
| 400 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 397 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 401 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 398 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
test/behavior/union.zig-1| ... | @@ -1056,7 +1056,6 @@ test "containers with single-field enums" { | ... | @@ -1056,7 +1056,6 @@ test "containers with single-field enums" { |
| 1056 | } | 1056 | } |
| 1057 | 1057 | ||
| 1058 | test "@unionInit on union with tag but no fields" { | 1058 | test "@unionInit on union with tag but no fields" { |
| 1059 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO | ||
| 1060 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO | 1059 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1061 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO | 1060 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1062 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | 1061 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO |