From 15ca64d81d9a543d8616d3721c8b8dd59eb9f271 Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Mon, 20 Jul 2020 21:04:22 +0100 Subject: [PATCH] tests: rename pointer_arithmetic_should_be_checked.vv -> unsafe_required.vv (#5897) --- vlib/v/checker/tests/unsafe_required.out | 34 ++++++++++++++++++++++++ vlib/v/checker/tests/unsafe_required.vv | 25 +++++++++++++++++ vlib/v/tests/unsafe_test.v | 8 +++--- 3 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 vlib/v/checker/tests/unsafe_required.out create mode 100644 vlib/v/checker/tests/unsafe_required.vv 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() {