Miri: make size/align_of_val work for dangling raw ptrs
This commit is contained in:
parent
158f8d034b
commit
95aed7ab3b
2 changed files with 5 additions and 3 deletions
|
@ -141,9 +141,11 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
}
|
}
|
||||||
|
|
||||||
sym::min_align_of_val | sym::size_of_val => {
|
sym::min_align_of_val | sym::size_of_val => {
|
||||||
let place = self.deref_operand(args[0])?;
|
// Avoid `deref_operand` -- this is not a deref, the ptr does not have to be
|
||||||
|
// dereferencable!
|
||||||
|
let place = self.ref_to_mplace(self.read_immediate(args[0])?)?;
|
||||||
let (size, align) = self
|
let (size, align) = self
|
||||||
.size_and_align_of(place.meta, place.layout)?
|
.size_and_align_of_mplace(place)?
|
||||||
.ok_or_else(|| err_unsup_format!("`extern type` does not have known layout"))?;
|
.ok_or_else(|| err_unsup_format!("`extern type` does not have known layout"))?;
|
||||||
|
|
||||||
let result = match intrinsic_name {
|
let result = match intrinsic_name {
|
||||||
|
|
|
@ -391,7 +391,7 @@ impl<'rt, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> ValidityVisitor<'rt, 'mir, '
|
||||||
}
|
}
|
||||||
// Make sure this is dereferenceable and all.
|
// Make sure this is dereferenceable and all.
|
||||||
let size_and_align = try_validation!(
|
let size_and_align = try_validation!(
|
||||||
self.ecx.size_and_align_of(place.meta, place.layout),
|
self.ecx.size_and_align_of_mplace(place),
|
||||||
self.path,
|
self.path,
|
||||||
err_ub!(InvalidMeta(msg)) => { "invalid {} metadata: {}", kind, msg },
|
err_ub!(InvalidMeta(msg)) => { "invalid {} metadata: {}", kind, msg },
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue