Struct rustc_target::abi::TargetDataLayout

source ·
pub struct TargetDataLayout {
Show 17 fields pub endian: Endian, pub i1_align: AbiAndPrefAlign, pub i8_align: AbiAndPrefAlign, pub i16_align: AbiAndPrefAlign, pub i32_align: AbiAndPrefAlign, pub i64_align: AbiAndPrefAlign, pub i128_align: AbiAndPrefAlign, pub f16_align: AbiAndPrefAlign, pub f32_align: AbiAndPrefAlign, pub f64_align: AbiAndPrefAlign, pub f128_align: AbiAndPrefAlign, pub pointer_size: Size, pub pointer_align: AbiAndPrefAlign, pub aggregate_align: AbiAndPrefAlign, pub vector_align: Vec<(Size, AbiAndPrefAlign)>, pub instruction_address_space: AddressSpace, pub c_enum_min_size: Integer,
}
Expand description

Parsed Data layout for a target, which contains everything needed to compute layouts.

Fields§

§endian: Endian§i1_align: AbiAndPrefAlign§i8_align: AbiAndPrefAlign§i16_align: AbiAndPrefAlign§i32_align: AbiAndPrefAlign§i64_align: AbiAndPrefAlign§i128_align: AbiAndPrefAlign§f16_align: AbiAndPrefAlign§f32_align: AbiAndPrefAlign§f64_align: AbiAndPrefAlign§f128_align: AbiAndPrefAlign§pointer_size: Size§pointer_align: AbiAndPrefAlign§aggregate_align: AbiAndPrefAlign§vector_align: Vec<(Size, AbiAndPrefAlign)>

Alignments for vector types.

§instruction_address_space: AddressSpace§c_enum_min_size: Integer

Minimum size of #[repr(C)] enums (default c_int::BITS, usually 32) Note: This isn’t in LLVM’s data layout string, it is short_enum so the only valid spec for LLVM is c_int::BITS or 8

Implementations§

source§

impl TargetDataLayout

source

pub fn parse_from_llvm_datalayout_string<'a>( input: &'a str ) -> Result<TargetDataLayout, TargetDataLayoutErrors<'a>>

Parse data layout from an llvm data layout string

This function doesn’t fill c_enum_min_size and it will always be I32 since it can not be determined from llvm string.

source

pub fn obj_size_bound(&self) -> u64

Returns exclusive upper bound on object size.

The theoretical maximum object size is defined as the maximum positive isize value. This ensures that the offset semantics remain well-defined by allowing it to correctly index every address within an object along with one byte past the end, along with allowing isize to store the difference between any two pointers into an object.

The upper bound on 64-bit currently needs to be lower because LLVM uses a 64-bit integer to represent object size in bits. It would need to be 1 << 61 to account for this, but is currently conservatively bounded to 1 << 47 as that is enough to cover the current usable address space on 64-bit ARMv8 and x86_64.

source

pub fn ptr_sized_integer(&self) -> Integer

source

pub fn vector_align(&self, vec_size: Size) -> AbiAndPrefAlign

Trait Implementations§

source§

impl Debug for TargetDataLayout

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl Default for TargetDataLayout

source§

fn default() -> TargetDataLayout

Creates an instance of TargetDataLayout.

source§

impl HasDataLayout for TargetDataLayout

source§

impl PartialEq for TargetDataLayout

source§

fn eq(&self, other: &TargetDataLayout) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for TargetDataLayout

source§

impl StructuralPartialEq for TargetDataLayout

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<'a, T> Captures<'a> for T
where T: ?Sized,

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: 64 bytes