aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-08-24 11:44:59 +0100
committergingerBill <bill@gingerbill.org>2024-08-24 11:44:59 +0100
commit68a83abcd62210fac764806445fd28296d722c26 (patch)
tree4a2e1f21182686dbe7a551ba39bb10aec65e5d8d /src/check_expr.cpp
parent4458ca4585666b1e2bc9438b6a2402a1ad93bbc2 (diff)
#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
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp16
1 files changed, 16 insertions, 0 deletions
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;