gingerBill 3 years ago
parent
commit
236b08cb49
1 changed files with 4 additions and 5 deletions
  1. 4 5
      src/check_type.cpp

+ 4 - 5
src/check_type.cpp

@@ -922,20 +922,19 @@ void check_bit_set_type(CheckerContext *c, Type *type, Type *named_type, Ast *no
 		i64 lower = big_int_to_i64(&i);
 		i64 lower = big_int_to_i64(&i);
 		i64 upper = big_int_to_i64(&j);
 		i64 upper = big_int_to_i64(&j);
 		
 		
-		bool lower_changed = false;
+		i64 actual_lower = lower;
 		i64 bits = MAX_BITS;
 		i64 bits = MAX_BITS;
 		if (type->BitSet.underlying != nullptr) {
 		if (type->BitSet.underlying != nullptr) {
 			bits = 8*type_size_of(type->BitSet.underlying);
 			bits = 8*type_size_of(type->BitSet.underlying);
 			
 			
 			if (lower > 0) {
 			if (lower > 0) {
-				lower = 0;
-				lower_changed = true;
+				actual_lower = 0;
 			} else if (lower < 0) {
 			} else if (lower < 0) {
 				error(bs->elem, "bit_set does not allow a negative lower bound (%lld) when an underlying type is set", lower);
 				error(bs->elem, "bit_set does not allow a negative lower bound (%lld) when an underlying type is set", lower);
 			}
 			}
 		}
 		}
 
 
-		i64 bits_required = upper-lower;
+		i64 bits_required = upper-actual_lower;
 		switch (be->op.kind) {
 		switch (be->op.kind) {
 		case Token_Ellipsis:
 		case Token_Ellipsis:
 		case Token_RangeFull:
 		case Token_RangeFull:
@@ -959,7 +958,7 @@ void check_bit_set_type(CheckerContext *c, Type *type, Type *named_type, Ast *no
 			break;
 			break;
 		}
 		}
 		if (!is_valid) {
 		if (!is_valid) {
-			if (lower_changed) {
+			if (actual_lower != lower) {
 				error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required (internal the lower changed was changed 0 as an underlying type was set)", bits, bits_required);
 				error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required (internal the lower changed was changed 0 as an underlying type was set)", bits, bits_required);
 			} else {
 			} else {
 				error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", bits, bits_required);
 				error(bs->elem, "bit_set range is greater than %lld bits, %lld bits are required", bits, bits_required);