summaryrefslogtreecommitdiff
path: root/tools/standalone_miri/miri.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-08-03 16:35:38 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-08-03 16:35:38 +0800
commit85bc7996313b4df50cbb227ae25c0721f7f5eadd (patch)
tree99c8f5f7f6cb492275571bda55a5c10d31629662 /tools/standalone_miri/miri.cpp
parent7230c60043a094c4f3fe151e0a38d11ca29e500c (diff)
downloadmrust-85bc7996313b4df50cbb227ae25c0721f7f5eadd.tar.gz
Standalone miri - Fix handling of `str` deref
Diffstat (limited to 'tools/standalone_miri/miri.cpp')
-rw-r--r--tools/standalone_miri/miri.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/tools/standalone_miri/miri.cpp b/tools/standalone_miri/miri.cpp
index e6b56192..8fe941d9 100644
--- a/tools/standalone_miri/miri.cpp
+++ b/tools/standalone_miri/miri.cpp
@@ -371,7 +371,9 @@ struct MirHelpers
size_t slice_inner_size;
if( ty.has_slice_meta(slice_inner_size) ) {
- size = (ty.get_wrapper() == nullptr ? ty.get_size() : 0) + meta_val->read_usize(0) * slice_inner_size;
+ // Slice metadata, add the base size (if it's a struct) to the variable size
+ // - `get_wrapper` will return non-null for `[T]`, special-case `str`
+ size = (ty != RawType::Str && ty.get_wrapper() == nullptr ? ty.get_size() : 0) + meta_val->read_usize(0) * slice_inner_size;
}
//else if( ty == RawType::TraitObject) {
// // NOTE: Getting the size from the allocation is semi-valid, as you can't sub-slice trait objects