aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2019-05-28 12:45:20 +0100
committergingerBill <bill@gingerbill.org>2019-05-28 12:45:20 +0100
commit222941727f2b094449838135c3157120e0176e58 (patch)
tree6e3051341f1873873596594abfe02693aad4e6fc /src/check_expr.cpp
parent5697d6df7466ef5f4e676f391c104ef165cadb6b (diff)
Add `..<` operator for ranges; Add extra checking for bit set assignments
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp11
1 files changed, 11 insertions, 0 deletions
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;