From 68a83abcd62210fac764806445fd28296d722c26 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 24 Aug 2024 11:44:59 +0100 Subject: [PATCH] #4119 Add error when doing `{.A | .B}` instead of `{.A, .B}` with a suggestion to do surround it in parentheses to make it clear it is intended --- src/check_expr.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 24cc8868a..8e16bd0e9 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -10055,6 +10055,22 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * is_constant = o->mode == Addressing_Constant; } + if (elem->kind == Ast_BinaryExpr) { + switch (elem->BinaryExpr.op.kind) { + case Token_Or: + { + gbString x = expr_to_string(elem->BinaryExpr.left); + gbString y = expr_to_string(elem->BinaryExpr.right); + gbString e = expr_to_string(elem); + error(elem, "Was the following intended? '%s, %s'; if not, surround the expression with parentheses '(%s)'", x, y, e); + gb_string_free(e); + gb_string_free(y); + gb_string_free(x); + } + break; + } + } + check_assignment(c, o, t->BitSet.elem, str_lit("bit_set literal")); if (o->mode == Addressing_Constant) { i64 lower = t->BitSet.lower;