diff --git a/vlib/v/gen/c/if.v b/vlib/v/gen/c/if.v index b6c0328309..530a44ef29 100644 --- a/vlib/v/gen/c/if.v +++ b/vlib/v/gen/c/if.v @@ -285,7 +285,7 @@ fn (mut g Gen) if_expr(node ast.IfExpr) { g.writeln(', !${var_name}.is_error) {') } } - if short_opt || branch.cond.vars[0].name != '_' { + if short_opt || branch.cond.vars.len > 1 || branch.cond.vars[0].name != '_' { base_type := g.base_type(branch.cond.expr_type) if short_opt { cond_var_name := if branch.cond.vars[0].name == '_' { @@ -316,6 +316,9 @@ fn (mut g Gen) if_expr(node ast.IfExpr) { if sym.info is ast.MultiReturn { if sym.info.types.len == branch.cond.vars.len { for vi, var in branch.cond.vars { + if var.name == '_' { + continue + } var_typ := g.typ(sym.info.types[vi]) left_var_name := c_name(var.name) if is_auto_heap { diff --git a/vlib/v/gen/c/testdata/multi_return_ignored_if_guard.out b/vlib/v/gen/c/testdata/multi_return_ignored_if_guard.out new file mode 100644 index 0000000000..03bd217732 --- /dev/null +++ b/vlib/v/gen/c/testdata/multi_return_ignored_if_guard.out @@ -0,0 +1,32 @@ +1 +2 +1 +2 +1 +2 +1 +2 +1 +2 +3 +1 +2 +1 +3 +1 +2 +3 +2 +3 +1 +2 +3 +1 +2 +1 +3 +1 +2 +3 +2 +3 diff --git a/vlib/v/gen/c/testdata/multi_return_ignored_if_guard.vv b/vlib/v/gen/c/testdata/multi_return_ignored_if_guard.vv new file mode 100644 index 0000000000..574ba94d02 --- /dev/null +++ b/vlib/v/gen/c/testdata/multi_return_ignored_if_guard.vv @@ -0,0 +1,98 @@ +fn f1() !(int, int) { + return 1, 2 +} + +fn f2() ?(int, int) { + return 1, 2 +} + +fn f3() !(int, int, int) { + return 1, 2, 3 +} + +fn f4() ?(int, int, int) { + return 1, 2, 3 +} + +fn main() { + if l, r := f1() { + println(l) + println(r) + } + if l, _ := f1() { + println(l) + } + if _, r := f1() { + println(r) + } + if _, _ := f1() { + } + if l, r := f2() { + println(l) + println(r) + } + if l, _ := f2() { + println(l) + } + if _, r := f2() { + println(r) + } + if _, _ := f2() { + } + if x, y, z := f3() { + println(x) + println(y) + println(z) + } + if x, y, _ := f3() { + println(x) + println(y) + } + if x, _, z := f3() { + println(x) + println(z) + } + if x, _, _ := f3() { + println(x) + } + if _, y, z := f3() { + println(y) + println(z) + } + if _, y, _ := f3() { + println(y) + } + if _, _, z := f3() { + println(z) + } + if _, _, _ := f3() { + } + if x, y, z := f4() { + println(x) + println(y) + println(z) + } + if x, y, _ := f4() { + println(x) + println(y) + } + if x, _, z := f4() { + println(x) + println(z) + } + if x, _, _ := f4() { + println(x) + } + if _, y, z := f4() { + println(y) + println(z) + } + if _, y, _ := f4() { + println(y) + } + if _, _, z := f4() { + println(z) + } + if _, _, _ := f4() { + } +}