v2 / vlib / v / gen / c / freestanding_i386_test.v
32 lines · 28 sloc · 1.06 KB · da7e85cbec7fd73d9d26db033850648c49120c9f
Raw
1module c
2
3import os
4
5const test_vexe = os.quoted_path(@VEXE)
6
7fn test_freestanding_i386_c_output_uses_int80_and_static_memdup_decl() {
8 workdir := os.join_path(os.vtmp_dir(), 'v_freestanding_i386_${os.getpid()}')
9 os.mkdir_all(workdir)!
10 defer {
11 os.rmdir_all(workdir) or {}
12 }
13 main_v := os.join_path(workdir, 'main.v')
14 out_c := os.join_path(workdir, 'main.c')
15 os.write_file(main_v, "module main
16
17@[export: 'kmain']
18pub fn kmain() {
19 for {}
20}
21")!
22 cmd := '${test_vexe} -cc gcc -gc none -no-skip-unused -freestanding -no-std -is_o -m32 -o ${os.quoted_path(out_c)} ${os.quoted_path(main_v)}'
23 res := os.execute(cmd)
24 assert res.exit_code == 0, '${cmd}\n${res.output}'
25 generated := os.read_file(out_c)!
26 assert generated.contains('VV_LOC voidptr builtin__memdup(voidptr src, isize size);')
27 assert !generated.contains('\nvoidptr builtin__memdup(voidptr src, isize size);\n')
28 assert generated.contains('int $0x80')
29 assert !generated.contains('"syscall \\n\\t"')
30 assert !generated.contains('mov %[arg4], %%r10')
31 assert !generated.contains('typedef long unsigned int size_t;')
32}
33