From 37ed9dc95aeeffd5ca570f1be53dbb7e4bf95ef2 Mon Sep 17 00:00:00 2001 From: Jose Mendoza <56417208+StunxFS@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:00:07 -0400 Subject: [PATCH] cgen: avoid generation of empty `or` blocks for `f() or {}` (#22775) --- vlib/v/gen/c/cgen.v | 5 +++++ vlib/v/gen/c/testdata/unused_result_err.c.must_have | 2 ++ vlib/v/gen/c/testdata/unused_result_err.vv | 7 +++++++ 3 files changed, 14 insertions(+) create mode 100644 vlib/v/gen/c/testdata/unused_result_err.c.must_have create mode 100644 vlib/v/gen/c/testdata/unused_result_err.vv diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 52ba0fb97..4ee62deb7 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -7184,6 +7184,11 @@ fn (mut g Gen) gen_or_block_stmts(cvar_name string, cast_typ string, stmts []ast // Returns the type of the last stmt fn (mut g Gen) or_block(var_name string, or_block ast.OrExpr, return_type ast.Type) { cvar_name := c_name(var_name) + if or_block.kind == .block && or_block.stmts.len == 0 { + // generate nothing, block is empty + g.write(';\n${util.tabs(g.indent)}(void)${cvar_name};') + return + } mut mr_styp := g.base_type(return_type) is_none_ok := return_type == ast.ovoid_type g.writeln(';') diff --git a/vlib/v/gen/c/testdata/unused_result_err.c.must_have b/vlib/v/gen/c/testdata/unused_result_err.c.must_have new file mode 100644 index 000000000..7ac73115d --- /dev/null +++ b/vlib/v/gen/c/testdata/unused_result_err.c.must_have @@ -0,0 +1,2 @@ +_result_void _t1 = main__res(); +(void)_t1; \ No newline at end of file diff --git a/vlib/v/gen/c/testdata/unused_result_err.vv b/vlib/v/gen/c/testdata/unused_result_err.vv new file mode 100644 index 000000000..57071423b --- /dev/null +++ b/vlib/v/gen/c/testdata/unused_result_err.vv @@ -0,0 +1,7 @@ +module main + +fn res() ! {} + +fn main() { + res() or {} +} -- 2.39.5