From 7e0197c1b85ec3843f28943e1423f93b27fe864f Mon Sep 17 00:00:00 2001 From: yuyi Date: Sun, 14 Jun 2020 16:54:10 +0800 Subject: [PATCH] cgen: fix `in` empty array --- vlib/v/gen/cgen.v | 16 +++++++++------- vlib/v/tests/in_expression_test.v | 4 ++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index a2a45c44c9..adadbd2d15 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -1861,13 +1861,15 @@ fn (mut g Gen) infix_expr(node ast.InfixExpr) { if right_sym.kind == .array { match node.right { ast.ArrayInit { - // `a in [1,2,3]` optimization => `a == 1 || a == 2 || a == 3` - // avoids an allocation - // g.write('/*in opt*/') - g.write('(') - g.in_optimization(node.left, it) - g.write(')') - return + if it.exprs.len > 0 { + // `a in [1,2,3]` optimization => `a == 1 || a == 2 || a == 3` + // avoids an allocation + // g.write('/*in opt*/') + g.write('(') + g.in_optimization(node.left, it) + g.write(')') + return + } } else {} } diff --git a/vlib/v/tests/in_expression_test.v b/vlib/v/tests/in_expression_test.v index b173a46f81..ffe3f33d0f 100644 --- a/vlib/v/tests/in_expression_test.v +++ b/vlib/v/tests/in_expression_test.v @@ -214,3 +214,7 @@ fn test_optimized_in_expression_with_string() { a = 'ab' in ['ab', 'bc'] && false assert a == false } + +fn test_in_array_init() { + assert 1 !in []int{} +}