Box CastTarget
within PassMode
.
Because `PassMode::Cast` is by far the largest variant, but is relatively rare. This requires making `PassMode` not impl `Copy`, and `Clone` is no longer necessary. This causes lots of sigil adjusting, but nothing very notable.
This commit is contained in:
parent
263c426bfd
commit
e4bf113027
11 changed files with 57 additions and 57 deletions
|
@ -218,7 +218,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
|||
// Padding must be fully equal.
|
||||
let pad_compat = || caller_abi.pad == callee_abi.pad;
|
||||
// When comparing the PassMode, we have to be smart about comparing the attributes.
|
||||
let arg_attr_compat = |a1: ArgAttributes, a2: ArgAttributes| {
|
||||
let arg_attr_compat = |a1: &ArgAttributes, a2: &ArgAttributes| {
|
||||
// There's only one regular attribute that matters for the call ABI: InReg.
|
||||
// Everything else is things like noalias, dereferencable, nonnull, ...
|
||||
// (This also applies to pointee_size, pointee_align.)
|
||||
|
@ -233,7 +233,7 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
|||
}
|
||||
return true;
|
||||
};
|
||||
let mode_compat = || match (caller_abi.mode, callee_abi.mode) {
|
||||
let mode_compat = || match (&caller_abi.mode, &callee_abi.mode) {
|
||||
(PassMode::Ignore, PassMode::Ignore) => true,
|
||||
(PassMode::Direct(a1), PassMode::Direct(a2)) => arg_attr_compat(a1, a2),
|
||||
(PassMode::Pair(a1, b1), PassMode::Pair(a2, b2)) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue