From 264a295beda3853e845b538fb83c7c312a0eb7f0 Mon Sep 17 00:00:00 2001 From: Tom French Date: Mon, 11 Sep 2023 18:54:20 +0100 Subject: [PATCH] fix: display correct range for `u128` in `OverflowingAssignment` error --- crates/noirc_frontend/src/hir/type_check/stmt.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/noirc_frontend/src/hir/type_check/stmt.rs b/crates/noirc_frontend/src/hir/type_check/stmt.rs index 0407f79049f..f997b048753 100644 --- a/crates/noirc_frontend/src/hir/type_check/stmt.rs +++ b/crates/noirc_frontend/src/hir/type_check/stmt.rs @@ -283,12 +283,14 @@ impl<'interner> TypeChecker<'interner> { HirExpression::Literal(HirLiteral::Integer(value)) => { let v = value.to_u128(); if let Type::Integer(_, bit_count) = annotated_type { - let max = 1 << bit_count; + // Avoid overflow in bitshift + let max: u128 = + if *bit_count == 128 { u128::MAX } else { (1 << bit_count) - 1 }; if v >= max { self.errors.push(TypeCheckError::OverflowingAssignment { expr: value, ty: annotated_type.clone(), - range: format!("0..={}", max - 1), + range: format!("0..={}", max), span, }); };