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_type.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/check_type.cpp') 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; -- cgit v1.2.3