pub enum PassMode {
Ignore,
Direct(ArgAttributes),
Pair(ArgAttributes, ArgAttributes),
Cast {
pad_i32_count: u8,
cast: CastTarget,
},
Indirect {
attrs: ArgAttributes,
meta_attrs: Option<ArgAttributes>,
on_stack: bool,
},
}Expand description
How a function argument should be passed in to the target function.
The pass mode is determined by the platform’s calling convention and the argument’s type layout. The same Rust type may use different pass modes on different targets or when register availability changes.
Note: for the Rust ABI, pass modes may not correspond to any valid C calling convention (e.g., using more return registers than the platform C ABI allows). Further processing may be needed depending on the target.
Variants§
Ignore
Ignore the argument.
The argument is either uninhabited or a ZST (zero-sized type).
Direct(ArgAttributes)
Pass the argument directly in a single register.
Used for primitive types and small values that fit in one register.
Pair(ArgAttributes, ArgAttributes)
Pass the argument directly in two registers.
Used for types represented as a pair of values (e.g., a fat pointer consisting of a data pointer and a length/vtable pointer).
Cast
Pass the argument after reinterpreting it as a different register layout.
Used for aggregates (structs, tuples) that the platform ABI passes in
registers. The argument’s bytes are reinterpreted as the register
sequence described by CastTarget. See its documentation for details.
Indirect
Pass the argument indirectly via a pointer.
The caller places the value in memory and passes a pointer to it.
When on_stack is true, the value is placed at a fixed stack offset
rather than passed as a regular pointer argument.
Fields
attrs: ArgAttributesmeta_attrs: Option<ArgAttributes>Attributes for the metadata pointer (vtable or length) of unsized arguments.
Only present for unsized types (e.g., dyn Trait, [T]).
Trait Implementations§
impl Eq for PassMode
impl StructuralPartialEq for PassMode
Auto Trait Implementations§
impl DynSend for PassMode
impl DynSync for PassMode
impl Freeze for PassMode
impl RefUnwindSafe for PassMode
impl Send for PassMode
impl Sync for PassMode
impl Unpin for PassMode
impl UnsafeUnpin for PassMode
impl UnwindSafe for PassMode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 80 bytes
Size for each variant:
Ignore: 0 bytesDirect: 40 bytesPair: 72 bytesCast: 80 bytesIndirect: 80 bytes