From 430fea80b409cc540724da20eda10827385a9b05 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 14 Apr 2026 12:45:36 +0300 Subject: [PATCH] cgen: Use freestanding mode, but encounter incompatible size_t redefinition error by C (fixes #23228) --- vlib/v/gen/c/freestanding_size_t_test.v | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 vlib/v/gen/c/freestanding_size_t_test.v diff --git a/vlib/v/gen/c/freestanding_size_t_test.v b/vlib/v/gen/c/freestanding_size_t_test.v new file mode 100644 index 000000000..7e3aeddca --- /dev/null +++ b/vlib/v/gen/c/freestanding_size_t_test.v @@ -0,0 +1,29 @@ +module c + +import os +import v.ast +import v.checker +import v.parser +import v.pref + +fn generate_freestanding_output(main_src string) string { + mut table := ast.new_table() + mut pref_ := pref.new_preferences() + pref_.is_bare = true + builtin_src := 'module builtin\n\nasm amd64 {\n\t.globl _start\n\t_start:\n\tret\n}\n' + mut builtin_file := parser.parse_text(builtin_src, os.join_path('/virtual', 'vlib', 'builtin', + 'linux_bare', 'linux_syscalls.v'), mut table, .skip_comments, pref_) + mut main_file := parser.parse_text(main_src, os.join_path('/virtual', 'main.v'), mut table, + .skip_comments, pref_) + mut chk := checker.new_checker(table, pref_) + chk.check(mut builtin_file) + chk.check(mut main_file) + result := gen([builtin_file, main_file], mut table, pref_) + return result.res_builder.bytestr() +} + +fn test_freestanding_c_output_does_not_redeclare_size_t() { + generated := generate_freestanding_output('module main\n\nfn main() {}\n') + assert generated.contains('') + assert !generated.contains('typedef long unsigned int size_t;') +} -- 2.39.5