From ada32cd4102166d457e1ab8437e93527ed5a5ee9 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 26 Feb 2026 08:38:32 +0300 Subject: [PATCH] checker: fix byte/u8 array param type checking and var-fn name clash (fixes #26492) --- .../tests/use_byte_instead_of_u8_array_param_err.out | 5 +++++ .../tests/use_byte_instead_of_u8_array_param_err.vv | 3 +++ .../tests/use_byte_instead_of_u8_array_type_err.out | 6 ++++++ .../tests/use_byte_instead_of_u8_array_type_err.vv | 5 +++++ vlib/v/parser/parse_type.v | 8 ++++++++ vlib/v/tests/clash_var_fn_name_test.v | 2 +- 6 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.out create mode 100644 vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.vv create mode 100644 vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.out create mode 100644 vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.vv diff --git a/vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.out b/vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.out new file mode 100644 index 000000000..ca0d564ae --- /dev/null +++ b/vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.vv:1:20: error: byte is deprecated, use u8 instead + 1 | fn takes_bytes(_ []byte) {} + | ~~~~ + 2 | + 3 | fn main() {} diff --git a/vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.vv b/vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.vv new file mode 100644 index 000000000..3d2ac5781 --- /dev/null +++ b/vlib/v/checker/tests/use_byte_instead_of_u8_array_param_err.vv @@ -0,0 +1,3 @@ +fn takes_bytes(_ []byte) {} + +fn main() {} diff --git a/vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.out b/vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.out new file mode 100644 index 000000000..c9a8fa1c5 --- /dev/null +++ b/vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.vv:2:8: error: byte is deprecated, use u8 instead + 1 | struct Test { + 2 | bar []byte + | ~~~~ + 3 | } + 4 | diff --git a/vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.vv b/vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.vv new file mode 100644 index 000000000..dc5e700cf --- /dev/null +++ b/vlib/v/checker/tests/use_byte_instead_of_u8_array_type_err.vv @@ -0,0 +1,5 @@ +struct Test { + bar []byte +} + +fn main() {} diff --git a/vlib/v/parser/parse_type.v b/vlib/v/parser/parse_type.v index ffcfa9708..62bdb6d84 100644 --- a/vlib/v/parser/parse_type.v +++ b/vlib/v/parser/parse_type.v @@ -119,6 +119,10 @@ fn (mut p Parser) parse_array_type(expecting token.Kind, is_option bool) ast.Typ defer { p.fixed_array_dim-- } + elem_type_pos := p.tok.pos() + if p.tok.kind == .name && p.tok.lit == 'byte' { + p.error_with_pos('byte is deprecated, use u8 instead', elem_type_pos) + } elem_type := p.parse_type() if elem_type.idx() == 0 { // error is handled by parse_type @@ -141,6 +145,10 @@ fn (mut p Parser) parse_array_type(expecting token.Kind, is_option bool) ast.Typ } // array p.check(.rsbr) + elem_type_pos := p.tok.pos() + if p.tok.kind == .name && p.tok.lit == 'byte' { + p.error_with_pos('byte is deprecated, use u8 instead', elem_type_pos) + } elem_type := p.parse_type() if elem_type.idx() == 0 { // error is set in parse_type diff --git a/vlib/v/tests/clash_var_fn_name_test.v b/vlib/v/tests/clash_var_fn_name_test.v index 0b78d32b0..52877f69e 100644 --- a/vlib/v/tests/clash_var_fn_name_test.v +++ b/vlib/v/tests/clash_var_fn_name_test.v @@ -1,4 +1,4 @@ -fn func(rune_bytes []byte) string { +fn func(rune_bytes []u8) string { return rune_bytes.str() } -- 2.39.5