From 16c9bf2f2d8fb7a18c2222d0507d41762c4d07ee Mon Sep 17 00:00:00 2001 From: kbkpbot Date: Thu, 18 Sep 2025 01:26:13 +0800 Subject: [PATCH] vlib,tests: fix array's field initialisation with signed integers (preparation for future 64bit int) (#25324) --- vlib/v/checker/containers.v | 10 ++++++++-- vlib/v/gen/c/testdata/translated/sym.c | 2 +- .../c/testdata/translated/translated_module_actual.v | 2 +- vlib/v/gen/c/testdata/translated_module.c.must_have | 4 ++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/vlib/v/checker/containers.v b/vlib/v/checker/containers.v index 22be6ae94..03de39e12 100644 --- a/vlib/v/checker/containers.v +++ b/vlib/v/checker/containers.v @@ -328,8 +328,14 @@ fn (mut c Checker) check_array_init_default_expr(mut node ast.ArrayInit) { fn (mut c Checker) check_array_init_para_type(para string, mut expr ast.Expr, pos token.Pos) { sym := c.table.final_sym(c.unwrap_generic(c.expr(mut expr))) - if sym.kind !in [.int, .int_literal] { - c.error('array ${para} needs to be an int', pos) + $if new_int ? && (arm64 || amd64 || rv64 || s390x || ppc64le || loongarch64) { + if sym.kind !in [.int, .int_literal, .i64, .i32, .i16, .i8] { + c.error('array ${para} needs to be an int/i64/i32/i16/i8', pos) + } + } $else { + if sym.kind !in [.int, .int_literal, .i32, .i16, .i8] { + c.error('array ${para} needs to be an int/i32/i16/i8', pos) + } } if expr is ast.IntegerLiteral { lit := expr as ast.IntegerLiteral diff --git a/vlib/v/gen/c/testdata/translated/sym.c b/vlib/v/gen/c/testdata/translated/sym.c index 7b76a0c83..b6220782c 100644 --- a/vlib/v/gen/c/testdata/translated/sym.c +++ b/vlib/v/gen/c/testdata/translated/sym.c @@ -2,6 +2,6 @@ struct my_struct { bool active; } my_instance = { true }; -int ExternalSymbol(char *hello) { +i32 ExternalSymbol(char *hello) { return *hello; } diff --git a/vlib/v/gen/c/testdata/translated/translated_module_actual.v b/vlib/v/gen/c/testdata/translated/translated_module_actual.v index dafbe060c..6b105080e 100644 --- a/vlib/v/gen/c/testdata/translated/translated_module_actual.v +++ b/vlib/v/gen/c/testdata/translated/translated_module_actual.v @@ -4,7 +4,7 @@ module translated #include "@VMODROOT/sym.c" @[c: 'ExternalSymbol'] -pub fn external_symbol(&char) int +pub fn external_symbol(&char) i32 struct C.my_struct { active bool diff --git a/vlib/v/gen/c/testdata/translated_module.c.must_have b/vlib/v/gen/c/testdata/translated_module.c.must_have index bcd1214f2..338be64fb 100644 --- a/vlib/v/gen/c/testdata/translated_module.c.must_have +++ b/vlib/v/gen/c/testdata/translated_module.c.must_have @@ -1,3 +1,3 @@ -int ExternalSymbol(char* ); -int a = ExternalSymbol("hello"); +i32 ExternalSymbol(char* ); +i32 a = ExternalSymbol("hello"); extern struct my_struct my_instance; -- 2.39.5