| 1 | fn assert(ok: bool) void { |
| 2 | if (!ok) unreachable; |
| 3 | } |
| 4 | |
| 5 | pub fn main() void { |
| 6 | var opt_val: ?i32 = 10; |
| 7 | var null_val: ?i32 = null; |
| 8 | |
| 9 | var val1: i32 = opt_val.?; |
| 10 | _ = &val1; |
| 11 | const val1_1: i32 = opt_val.?; |
| 12 | var ptr_val1 = &(opt_val.?); |
| 13 | _ = &ptr_val1; |
| 14 | const ptr_val1_1 = &(opt_val.?); |
| 15 | |
| 16 | var val2: i32 = null_val orelse 20; |
| 17 | const val2_2: i32 = null_val orelse 20; |
| 18 | |
| 19 | var value: i32 = 20; |
| 20 | var ptr_val2 = &(null_val orelse value); |
| 21 | _ = &ptr_val2; |
| 22 | |
| 23 | const val3 = opt_val orelse 30; |
| 24 | var val3_var = opt_val orelse 30; |
| 25 | _ = &val3_var; |
| 26 | |
| 27 | assert(val1 == 10); |
| 28 | assert(val1_1 == 10); |
| 29 | assert(ptr_val1.* == 10); |
| 30 | assert(ptr_val1_1.* == 10); |
| 31 | |
| 32 | assert(val2 == 20); |
| 33 | assert(val2_2 == 20); |
| 34 | assert(ptr_val2.* == 20); |
| 35 | |
| 36 | assert(val3 == 10); |
| 37 | assert(val3_var == 10); |
| 38 | |
| 39 | (null_val orelse val2) = 1234; |
| 40 | assert(val2 == 1234); |
| 41 | |
| 42 | (opt_val orelse val2) = 5678; |
| 43 | assert(opt_val.? == 5678); |
| 44 | } |
| 45 | |
| 46 | // run |
| 47 | // backend=selfhosted,llvm |
| 48 | // target=x86_64-linux,x86_64-macos |
| 49 | // |