aboutsummaryrefslogtreecommitdiff
path: root/src/check_type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/check_type.cpp')
-rw-r--r--src/check_type.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/check_type.cpp b/src/check_type.cpp
index e7eafad17..790cec789 100644
--- a/src/check_type.cpp
+++ b/src/check_type.cpp
@@ -1044,8 +1044,18 @@ void check_bit_set_type(CheckerContext *c, Type *type, Type *named_type, Ast *no
bits = 8*type_size_of(type->BitSet.underlying);
}
- if (upper - lower >= bits) {
- error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", bits, (upper-lower+1));
+ switch (be->op.kind) {
+ case Token_Ellipsis:
+ if (upper - lower >= bits) {
+ error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", bits, (upper-lower+1));
+ }
+ break;
+ case Token_RangeHalf:
+ if (upper - lower > bits) {
+ error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", bits, (upper-lower));
+ }
+ upper -= 1;
+ break;
}
type->BitSet.elem = t;
type->BitSet.lower = lower;