about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2019-11-14 10:38:15 +0100
committerRalf Jung <post@ralfj.de>2019-11-14 10:42:54 +0100
commit6c9ba97d23254045b182edbb8a4448a8c25c7a76 (patch)
tree7c55674f45d644f179cc09bee5b3bbae2c134d1c
parent5e380b797b22e5361a43b2b82f6278df17d89f3e (diff)
downloadrust-6c9ba97d23254045b182edbb8a4448a8c25c7a76.tar.gz
rust-6c9ba97d23254045b182edbb8a4448a8c25c7a76.zip
miri: helper methods for max values of machine's usize/isize
-rw-r--r--src/librustc/mir/interpret/pointer.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/librustc/mir/interpret/pointer.rs b/src/librustc/mir/interpret/pointer.rs
index 1bb4d9ea4d6..7c77b2c0711 100644
--- a/src/librustc/mir/interpret/pointer.rs
+++ b/src/librustc/mir/interpret/pointer.rs
@@ -1,4 +1,5 @@
 use std::fmt::{self, Display};
+use std::convert::TryFrom;
 
 use crate::mir;
 use crate::ty::layout::{self, HasDataLayout, Size};
@@ -40,6 +41,18 @@ pub trait PointerArithmetic: layout::HasDataLayout {
         self.data_layout().pointer_size
     }
 
+    #[inline]
+    fn usize_max(&self) -> u64 {
+        let max_usize_plus_1 = 1u128 << self.pointer_size().bits();
+        u64::try_from(max_usize_plus_1-1).unwrap()
+    }
+
+    #[inline]
+    fn isize_max(&self) -> i64 {
+        let max_isize_plus_1 = 1u128 << (self.pointer_size().bits()-1);
+        i64::try_from(max_isize_plus_1-1).unwrap()
+    }
+
     /// Helper function: truncate given value-"overflowed flag" pair to pointer size and
     /// update "overflowed flag" if there was an overflow.
     /// This should be called by all the other methods before returning!