diff options
| author | Ralf Jung <post@ralfj.de> | 2022-07-03 15:46:22 -0400 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2022-07-05 08:08:24 -0400 |
| commit | 46956f76ca6f02e64c372d334be586650e396963 (patch) | |
| tree | 3f0ae687ff83bef7ef45ffe88437ad060bf55b9f /compiler/rustc_middle/src/mir/interpret/pointer.rs | |
| parent | 4045ce641a9eede71cc12031a2cd71692b273890 (diff) | |
| download | rust-46956f76ca6f02e64c372d334be586650e396963.tar.gz rust-46956f76ca6f02e64c372d334be586650e396963.zip | |
adjust dangling-int-ptr error message
Diffstat (limited to 'compiler/rustc_middle/src/mir/interpret/pointer.rs')
| -rw-r--r-- | compiler/rustc_middle/src/mir/interpret/pointer.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/compiler/rustc_middle/src/mir/interpret/pointer.rs b/compiler/rustc_middle/src/mir/interpret/pointer.rs index 81d744107fd..d4cdf45d186 100644 --- a/compiler/rustc_middle/src/mir/interpret/pointer.rs +++ b/compiler/rustc_middle/src/mir/interpret/pointer.rs @@ -181,7 +181,17 @@ impl<Tag: Provenance> fmt::Debug for Pointer<Option<Tag>> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self.provenance { Some(tag) => Provenance::fmt(&Pointer::new(tag, self.offset), f), - None => write!(f, "{:#x}", self.offset.bytes()), + None => write!(f, "{:#x}[noalloc]", self.offset.bytes()), + } + } +} + +impl<Tag: Provenance> fmt::Display for Pointer<Option<Tag>> { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + if self.provenance.is_none() && self.offset.bytes() == 0 { + write!(f, "null pointer") + } else { + fmt::Debug::fmt(self, f) } } } @@ -227,8 +237,13 @@ impl<Tag> Pointer<Option<Tag>> { impl<Tag> Pointer<Option<Tag>> { #[inline(always)] + pub fn from_addr(addr: u64) -> Self { + Pointer { provenance: None, offset: Size::from_bytes(addr) } + } + + #[inline(always)] pub fn null() -> Self { - Pointer { provenance: None, offset: Size::ZERO } + Pointer::from_addr(0) } } |
