diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index fd66e2cb32..3aa3b87baa 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -6191,6 +6191,9 @@ fn (mut g Gen) write_init_function() { } g.writeln('void _vinit_caller() {') g.writeln('\tstatic bool once = false; if (once) {return;} once = true;') + if g.nr_closures > 0 { + g.writeln('\t__closure_init(); // vinit_caller()') + } g.writeln('\t_vinit(0,0);') g.writeln('}') diff --git a/vlib/v/gen/c/cmain.v b/vlib/v/gen/c/cmain.v index 7cc5572a6d..d262a1ee05 100644 --- a/vlib/v/gen/c/cmain.v +++ b/vlib/v/gen/c/cmain.v @@ -98,7 +98,7 @@ fn (mut g Gen) gen_c_main_function_header() { g.writeln('\tg_main_argc = ___argc;') g.writeln('\tg_main_argv = ___argv;') if g.nr_closures > 0 { - g.writeln('__closure_init();') + g.writeln('\t__closure_init(); // main()') } } diff --git a/vlib/v/gen/c/testdata/closure_shared_lib.c.must_have b/vlib/v/gen/c/testdata/closure_shared_lib.c.must_have new file mode 100644 index 0000000000..79f72ec52d --- /dev/null +++ b/vlib/v/gen/c/testdata/closure_shared_lib.c.must_have @@ -0,0 +1,2 @@ +__closure_init(); // vinit_caller() +__closure_init(); // main() \ No newline at end of file diff --git a/vlib/v/gen/c/testdata/closure_shared_lib.vv b/vlib/v/gen/c/testdata/closure_shared_lib.vv new file mode 100644 index 0000000000..1ce1c6a433 --- /dev/null +++ b/vlib/v/gen/c/testdata/closure_shared_lib.vv @@ -0,0 +1,8 @@ +// vtest vflags: -shared +@[export: 'foo'] +fn show_foo(s &char) { + my_fn := fn [s] () { + _ = s + } + my_fn() +}