diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-08-03 16:35:38 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-08-03 16:35:38 +0800 |
commit | 85bc7996313b4df50cbb227ae25c0721f7f5eadd (patch) | |
tree | 99c8f5f7f6cb492275571bda55a5c10d31629662 /tools/standalone_miri/miri.cpp | |
parent | 7230c60043a094c4f3fe151e0a38d11ca29e500c (diff) | |
download | mrust-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.cpp | 4 |
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 |