diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-09-23 14:54:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-23 14:54:13 +0200 |
| commit | f8dec3d0549beddcae22bc14c49a0778b50334ea (patch) | |
| tree | 5de71a053909c4eda609603fb6094f83aabc4c49 | |
| parent | 049ba0c6f01fee9978acaf9caefdc3bfcd5ddc9b (diff) | |
| parent | 731113b8eeef206ff27b77cb9f0dc49e2762a1b4 (diff) | |
| download | rust-f8dec3d0549beddcae22bc14c49a0778b50334ea.tar.gz rust-f8dec3d0549beddcae22bc14c49a0778b50334ea.zip | |
Rollup merge of #77047 - RalfJung:miri-dealloc, r=oli-obk
Miri: more informative deallocation error messages Make sure we show the affected AllocId. r? @oli-obk
| -rw-r--r-- | compiler/rustc_mir/src/interpret/memory.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/compiler/rustc_mir/src/interpret/memory.rs b/compiler/rustc_mir/src/interpret/memory.rs index 86e242c67d5..f3e373813ca 100644 --- a/compiler/rustc_mir/src/interpret/memory.rs +++ b/compiler/rustc_mir/src/interpret/memory.rs @@ -285,9 +285,11 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> { None => { // Deallocating global memory -- always an error return Err(match self.tcx.get_global_alloc(ptr.alloc_id) { - Some(GlobalAlloc::Function(..)) => err_ub_format!("deallocating a function"), + Some(GlobalAlloc::Function(..)) => { + err_ub_format!("deallocating {}, which is a function", ptr.alloc_id) + } Some(GlobalAlloc::Static(..) | GlobalAlloc::Memory(..)) => { - err_ub_format!("deallocating static memory") + err_ub_format!("deallocating {}, which is static memory", ptr.alloc_id) } None => err_ub!(PointerUseAfterFree(ptr.alloc_id)), } @@ -297,7 +299,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> { if alloc_kind != kind { throw_ub_format!( - "deallocating {} memory using {} deallocation operation", + "deallocating {}, which is {} memory, using {} deallocation operation", + ptr.alloc_id, alloc_kind, kind ); @@ -305,7 +308,8 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> Memory<'mir, 'tcx, M> { if let Some((size, align)) = old_size_and_align { if size != alloc.size || align != alloc.align { throw_ub_format!( - "incorrect layout on deallocation: allocation has size {} and alignment {}, but gave size {} and alignment {}", + "incorrect layout on deallocation: {} has size {} and alignment {}, but gave size {} and alignment {}", + ptr.alloc_id, alloc.size.bytes(), alloc.align.bytes(), size.bytes(), |
