Soteria_rust_lib.Layoutmodule BV = Soteria_rust_lib.Typed.BVinclude module type of struct include Layout_common endmodule Tag_layout = Layout_common.Tag_layoutLayout of enum tags in memory. Note tags are distinct from discriminants: a discriminant is user specified and is what Rvalue.Discriminant returns, whereas a tag is specific to variant layouts, and may be of smaller size than the discriminant, or not be encoded at all if it is the untagged variant of a niche-optimised enum.
module Fields_shape = Layout_common.Fields_shapeWe use a custom type for the member offsets for layouts; this allows us to use a more efficient representation for arrays T; N, that doesn't require N offsets.
type t = Layout_common.t = {size : Soteria_rust_lib.Typed.T.sint Typed.t;align : Soteria_rust_lib.Typed.T.nonzero Typed.t;uninhabited : bool;fields : Fields_shape.t;}val pp :
Ppx_deriving_runtime.Format.formatter ->
t ->
Ppx_deriving_runtime.unitval show : t -> Ppx_deriving_runtime.stringval iter_vars :
t ->
((Soteria.Bv_values.Svalue.Var.t * 'a Typed.ty) -> unit) ->
unitmodule Session : sig ... endval dst_kind : Charon.Types.ty -> meta_kindIf this is a DST type with a slice tail, return the type of the slice's element.
val mk :
size:Soteria_rust_lib.Typed.T.sint Typed.t ->
align:Soteria_rust_lib.Typed.T.nonzero Typed.t ->
?uninhabited:bool ->
?fields:Fields_shape.t ->
unit ->
tval mk_concrete :
size:int ->
align:int ->
?uninhabited:bool ->
?fields:Fields_shape.t ->
unit ->
tval not_impl_layout : string -> Charon.Types.ty -> 'a Rustsymex.tval layout_of :
Charon.Types.ty ->
(t, [> `InvalidLayout of Charon.Types.ty ], 'f) Rustsymex.Result.tval translate_layout :
Charon.Types.ty ->
Charon.Types.layout ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
((t, [> `InvalidLayout of Charon.Types.ty ], 'f) Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval compute_size :
Charon.Types.ty ->
int option ->
Soteria_rust_lib.Typed.T.sint Typed.tval compute_align :
Charon.Types.ty ->
int option ->
Soteria_rust_lib.Typed.T.nonzero Typed.tval compute_arbitrary_layout :
?fst_size:Soteria_rust_lib.Typed.T.sint Typed.t ->
?fst_align:Soteria_rust_lib.Typed.T.nonzero Soteria.Bv_values.Typed.t ->
?variant:Charon.Types.VariantId.id ->
Charon.Types.ty ->
Charon.Types.ty list ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
((t, [> `InvalidLayout of Charon.Types.ty ], 'f) Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval compute_enum_layout :
Charon.Types.ty ->
Charon.Types.variant list ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
((t, [> `InvalidLayout of Charon.Types.ty ], 'f) Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval compute_union_layout :
Charon.Types.ty ->
Charon.Types.ty list ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
((t, [> `InvalidLayout of Charon.Types.ty ], 'f) Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval resolve_trait_ty :
Charon.Types.trait_ref ->
Charon.Types.trait_item_name ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
((Charon.Types.ty, [> `InvalidLayout of Charon.Types.ty ], 'f)
Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval normalise :
Charon.Types.ty ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
((Charon.Types.ty, [> `InvalidLayout of Charon.Types.ty ], 'a)
Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tNormalise a type, by substituting any generics with the current generic environment, and resolving the trait type if needed.
val size_of :
Charon.Types.ty ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
(([> Soteria_rust_lib.Typed.T.sint ] Typed.t,
[> `InvalidLayout of Charon.Types.ty ],
'a)
Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval align_of :
Charon.Types.ty ->
Soteria_rust_lib__Rustsymex.MonadState.t ->
(([> Soteria_rust_lib.Typed.T.nonzero ] Typed.t,
[> `InvalidLayout of Charon.Types.ty ],
'a)
Soteria.Symex.Compo_res.t
* Soteria_rust_lib__Rustsymex.MonadState.t)
Soteria__Symex.Make(Soteria.Bv_values.Bv_solver.Z3_solver).tval min_value_z : Charon.Types.literal_type -> Soteria.Soteria_std.Z.tval max_value_z : Charon.Types.literal_type -> Soteria.Soteria_std.Z.tval is_abi_compatible :
Charon.Types.ty ->
Charon.Types.ty ->
([> Soteria__Bv_values__Typed.sbool ] Typed.t,
[> `InvalidLayout of Charon.Types.ty ],
'a)
Rustsymex.Result.tis_abi_compatible ty1 ty2 is true if a function expecting an argument of type ty1 can be called with an argument of type ty2.
The full specification is available at: https://doc.rust-lang.org/nightly/std/primitive.fn.html#abi-compatibility