| author | |
| committer | |
| log | 41914321b4593e3ed246cadda705e1076ab670d7 |
| tree | a321302412dd377fbcc95a9ff364243cb369c47a |
| parent | f0c94d95dde320ba5e7509dc1499b33e54a1c951 |
| signature |
3 files changed, 26 insertions(+), 3 deletions(-)
src/ir.cpp+3-3| ... | ... | @@ -25807,7 +25807,7 @@ static IrInstruction *ir_analyze_instruction_atomic_store(IrAnalyze *ira, IrInst |
| 25807 | 25807 | if (type_is_invalid(ptr_inst->value.type)) |
| 25808 | 25808 | return ira->codegen->invalid_instruction; |
| 25809 | 25809 | |
| 25810 | ZigType *ptr_type = get_pointer_to_type(ira->codegen, operand_type, true); | |
| 25810 | ZigType *ptr_type = get_pointer_to_type(ira->codegen, operand_type, false); | |
| 25811 | 25811 | IrInstruction *casted_ptr = ir_implicit_cast(ira, ptr_inst, ptr_type); |
| 25812 | 25812 | if (type_is_invalid(casted_ptr->value.type)) |
| 25813 | 25813 | return ira->codegen->invalid_instruction; |
| ... | ... | @@ -25837,8 +25837,8 @@ static IrInstruction *ir_analyze_instruction_atomic_store(IrAnalyze *ira, IrInst |
| 25837 | 25837 | } |
| 25838 | 25838 | |
| 25839 | 25839 | if (instr_is_comptime(casted_value) && instr_is_comptime(casted_ptr)) { |
| 25840 | IrInstruction *result = ir_get_deref(ira, &instruction->base, casted_ptr, nullptr); | |
| 25841 | ir_assert(result->value.type != nullptr, &instruction->base); | |
| 25840 | IrInstruction *result = ir_analyze_store_ptr(ira, &instruction->base, casted_ptr, value, false); | |
| 25841 | result->value.type = ira->codegen->builtin_types.entry_void; | |
| 25842 | 25842 | return result; |
| 25843 | 25843 | } |
| 25844 | 25844 |
test/compile_errors.zig+10| ... | ... | @@ -2,6 +2,16 @@ const tests = @import("tests.zig"); |
| 2 | 2 | const builtin = @import("builtin"); |
| 3 | 3 | |
| 4 | 4 | pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 5 | cases.add( | |
| 6 | "atomic orderings of atomicStore Acquire or AcqRel", | |
| 7 | \\export fn entry() void { | |
| 8 | \\ var x: u32 = 0; | |
| 9 | \\ @atomicStore(u32, &x, 1, .Acquire); | |
| 10 | \\} | |
| 11 | , | |
| 12 | "tmp.zig:3:30: error: @atomicStore atomic ordering must not be Acquire or AcqRel", | |
| 13 | ); | |
| 14 | ||
| 5 | 15 | cases.add( |
| 6 | 16 | "missing const in slice with nested array type", |
| 7 | 17 | \\const Geo3DTex2D = struct { vertices: [][2]f32 }; |
test/stage1/behavior/atomics.zig+13| ... | ... | @@ -131,3 +131,16 @@ test "atomic store" { |
| 131 | 131 | @atomicStore(u32, &x, 12345678, .SeqCst); |
| 132 | 132 | expect(@atomicLoad(u32, &x, .SeqCst) == 12345678); |
| 133 | 133 | } |
| 134 | ||
| 135 | test "atomic store comptime" { | |
| 136 | comptime testAtomicStore(); | |
| 137 | testAtomicStore(); | |
| 138 | } | |
| 139 | ||
| 140 | fn testAtomicStore() void { | |
| 141 | var x: u32 = 0; | |
| 142 | @atomicStore(u32, &x, 1, .SeqCst); | |
| 143 | expect(@atomicLoad(u32, &x, .SeqCst) == 1); | |
| 144 | @atomicStore(u32, &x, 12345678, .SeqCst); | |
| 145 | expect(@atomicLoad(u32, &x, .SeqCst) == 12345678); | |
| 146 | } | |
| \ No newline at end of file |