From 222941727f2b094449838135c3157120e0176e58 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 28 May 2019 12:45:20 +0100 Subject: Add `..<` operator for ranges; Add extra checking for bit set assignments --- src/check_expr.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 928f3f063..274ed9fc2 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6383,6 +6383,17 @@ ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast *node, Type } check_assignment(c, o, t->BitSet.elem, str_lit("bit_set literal")); + if (o->mode == Addressing_Constant) { + i64 lower = t->BitSet.lower; + i64 upper = t->BitSet.upper; + i64 v = exact_value_to_i64(o->value); + if (lower <= v && v <= upper) { + // okay + } else { + error(elem, "Bit field value out of bounds, %lld not in the range %lld .. %lld", v, lower, upper); + continue; + } + } } } break; -- cgit v1.2.3