diff options
| author | Ralf Jung <post@ralfj.de> | 2019-11-14 10:38:15 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2019-11-14 10:42:54 +0100 |
| commit | 6c9ba97d23254045b182edbb8a4448a8c25c7a76 (patch) | |
| tree | 7c55674f45d644f179cc09bee5b3bbae2c134d1c | |
| parent | 5e380b797b22e5361a43b2b82f6278df17d89f3e (diff) | |
| download | rust-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.rs | 13 |
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! |
