1 use super::BackendTypes
;
2 use rustc_middle
::mir
::interpret
::{ConstAllocation, Scalar}
;
5 pub trait ConstMethods
<'tcx
>: BackendTypes
{
6 // Constant constructors
7 fn const_null(&self, t
: Self::Type
) -> Self::Value
;
8 /// Generate an uninitialized value (matching uninitialized memory in MIR).
9 /// Whether memory is initialized or not is tracked byte-for-byte.
10 fn const_undef(&self, t
: Self::Type
) -> Self::Value
;
11 /// Generate a fake value. Poison always affects the entire value, even if just a single byte is
12 /// poison. This can only be used in codepaths that are already UB, i.e., UB-free Rust code
13 /// (including code that e.g. copies uninit memory with `MaybeUninit`) can never encounter a
15 fn const_poison(&self, t
: Self::Type
) -> Self::Value
;
16 fn const_int(&self, t
: Self::Type
, i
: i64) -> Self::Value
;
17 fn const_uint(&self, t
: Self::Type
, i
: u64) -> Self::Value
;
18 fn const_uint_big(&self, t
: Self::Type
, u
: u128
) -> Self::Value
;
19 fn const_bool(&self, val
: bool
) -> Self::Value
;
20 fn const_i16(&self, i
: i16) -> Self::Value
;
21 fn const_i32(&self, i
: i32) -> Self::Value
;
22 fn const_i8(&self, i
: i8) -> Self::Value
;
23 fn const_u32(&self, i
: u32) -> Self::Value
;
24 fn const_u64(&self, i
: u64) -> Self::Value
;
25 fn const_u128(&self, i
: u128
) -> Self::Value
;
26 fn const_usize(&self, i
: u64) -> Self::Value
;
27 fn const_u8(&self, i
: u8) -> Self::Value
;
28 fn const_real(&self, t
: Self::Type
, val
: f64) -> Self::Value
;
30 fn const_str(&self, s
: &str) -> (Self::Value
, Self::Value
);
31 fn const_struct(&self, elts
: &[Self::Value
], packed
: bool
) -> Self::Value
;
33 fn const_to_opt_uint(&self, v
: Self::Value
) -> Option
<u64>;
34 fn const_to_opt_u128(&self, v
: Self::Value
, sign_ext
: bool
) -> Option
<u128
>;
36 fn const_data_from_alloc(&self, alloc
: ConstAllocation
<'tcx
>) -> Self::Value
;
38 fn scalar_to_backend(&self, cv
: Scalar
, layout
: abi
::Scalar
, llty
: Self::Type
) -> Self::Value
;
40 fn const_bitcast(&self, val
: Self::Value
, ty
: Self::Type
) -> Self::Value
;
41 fn const_ptr_byte_offset(&self, val
: Self::Value
, offset
: abi
::Size
) -> Self::Value
;