Rollup merge of #97395 - RalfJung:call-abi, r=oli-obk
Miri call ABI check: ensure type size+align stay the same We should almost certainly not accept calls where caller and callee disagree on the size or alignment of the type. The checks we do *almost* imply that, except that `ScalarPair` types can have `repr(align)` and thus differ in size/align even when they are pairs of the same primitive type. r? ``@oli-obk``
This commit is contained in:
commit
12ba87b996
1 changed files with 8 additions and 1 deletions
|
@ -185,7 +185,14 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
// No question
|
// No question
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// Compare layout
|
if caller_abi.layout.size != callee_abi.layout.size
|
||||||
|
|| caller_abi.layout.align.abi != callee_abi.layout.align.abi
|
||||||
|
{
|
||||||
|
// This cannot go well...
|
||||||
|
// FIXME: What about unsized types?
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// The rest *should* be okay, but we are extra conservative.
|
||||||
match (caller_abi.layout.abi, callee_abi.layout.abi) {
|
match (caller_abi.layout.abi, callee_abi.layout.abi) {
|
||||||
// Different valid ranges are okay (once we enforce validity,
|
// Different valid ranges are okay (once we enforce validity,
|
||||||
// that will take care to make it UB to leave the range, just
|
// that will take care to make it UB to leave the range, just
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue