diff --git a/vlib/v/checker/tests/unsafe_required.out b/vlib/v/checker/tests/unsafe_required.out new file mode 100644 index 0000000000..43dea90719 --- /dev/null +++ b/vlib/v/checker/tests/unsafe_required.out @@ -0,0 +1,34 @@ +vlib/v/checker/tests/unsafe_required.v:4:6: error: pointer arithmetic is only allowed in `unsafe` blocks + 2 | v := 5 + 3 | mut p := &v + 4 | p++ + | ~~ + 5 | p += 2 + 6 | _ := v +vlib/v/checker/tests/unsafe_required.v:5:7: error: pointer arithmetic is only allowed in `unsafe` blocks + 3 | mut p := &v + 4 | p++ + 5 | p += 2 + | ~~ + 6 | _ := v + 7 | } +vlib/v/checker/tests/unsafe_required.v:11:14: error: pointer arithmetic is only allowed in `unsafe` blocks + 9 | fn test_ptr_infix() { + 10 | v := 4 + 11 | mut q := &v - 1 + | ^ + 12 | q = q + 3 + 13 | _ := q +vlib/v/checker/tests/unsafe_required.v:12:9: error: pointer arithmetic is only allowed in `unsafe` blocks + 10 | v := 4 + 11 | mut q := &v - 1 + 12 | q = q + 3 + | ^ + 13 | _ := q + 14 | _ := v +vlib/v/checker/tests/unsafe_required.v:24:7: error: method `S1.f` must be called from an `unsafe` block + 22 | fn test_funcs() { + 23 | s := S1{} + 24 | s.f() + | ~~~ + 25 | } diff --git a/vlib/v/checker/tests/unsafe_required.vv b/vlib/v/checker/tests/unsafe_required.vv new file mode 100644 index 0000000000..917a2f0fec --- /dev/null +++ b/vlib/v/checker/tests/unsafe_required.vv @@ -0,0 +1,25 @@ +fn test_ptr_assign() { + v := 5 + mut p := &v + p++ + p += 2 + _ := v +} + +fn test_ptr_infix() { + v := 4 + mut q := &v - 1 + q = q + 3 + _ := q + _ := v +} + +struct S1 {} + +[unsafe_fn] +fn (s S1) f(){} + +fn test_funcs() { + s := S1{} + s.f() +} diff --git a/vlib/v/tests/unsafe_test.v b/vlib/v/tests/unsafe_test.v index 19443958eb..dcc37d1237 100644 --- a/vlib/v/tests/unsafe_test.v +++ b/vlib/v/tests/unsafe_test.v @@ -6,10 +6,10 @@ fn test_ptr_assign() { unsafe { (*p) += 2 } unsafe { p += 2 } // p now points to v[3] unsafe { *p = 31 } - assert v[0] == 6 - assert v[1] == 8 - assert v[2] == 77 - assert v[3] == 31 + assert v[0] == 6 + assert v[1] == 8 + assert v[2] == 77 + assert v[3] == 31 } fn test_ptr_infix() {