diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 6414ae73ee..e3e22cc3f7 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -2147,6 +2147,10 @@ pub fn (mut p Parser) name_expr() ast.Expr { return map_init } return p.struct_init(false) // short_syntax: false + } else if p.peek_tok.kind == .lcbr && p.inside_if && lit0_is_capital && !known_var + && language == .v { + // if a == Foo{} {...} + return p.struct_init(false) } else if p.peek_tok.kind == .dot && (lit0_is_capital && !known_var && language == .v) { // T.name if p.is_generic_name() { diff --git a/vlib/v/tests/if_expr_with_struct_init_test.v b/vlib/v/tests/if_expr_with_struct_init_test.v new file mode 100644 index 0000000000..a8814a2819 --- /dev/null +++ b/vlib/v/tests/if_expr_with_struct_init_test.v @@ -0,0 +1,11 @@ +struct Foo { + bar int +} + +fn test_if_expr_with_struct_init() { + a := Foo{} + if a == Foo{} { + println(true) + assert true + } +}