diff --git a/charon/Cargo.lock b/charon/Cargo.lock index ed1c21cd2..9c331e142 100644 --- a/charon/Cargo.lock +++ b/charon/Cargo.lock @@ -788,7 +788,7 @@ checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hax-adt-into" version = "0.3.1" -source = "git+https://github.com/cryspen/hax?branch=main#cf49ec3927580f5ac95803034f369e4d2c588031" +source = "git+https://github.com/AeneasVerif/hax?branch=main#6cee56ab9e24ff1e1ffa96d43bca306381414ecd" dependencies = [ "itertools 0.11.0", "proc-macro2", @@ -799,7 +799,7 @@ dependencies = [ [[package]] name = "hax-frontend-exporter" version = "0.3.1" -source = "git+https://github.com/cryspen/hax?branch=main#cf49ec3927580f5ac95803034f369e4d2c588031" +source = "git+https://github.com/AeneasVerif/hax?branch=main#6cee56ab9e24ff1e1ffa96d43bca306381414ecd" dependencies = [ "extension-traits", "hax-adt-into", @@ -816,7 +816,7 @@ dependencies = [ [[package]] name = "hax-frontend-exporter-options" version = "0.3.1" -source = "git+https://github.com/cryspen/hax?branch=main#cf49ec3927580f5ac95803034f369e4d2c588031" +source = "git+https://github.com/AeneasVerif/hax?branch=main#6cee56ab9e24ff1e1ffa96d43bca306381414ecd" dependencies = [ "hax-adt-into", "schemars", diff --git a/charon/Cargo.toml b/charon/Cargo.toml index 20b6ac660..9341bb452 100644 --- a/charon/Cargo.toml +++ b/charon/Cargo.toml @@ -86,7 +86,7 @@ tracing = { version = "0.1", features = ["max_level_trace"] } wait-timeout = { version = "0.2.0", optional = true } which = "7.0" -hax-frontend-exporter = { git = "https://github.com/cryspen/hax", branch = "main", optional = true } +hax-frontend-exporter = { git = "https://github.com/AeneasVerif/hax", branch = "main", optional = true } # hax-frontend-exporter = { path = "../../hax/frontend/exporter", optional = true } macros = { path = "./macros" } diff --git a/charon/rust-toolchain b/charon/rust-toolchain index fdb25b2d1..9a9be676a 100644 --- a/charon/rust-toolchain +++ b/charon/rust-toolchain @@ -1,3 +1,3 @@ [toolchain] -channel = "nightly-2025-05-26" +channel = "nightly-2025-06-30" components = [ "rustc-dev", "llvm-tools-preview", "rust-src" ] diff --git a/charon/src/bin/charon-driver/driver.rs b/charon/src/bin/charon-driver/driver.rs index cd7610465..e24e0d920 100644 --- a/charon/src/bin/charon-driver/driver.rs +++ b/charon/src/bin/charon-driver/driver.rs @@ -154,8 +154,11 @@ impl<'a> Callbacks for CharonCallbacks<'a> { rustc_hir::def_id::DEF_ID_DEBUG .swap(&(def_id_debug as fn(_, &mut fmt::Formatter<'_>) -> _)); - let transform_ctx = - translate_crate::translate(&self.options, tcx, compiler.sess.sysroot.clone()); + let transform_ctx = translate_crate::translate( + &self.options, + tcx, + compiler.sess.opts.sysroot.path().to_owned(), + ); self.transform_ctx = Some(transform_ctx); Compilation::Continue } diff --git a/charon/src/bin/charon-driver/translate/translate_closures.rs b/charon/src/bin/charon-driver/translate/translate_closures.rs index 3355c1007..e267661a9 100644 --- a/charon/src/bin/charon-driver/translate/translate_closures.rs +++ b/charon/src/bin/charon-driver/translate/translate_closures.rs @@ -618,6 +618,9 @@ impl ItemTransCtx<'_, '_> { let sized_trait = self.get_lang_item(rustc_hir::LangItem::Sized); let sized_trait = self.register_trait_decl_id(span, &sized_trait); + let meta_sized_trait = self.get_lang_item(rustc_hir::LangItem::MetaSized); + let meta_sized_trait = self.register_trait_decl_id(span, &meta_sized_trait); + let tuple_trait = self.get_lang_item(rustc_hir::LangItem::Tuple); let tuple_trait = self.register_trait_decl_id(span, &tuple_trait); @@ -649,6 +652,7 @@ impl ItemTransCtx<'_, '_> { match target_kind { ClosureKind::FnOnce => [ + builtin_tref(meta_sized_trait, input.clone()), builtin_tref(sized_trait, input.clone()), builtin_tref(tuple_trait, input.clone()), builtin_tref(sized_trait, output.clone()), @@ -669,6 +673,7 @@ impl ItemTransCtx<'_, '_> { trait_decl_ref: RegionBinder::empty(parent_predicate), }; [ + builtin_tref(meta_sized_trait, input.clone()), parent_trait_ref, builtin_tref(sized_trait, input.clone()), builtin_tref(tuple_trait, input.clone()), diff --git a/charon/src/bin/charon-driver/translate/translate_types.rs b/charon/src/bin/charon-driver/translate/translate_types.rs index 065f6a3eb..d69be1656 100644 --- a/charon/src/bin/charon-driver/translate/translate_types.rs +++ b/charon/src/bin/charon-driver/translate/translate_types.rs @@ -536,13 +536,11 @@ impl<'tcx, 'ctx> ItemTransCtx<'tcx, 'ctx> { untagged_variant: translate_variant_id(*untagged_variant), }, }; - offsets - .get(r_abi::FieldIdx::from_usize(*tag_field)) - .map(|s| DiscriminantLayout { - offset: r_abi::Size::bytes(*s), - tag_ty, - encoding, - }) + offsets.get(*tag_field).map(|s| DiscriminantLayout { + offset: r_abi::Size::bytes(*s), + tag_ty, + encoding, + }) } r_abi::Variants::Single { .. } | r_abi::Variants::Empty => None, }; diff --git a/charon/src/transform/hide_marker_traits.rs b/charon/src/transform/hide_marker_traits.rs index 1b939a36a..7221727cf 100644 --- a/charon/src/transform/hide_marker_traits.rs +++ b/charon/src/transform/hide_marker_traits.rs @@ -61,6 +61,9 @@ impl TransformPass for Transform { // remove. let exclude: &[_] = if ctx.options.hide_marker_traits { &[ + "core::marker::Destruct", + "core::marker::PointeeSized", + "core::marker::MetaSized", "core::marker::Sized", "core::marker::Tuple", "core::marker::Send", diff --git a/charon/tests/cargo/dependencies.out b/charon/tests/cargo/dependencies.out index 5d54c5d12..38776157f 100644 --- a/charon/tests/cargo/dependencies.out +++ b/charon/tests/cargo/dependencies.out @@ -6,21 +6,32 @@ pub opaque type Arguments<'a> where 'a : 'a, +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -80,9 +91,10 @@ fn {impl FnOnce<(u32)> for closure}::call_once(@1: closure, @2: (u32)) -> u32 // Full name: test_cargo_dependencies::main::silly_incr::{impl FnOnce<(u32)> for closure} impl FnOnce<(u32)> for closure { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized type Output = u32 fn call_once = {impl FnOnce<(u32)> for closure}::call_once } diff --git a/charon/tests/cargo/toml.out b/charon/tests/cargo/toml.out index fe570aa66..c1f8809d5 100644 --- a/charon/tests/cargo/toml.out +++ b/charon/tests/cargo/toml.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] diff --git a/charon/tests/crate_data.rs b/charon/tests/crate_data.rs index 388f72fdb..3a5028d47 100644 --- a/charon/tests/crate_data.rs +++ b/charon/tests/crate_data.rs @@ -179,6 +179,7 @@ fn predicate_origins() -> anyhow::Result<()> { ( "test_crate::Trait", vec![ + (WhereClauseOnTrait, "MetaSized"), (WhereClauseOnTrait, "Clone"), (WhereClauseOnTrait, "Sized"), (WhereClauseOnTrait, "Copy"), @@ -306,11 +307,7 @@ fn attributes() -> anyhow::Result<()> { unknown_attrs(&crate_data.global_decls[1].item_meta), vec!["clippy::foo"] ); - // We don't parse that attribute ourselves, we let rustc do it. - assert_eq!( - unknown_attrs(&crate_data.fun_decls[0].item_meta), - vec!["inline(never)"] - ); + assert!(unknown_attrs(&crate_data.fun_decls[0].item_meta).is_empty()); assert_eq!( crate_data.fun_decls[0].item_meta.attr_info.inline, Some(InlineAttr::Never) @@ -588,7 +585,7 @@ fn declaration_groups() -> anyhow::Result<()> { // There are two function items: one for `foo`, one for the initializer of `Trait::FOO`. assert_eq!(crate_data.fun_decls.iter().count(), 2); let decl_groups = crate_data.ordered_decls.unwrap(); - assert_eq!(decl_groups.len(), 5); + assert_eq!(decl_groups.len(), 6); Ok(()) } @@ -615,7 +612,7 @@ fn source_text() -> anyhow::Result<()> { let sources = crate_data .all_items() - .map(|i| i.item_meta().source_text.as_ref().unwrap()) + .filter_map(|i| i.item_meta().source_text.as_ref()) .collect_vec(); assert_eq!(sources[0], "struct Foo { x: usize }"); assert_eq!( diff --git a/charon/tests/ui/arrays.out b/charon/tests/ui/arrays.out index ee6bb7935..4810eacaa 100644 --- a/charon/tests/ui/arrays.out +++ b/charon/tests/ui/arrays.out @@ -1,15 +1,25 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::ops::index::Index #[lang_item("index")] pub trait Index { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized + parent_clause2 : [@TraitClause2]: MetaSized fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx, Self_Output>[Self] } // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::array::{impl Index for Array}::index pub fn {impl Index for Array}::index<'_0, T, I, Clause2_Output, const N : usize>(@1: &'_0 (Array), @2: I) -> &'_0 (Clause2_Output) @@ -25,42 +35,49 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Index, I, Clause2_Output>, { + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause2::parent_clause2 fn index<'_0> = {impl Index for Array}::index<'_0_0, T, I, Clause2_Output, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] } // Full name: core::ops::index::IndexMut #[lang_item("index_mut")] -pub trait IndexMut +pub trait IndexMut { - parent_clause0 : [@TraitClause0]: Index - fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx, Self_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Index + parent_clause2 : [@TraitClause2]: MetaSized + fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx, Self_Clause1_Output>[Self] } -// Full name: core::array::{impl IndexMut for Array}::index_mut -pub fn {impl IndexMut for Array}::index_mut<'_0, T, I, Clause2_Clause0_Output, const N : usize>(@1: &'_0 mut (Array), @2: I) -> &'_0 mut (Clause2_Clause0_Output) +// Full name: core::array::{impl IndexMut for Array}::index_mut +pub fn {impl IndexMut for Array}::index_mut<'_0, T, I, Clause2_Clause1_Output, const N : usize>(@1: &'_0 mut (Array), @2: I) -> &'_0 mut (Clause2_Clause1_Output) where [@TraitClause0]: Sized, [@TraitClause1]: Sized, - [@TraitClause2]: IndexMut, I, Clause2_Clause0_Output>, + [@TraitClause2]: IndexMut, I, Clause2_Clause1_Output>, -// Full name: core::array::{impl IndexMut for Array} -impl IndexMut for Array +// Full name: core::array::{impl IndexMut for Array} +impl IndexMut for Array where [@TraitClause0]: Sized, [@TraitClause1]: Sized, - [@TraitClause2]: IndexMut, I, Clause2_Clause0_Output>, + [@TraitClause2]: IndexMut, I, Clause2_Clause1_Output>, { - parent_clause0 = {impl Index for Array}[@TraitClause0, @TraitClause1, @TraitClause2::parent_clause0] - fn index_mut<'_0> = {impl IndexMut for Array}::index_mut<'_0_0, T, I, Clause2_Clause0_Output, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] + parent_clause0 = MetaSized> + parent_clause1 = {impl Index for Array}[@TraitClause0, @TraitClause1, @TraitClause2::parent_clause1] + parent_clause2 = @TraitClause1::parent_clause0 + fn index_mut<'_0> = {impl IndexMut for Array}::index_mut<'_0_0, T, I, Clause2_Clause1_Output, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] } pub fn core::ops::index::Index::index<'_0, Self, Idx, Clause0_Output>(@1: &'_0 (Self), @2: Idx) -> &'_0 (Clause0_Output) where [@TraitClause0]: Index, -pub fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx, Clause0_Clause0_Output>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (Clause0_Clause0_Output) +pub fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx, Clause0_Clause1_Output>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (Clause0_Clause1_Output) where - [@TraitClause0]: IndexMut, + [@TraitClause0]: IndexMut, // Full name: core::ops::range::Range #[lang_item("Range")] @@ -84,12 +101,18 @@ where // Full name: core::slice::index::private_slice_index::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::slice::index::SliceIndex #[lang_item("SliceIndex")] pub trait SliceIndex { - parent_clause0 : [@TraitClause0]: Sealed + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sealed + parent_clause2 : [@TraitClause2]: MetaSized + parent_clause3 : [@TraitClause3]: MetaSized fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T, Self_Output>[Self] fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T, Self_Output>[Self] fn get_unchecked = core::slice::index::SliceIndex::get_unchecked[Self] @@ -112,6 +135,9 @@ where [@TraitClause1]: Sized, [@TraitClause2]: SliceIndex, Clause2_Output>, { + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause2::parent_clause3 fn index<'_0> = {impl Index for Slice}::index<'_0_0, T, I, Clause2_Output>[@TraitClause0, @TraitClause1, @TraitClause2] } @@ -129,12 +155,16 @@ where [@TraitClause1]: Sized, [@TraitClause2]: SliceIndex, Clause2_Output>, { - parent_clause0 = {impl Index for Slice}[@TraitClause0, @TraitClause1, @TraitClause2] + parent_clause0 = MetaSized> + parent_clause1 = {impl Index for Slice}[@TraitClause0, @TraitClause1, @TraitClause2] + parent_clause2 = @TraitClause1::parent_clause0 fn index_mut<'_0> = {impl IndexMut for Slice}::index_mut<'_0_0, T, I, Clause2_Output>[@TraitClause0, @TraitClause1, @TraitClause2] } // Full name: core::slice::index::private_slice_index::{impl Sealed for Range[Sized]} -impl Sealed for Range[Sized] {} +impl Sealed for Range[Sized] { + parent_clause0 = MetaSized[Sized]> +} pub fn core::slice::index::SliceIndex::get<'_0, Self, T, Clause0_Output>(@1: Self, @2: &'_0 (T)) -> Option<&'_0 (Clause0_Output)>[Sized<&'_0 (Clause0_Output)>] where @@ -195,7 +225,10 @@ impl SliceIndex, Slice> for Range[Sized] where [@TraitClause0]: Sized, { - parent_clause0 = {impl Sealed for Range[Sized]} + parent_clause0 = MetaSized[Sized]> + parent_clause1 = {impl Sealed for Range[Sized]} + parent_clause2 = MetaSized> + parent_clause3 = MetaSized> fn get<'_0> = {impl SliceIndex, Slice> for Range[Sized]}::get<'_0_0, T>[@TraitClause0] fn get_mut<'_0> = {impl SliceIndex, Slice> for Range[Sized]}::get_mut<'_0_0, T>[@TraitClause0] fn get_unchecked = {impl SliceIndex, Slice> for Range[Sized]}::get_unchecked[@TraitClause0] @@ -653,7 +686,7 @@ pub fn array_subslice_mut_<'_0>(@1: &'_0 mut (Array), @2: usize @8 := Range { start: move (@9), end: move (@10) } storage_dead(@10) storage_dead(@9) - @6 := {impl IndexMut for Array}::index_mut<'_, u32, Range[Sized], Slice, 32 : usize>[Sized, Sized[Sized]>, {impl IndexMut for Slice}[Sized], Slice>[Sized, Sized[Sized]>, {impl SliceIndex, Slice> for Range[Sized]}[Sized]]](move (@7), move (@8)) + @6 := {impl IndexMut for Array}::index_mut<'_, u32, Range[Sized], Slice, 32 : usize>[Sized, Sized[Sized]>, {impl IndexMut for Slice}[Sized], Slice>[Sized, Sized[Sized]>, {impl SliceIndex, Slice> for Range[Sized]}[Sized]]](move (@7), move (@8)) storage_dead(@8) storage_dead(@7) @5 := &mut *(@6) @@ -1363,7 +1396,7 @@ pub fn range_all() @6 := &mut x@1 storage_live(@7) @7 := Range { start: const (1 : usize), end: const (3 : usize) } - @5 := {impl IndexMut for Array}::index_mut<'_, u32, Range[Sized], Slice, 4 : usize>[Sized, Sized[Sized]>, {impl IndexMut for Slice}[Sized], Slice>[Sized, Sized[Sized]>, {impl SliceIndex, Slice> for Range[Sized]}[Sized]]](move (@6), move (@7)) + @5 := {impl IndexMut for Array}::index_mut<'_, u32, Range[Sized], Slice, 4 : usize>[Sized, Sized[Sized]>, {impl IndexMut for Slice}[Sized], Slice>[Sized, Sized[Sized]>, {impl SliceIndex, Slice> for Range[Sized]}[Sized]]](move (@6), move (@7)) storage_dead(@7) storage_dead(@6) @4 := &mut *(@5) diff --git a/charon/tests/ui/assoc-const-with-generics.out b/charon/tests/ui/assoc-const-with-generics.out index 148545912..3dc68a9b0 100644 --- a/charon/tests/ui/assoc-const-with-generics.out +++ b/charon/tests/ui/assoc-const-with-generics.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::V struct V @@ -30,6 +37,7 @@ where // Full name: test_crate::HasLen trait HasLen { + parent_clause0 : [@TraitClause0]: MetaSized const LEN : usize } @@ -47,6 +55,7 @@ const {impl HasLen for Array<(), const N : usize>}::LEN: usize // Full name: test_crate::{impl HasLen for Array<(), const N : usize>} impl HasLen for Array<(), const N : usize> { + parent_clause0 = MetaSized> const LEN = {impl HasLen for Array<(), const N : usize>}::LEN } @@ -67,6 +76,7 @@ const {impl HasLen for Array}::LEN: usiz // Full name: test_crate::{impl HasLen for Array} impl HasLen for Array { + parent_clause0 = MetaSized> const LEN = {impl HasLen for Array}::LEN } @@ -103,12 +113,14 @@ where [@TraitClause0]: Sized, [@TraitClause1]: HasLen, { + parent_clause0 = MetaSized[@TraitClause0]> const LEN = {impl HasLen for Wrapper[@TraitClause0]}::LEN[@TraitClause0, @TraitClause1] } // Full name: test_crate::HasDefaultLen pub trait HasDefaultLen { + parent_clause0 : [@TraitClause0]: MetaSized const LEN : usize } @@ -129,6 +141,7 @@ where // Full name: test_crate::{impl HasDefaultLen for Array<(), const N : usize>} impl HasDefaultLen for Array<(), const N : usize> { + parent_clause0 = MetaSized> const LEN = test_crate::HasDefaultLen::LEN, const N : usize>[{impl HasDefaultLen for Array<(), const N : usize>}] } @@ -155,13 +168,15 @@ pub const {impl HasDefaultLen for Array} // Full name: test_crate::{impl HasDefaultLen for Array} impl HasDefaultLen for Array { + parent_clause0 = MetaSized> const LEN = {impl HasDefaultLen for Array}::LEN } // Full name: test_crate::AlsoHasLen trait AlsoHasLen { - parent_clause0 : [@TraitClause0]: HasLen + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: HasLen const ALSO_LEN : usize } @@ -173,7 +188,7 @@ where let @1: usize; // anonymous local storage_live(@1) - @1 := const (@TraitClause0::parent_clause0::LEN) + const (1 : usize) + @1 := const (@TraitClause0::parent_clause1::LEN) + const (1 : usize) @0 := move (@1) return } @@ -185,7 +200,8 @@ where // Full name: test_crate::{impl AlsoHasLen for Array<(), const N : usize>} impl AlsoHasLen for Array<(), const N : usize> { - parent_clause0 = {impl HasLen for Array<(), const N : usize>} + parent_clause0 = MetaSized> + parent_clause1 = {impl HasLen for Array<(), const N : usize>} const ALSO_LEN = test_crate::AlsoHasLen::ALSO_LEN>[{impl AlsoHasLen for Array<(), const N : usize>}] } diff --git a/charon/tests/ui/associated-types.out b/charon/tests/ui/associated-types.out index b1906ed46..c09bead7a 100644 --- a/charon/tests/ui/associated-types.out +++ b/charon/tests/ui/associated-types.out @@ -1,9 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::borrow::Borrow #[lang_item("Borrow")] pub trait Borrow { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized fn borrow<'_0> = borrow<'_0_0, Self, Borrowed>[Self] } @@ -15,6 +21,9 @@ where // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -43,12 +52,21 @@ impl<'_0, T> Clone for &'_0 (T) { #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::marker::{impl Copy for &'_0 (T)} impl<'_0, T> Copy for &'_0 (T) { - parent_clause0 = {impl Clone for &'_0 (T)}<'_, T> + parent_clause0 = MetaSized<&'_ (T)> + parent_clause1 = {impl Clone for &'_0 (T)}<'_, T> +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::option::Option @@ -83,15 +101,17 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Copy, { - parent_clause0 = {impl Clone for Option[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause0] + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = {impl Clone for Option[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause1] } // Full name: alloc::borrow::ToOwned #[lang_item("ToOwned")] pub trait ToOwned { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Borrow + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Borrow fn to_owned<'_0> = to_owned<'_0_0, Self, Self_Owned>[Self] } @@ -105,9 +125,10 @@ trait test_crate::Foo<'a, Self, Self_Item> where Self_Item : 'a, { - parent_clause0 : [@TraitClause0]: Copy - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Copy + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Clone fn use_item_required = test_crate::Foo::use_item_required<'a, Self, Self_Item>[Self] fn use_item_provided> = use_item_provided<'a, Self, Self_Item, Clause0_Item>[Self, @TraitClause0_0] } @@ -158,9 +179,10 @@ impl<'a, T> test_crate::Foo<'a, Option<&'a (T)>[Sized<&'_ (T)>]> for &'a (T) where [@TraitClause0]: Sized, { - parent_clause0 = {impl Copy for &'_0 (T)}<'_, T> - parent_clause1 = Sized[Sized<&'_ (T)>]> - parent_clause2 = {impl Clone for Option[@TraitClause0]}<&'_ (T)>[Sized<&'_ (T)>, {impl Clone for &'_0 (T)}<'_, T>] + parent_clause0 = MetaSized<&'_ (T)> + parent_clause1 = {impl Copy for &'_0 (T)}<'_, T> + parent_clause2 = Sized[Sized<&'_ (T)>]> + parent_clause3 = {impl Clone for Option[@TraitClause0]}<&'_ (T)>[Sized<&'_ (T)>, {impl Clone for &'_0 (T)}<'_, T>] fn use_item_required = {impl test_crate::Foo<'a, Option<&'a (T)>[Sized<&'_ (T)>]> for &'a (T)}::use_item_required<'a, T>[@TraitClause0] fn use_item_provided[Sized<&'_ (T)>], Clause0_Item>> = test_crate::{impl test_crate::Foo<'a, Option<&'a (T)>[Sized<&'_ (T)>]> for &'a (T)}::use_item_provided<'a, T, Clause0_Item>[@TraitClause0, @TraitClause0_0] } @@ -200,9 +222,10 @@ where [@TraitClause1]: Copy, T : 'a, { - parent_clause0 = {impl Copy for Option[@TraitClause0]}[@TraitClause0, @TraitClause1] - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1::parent_clause0 + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = {impl Copy for Option[@TraitClause0]}[@TraitClause0, @TraitClause1] + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1::parent_clause1 fn use_item_required = {impl test_crate::Foo<'a, T> for Option[@TraitClause0]}::use_item_required<'a, T>[@TraitClause0, @TraitClause1] fn use_item_provided> = test_crate::{impl test_crate::Foo<'a, T> for Option[@TraitClause0]}::use_item_provided<'a, T, Clause0_Item>[@TraitClause0, @TraitClause1, @TraitClause0_0] } @@ -227,7 +250,7 @@ where @3 := @TraitClause1::use_item_provided[@TraitClause2](move (@4)) @2 := &@3 storage_dead(@4) - @0 := @TraitClause2::parent_clause0::parent_clause0::clone<'_>(move (@2)) + @0 := @TraitClause2::parent_clause1::parent_clause1::clone<'_>(move (@2)) storage_dead(@2) storage_dead(@3) return @@ -269,58 +292,65 @@ where trait test_crate::loopy::Bar { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::loopy::{impl test_crate::loopy::Bar for ()} impl test_crate::loopy::Bar for () { - parent_clause0 = Sized + parent_clause0 = MetaSized<()> + parent_clause1 = Sized } trait test_crate::loopy::Foo { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: test_crate::loopy::Foo - parent_clause2 : [@TraitClause2]: test_crate::loopy::Bar + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: test_crate::loopy::Foo + parent_clause3 : [@TraitClause3]: test_crate::loopy::Bar type FooTy - type Self_Clause2_BarTy + type Self_Clause3_BarTy } // Full name: test_crate::loopy::{impl test_crate::loopy::Foo for ()} impl test_crate::loopy::Foo for () { - parent_clause0 = Sized<()> - parent_clause1 = {impl test_crate::loopy::Foo for ()} - parent_clause2 = {impl test_crate::loopy::Bar for ()} + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = {impl test_crate::loopy::Foo for ()} + parent_clause3 = {impl test_crate::loopy::Bar for ()} type FooTy = () - type Self_Clause2_BarTy = bool + type Self_Clause3_BarTy = bool } // Full name: test_crate::loopy::Baz trait Baz { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Baz - parent_clause2 : [@TraitClause2]: test_crate::loopy::Bar - parent_clause3 : [@TraitClause3]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Baz + parent_clause3 : [@TraitClause3]: test_crate::loopy::Bar + parent_clause4 : [@TraitClause4]: Sized type BazTy - type Self_Clause2_BarTy + type Self_Clause3_BarTy } // Full name: test_crate::loopy::{impl Baz<()> for ()} impl Baz<()> for () { - parent_clause0 = Sized<()> - parent_clause1 = {impl Baz<()> for ()} - parent_clause2 = {impl test_crate::loopy::Bar for ()} - parent_clause3 = Sized + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = {impl Baz<()> for ()} + parent_clause3 = {impl test_crate::loopy::Bar for ()} + parent_clause4 = Sized type BazTy = usize - type Self_Clause2_BarTy = bool + type Self_Clause3_BarTy = bool } trait test_crate::loopy_with_generics::Bar<'a, Self, T, U, Self_BarTy> { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized } // Full name: test_crate::loopy_with_generics::{impl test_crate::loopy_with_generics::Bar<'a, u8, T, &'a (T)> for ()} @@ -329,40 +359,44 @@ where [@TraitClause0]: Sized, T : 'a, { - parent_clause0 = Sized - parent_clause1 = @TraitClause0 - parent_clause2 = Sized<&'_ (T)> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized + parent_clause2 = @TraitClause0 + parent_clause3 = Sized<&'_ (T)> } trait test_crate::loopy_with_generics::Foo<'b, Self, T> { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: test_crate::loopy_with_generics::Foo<'b, Self::FooTy, T> - parent_clause3 : [@TraitClause3]: test_crate::loopy_with_generics::Bar<'b, Self::FooTy, u8, Option[Self::parent_clause0], Self::Self_Clause3_BarTy> + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: test_crate::loopy_with_generics::Foo<'b, Self::FooTy, T> + parent_clause4 : [@TraitClause4]: test_crate::loopy_with_generics::Bar<'b, Self::FooTy, u8, Option[Self::parent_clause1], Self::Self_Clause4_BarTy> type FooTy - type Self_Clause3_BarTy + type Self_Clause4_BarTy } // Full name: test_crate::loopy_with_generics::{impl test_crate::loopy_with_generics::Foo<'static, u16> for ()} impl test_crate::loopy_with_generics::Foo<'static, u16> for () { - parent_clause0 = Sized - parent_clause1 = Sized<()> - parent_clause2 = {impl test_crate::loopy_with_generics::Foo<'static, u16> for ()} - parent_clause3 = {impl test_crate::loopy_with_generics::Bar<'a, u8, T, &'a (T)> for ()}<'_, Option[Sized]>[Sized[Sized]>] + parent_clause0 = MetaSized<()> + parent_clause1 = Sized + parent_clause2 = Sized<()> + parent_clause3 = {impl test_crate::loopy_with_generics::Foo<'static, u16> for ()} + parent_clause4 = {impl test_crate::loopy_with_generics::Bar<'a, u8, T, &'a (T)> for ()}<'_, Option[Sized]>[Sized[Sized]>] type FooTy = () - type Self_Clause3_BarTy = &'_ (Option[Sized]) + type Self_Clause4_BarTy = &'_ (Option[Sized]) } // Full name: test_crate::cow::Cow -enum Cow<'a, B, Clause0_Owned> +enum Cow<'a, B, Clause1_Owned> where - [@TraitClause0]: ToOwned, + [@TraitClause0]: MetaSized, + [@TraitClause1]: ToOwned, B : 'a, B : 'a, { Borrowed(&'a (B)), - Owned(Clause0_Owned), + Owned(Clause1_Owned), } trait test_crate::params::Foo<'a, Self, T, Self_X, Self_Item> @@ -370,9 +404,10 @@ where T : 'a, Self_X : 'a, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized } // Full name: test_crate::params::{impl test_crate::params::Foo<'a, Option[@TraitClause0], &'a (()), &'a ((Option[@TraitClause0], &'_ (())))> for ()} @@ -381,9 +416,10 @@ where [@TraitClause0]: Sized, T : 'a, { - parent_clause0 = Sized[@TraitClause0]> - parent_clause1 = Sized<&'_ (())> - parent_clause2 = Sized<&'_ ((Option[@TraitClause0], &'_ (())))> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized[@TraitClause0]> + parent_clause2 = Sized<&'_ (())> + parent_clause3 = Sized<&'_ ((Option[@TraitClause0], &'_ (())))> } diff --git a/charon/tests/ui/call-to-known-trait-method.out b/charon/tests/ui/call-to-known-trait-method.out index 5f660d40c..76d8b8a04 100644 --- a/charon/tests/ui/call-to-known-trait-method.out +++ b/charon/tests/ui/call-to-known-trait-method.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -68,6 +75,13 @@ impl Default for bool { fn default = {impl Default for bool}::default } +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: alloc::string::String #[lang_item("String")] pub opaque type String @@ -110,8 +124,9 @@ where // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized fn method> = test_crate::Trait::method[Self, @TraitClause0_0] } @@ -144,8 +159,9 @@ where [@TraitClause2]: Clone, [@TraitClause3]: PartialEq, { - parent_clause0 = @TraitClause1 - parent_clause1 = Sized<(A, B)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = @TraitClause1 + parent_clause2 = Sized<(A, B)> fn method> = {impl Trait for Struct[@TraitClause0]}::method[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause0_0] } diff --git a/charon/tests/ui/closure-as-fn.out b/charon/tests/ui/closure-as-fn.out index ed134e740..264937ef2 100644 --- a/charon/tests/ui/closure-as-fn.out +++ b/charon/tests/ui/closure-as-fn.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,17 +45,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -145,26 +158,29 @@ fn main() // Full name: test_crate::main::{impl FnOnce<()> for closure} impl FnOnce<()> for closure { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized<()> type Output = () fn call_once = {impl FnOnce<()> for closure}::call_once } // Full name: test_crate::main::{impl FnMut<()> for closure} impl FnMut<()> for closure { - parent_clause0 = {impl FnOnce<()> for closure} - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnOnce<()> for closure} + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call_mut<'_0> = {impl FnMut<()> for closure}::call_mut<'_0_0> } // Full name: test_crate::main::{impl Fn<()> for closure} impl Fn<()> for closure { - parent_clause0 = {impl FnMut<()> for closure} - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnMut<()> for closure} + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call<'_0> = {impl Fn<()> for closure}::call<'_0_0> } diff --git a/charon/tests/ui/closures.out b/charon/tests/ui/closures.out index 01ba5f411..0d1add0c1 100644 --- a/charon/tests/ui/closures.out +++ b/charon/tests/ui/closures.out @@ -1,31 +1,43 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized fn call_once = core::ops::function::FnOnce::call_once[Self] } // Full name: core::ops::function::FnMut #[lang_item("fn_mut")] -pub trait FnMut +pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args, Self_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args, Self_Clause1_Output>[Self] } // Full name: core::array::{Array}::map @@ -58,23 +70,31 @@ impl Clone for u32 { fn clone<'_0> = {impl Clone for u32}::clone<'_0_0> } +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::ops::function::Fn #[lang_item("r#fn")] -pub trait Fn +pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause1_Clause1_Output>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause0_Clause0_Output +pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause1_Clause1_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause1_Clause1_Output where - [@TraitClause0]: Fn, + [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Clause0_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause0_Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Clause0_Clause1_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause1_Output where - [@TraitClause0]: FnMut, + [@TraitClause0]: FnMut, pub fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Clause0_Output where @@ -304,25 +324,28 @@ pub fn test_closure_u32(@1: u32) -> u32 // Full name: test_crate::test_closure_u32::{impl FnOnce<(u32), u32> for test_crate::test_closure_u32::closure} impl FnOnce<(u32), u32> for test_crate::test_closure_u32::closure { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(u32), u32> for test_crate::test_closure_u32::closure}::call_once } // Full name: test_crate::test_closure_u32::{impl FnMut<(u32), u32> for test_crate::test_closure_u32::closure} impl FnMut<(u32), u32> for test_crate::test_closure_u32::closure { - parent_clause0 = {impl FnOnce<(u32), u32> for test_crate::test_closure_u32::closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnOnce<(u32), u32> for test_crate::test_closure_u32::closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call_mut<'_0> = {impl FnMut<(u32), u32> for test_crate::test_closure_u32::closure}::call_mut<'_0_0> } // Full name: test_crate::test_closure_u32::{impl Fn<(u32), u32> for test_crate::test_closure_u32::closure} impl Fn<(u32), u32> for test_crate::test_closure_u32::closure { - parent_clause0 = {impl FnMut<(u32), u32> for test_crate::test_closure_u32::closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnMut<(u32), u32> for test_crate::test_closure_u32::closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call<'_0> = {impl Fn<(u32), u32> for test_crate::test_closure_u32::closure}::call<'_0_0> } @@ -433,25 +456,28 @@ pub fn test_closure_u32s(@1: u32) -> u32 // Full name: test_crate::test_closure_u32s::{impl FnOnce<(u32, u32), u32> for test_crate::test_closure_u32s::closure} impl FnOnce<(u32, u32), u32> for test_crate::test_closure_u32s::closure { - parent_clause0 = Sized<(u32, u32)> - parent_clause1 = Tuple<(u32, u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32, u32)> + parent_clause1 = Sized<(u32, u32)> + parent_clause2 = Tuple<(u32, u32)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(u32, u32), u32> for test_crate::test_closure_u32s::closure}::call_once } // Full name: test_crate::test_closure_u32s::{impl FnMut<(u32, u32), u32> for test_crate::test_closure_u32s::closure} impl FnMut<(u32, u32), u32> for test_crate::test_closure_u32s::closure { - parent_clause0 = {impl FnOnce<(u32, u32), u32> for test_crate::test_closure_u32s::closure} - parent_clause1 = Sized<(u32, u32)> - parent_clause2 = Tuple<(u32, u32)> + parent_clause0 = MetaSized<(u32, u32)> + parent_clause1 = {impl FnOnce<(u32, u32), u32> for test_crate::test_closure_u32s::closure} + parent_clause2 = Sized<(u32, u32)> + parent_clause3 = Tuple<(u32, u32)> fn call_mut<'_0> = {impl FnMut<(u32, u32), u32> for test_crate::test_closure_u32s::closure}::call_mut<'_0_0> } // Full name: test_crate::test_closure_u32s::{impl Fn<(u32, u32), u32> for test_crate::test_closure_u32s::closure} impl Fn<(u32, u32), u32> for test_crate::test_closure_u32s::closure { - parent_clause0 = {impl FnMut<(u32, u32), u32> for test_crate::test_closure_u32s::closure} - parent_clause1 = Sized<(u32, u32)> - parent_clause2 = Tuple<(u32, u32)> + parent_clause0 = MetaSized<(u32, u32)> + parent_clause1 = {impl FnMut<(u32, u32), u32> for test_crate::test_closure_u32s::closure} + parent_clause2 = Sized<(u32, u32)> + parent_clause3 = Tuple<(u32, u32)> fn call<'_0> = {impl Fn<(u32, u32), u32> for test_crate::test_closure_u32s::closure}::call<'_0_0> } @@ -547,25 +573,28 @@ pub fn test_closure_ref_u32<'a>(@1: &'a (u32)) -> &'a (u32) // Full name: test_crate::test_closure_ref_u32::{impl FnOnce<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure} impl<'_0> FnOnce<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure { - parent_clause0 = Sized<(&'_ (u32))> - parent_clause1 = Tuple<(&'_ (u32))> - parent_clause2 = Sized<&'_ (u32)> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = Sized<(&'_ (u32))> + parent_clause2 = Tuple<(&'_ (u32))> + parent_clause3 = Sized<&'_ (u32)> fn call_once = {impl FnOnce<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}::call_once<'_0> } // Full name: test_crate::test_closure_ref_u32::{impl FnMut<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure} impl<'_0> FnMut<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure { - parent_clause0 = {impl FnOnce<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}<'_0> - parent_clause1 = Sized<(&'_ (u32))> - parent_clause2 = Tuple<(&'_ (u32))> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = {impl FnOnce<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}<'_0> + parent_clause2 = Sized<(&'_ (u32))> + parent_clause3 = Tuple<(&'_ (u32))> fn call_mut<'_0> = {impl FnMut<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}::call_mut<'_0, '_0_0> } // Full name: test_crate::test_closure_ref_u32::{impl Fn<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure} impl<'_0> Fn<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure { - parent_clause0 = {impl FnMut<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}<'_0> - parent_clause1 = Sized<(&'_ (u32))> - parent_clause2 = Tuple<(&'_ (u32))> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = {impl FnMut<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}<'_0> + parent_clause2 = Sized<(&'_ (u32))> + parent_clause3 = Tuple<(&'_ (u32))> fn call<'_0> = {impl Fn<(&'_ (u32)), &'_ (u32)> for test_crate::test_closure_ref_u32::closure}::call<'_0, '_0_0> } @@ -677,9 +706,10 @@ impl<'_0, T> FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param:: where [@TraitClause0]: Sized, { - parent_clause0 = Sized<(&'_ (T))> - parent_clause1 = Tuple<(&'_ (T))> - parent_clause2 = Sized<&'_ (T)> + parent_clause0 = MetaSized<(&'_ (T))> + parent_clause1 = Sized<(&'_ (T))> + parent_clause2 = Tuple<(&'_ (T))> + parent_clause3 = Sized<&'_ (T)> fn call_once = {impl FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}::call_once<'_0, T>[@TraitClause0] } @@ -688,9 +718,10 @@ impl<'_0, T> FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::c where [@TraitClause0]: Sized, { - parent_clause0 = {impl FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}<'_0, T>[@TraitClause0] - parent_clause1 = Sized<(&'_ (T))> - parent_clause2 = Tuple<(&'_ (T))> + parent_clause0 = MetaSized<(&'_ (T))> + parent_clause1 = {impl FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}<'_0, T>[@TraitClause0] + parent_clause2 = Sized<(&'_ (T))> + parent_clause3 = Tuple<(&'_ (T))> fn call_mut<'_0> = {impl FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}::call_mut<'_0, '_0_0, T>[@TraitClause0] } @@ -699,14 +730,18 @@ impl<'_0, T> Fn<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::clos where [@TraitClause0]: Sized, { - parent_clause0 = {impl FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}<'_0, T>[@TraitClause0] - parent_clause1 = Sized<(&'_ (T))> - parent_clause2 = Tuple<(&'_ (T))> + parent_clause0 = MetaSized<(&'_ (T))> + parent_clause1 = {impl FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}<'_0, T>[@TraitClause0] + parent_clause2 = Sized<(&'_ (T))> + parent_clause3 = Tuple<(&'_ (T))> fn call<'_0> = {impl Fn<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_param::closure[@TraitClause0]}::call<'_0, '_0_0, T>[@TraitClause0] } // Full name: test_crate::Trait pub trait Trait<'a, Self> +{ + parent_clause0 : [@TraitClause0]: MetaSized +} struct test_crate::test_closure_ref_early_bound::closure<'a, T> where @@ -823,9 +858,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Trait<'a, T>, { - parent_clause0 = Sized<(&'_ (T))> - parent_clause1 = Tuple<(&'_ (T))> - parent_clause2 = Sized<&'_ (T)> + parent_clause0 = MetaSized<(&'_ (T))> + parent_clause1 = Sized<(&'_ (T))> + parent_clause2 = Tuple<(&'_ (T))> + parent_clause3 = Sized<&'_ (T)> fn call_once = {impl FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}::call_once<'a, '_1, T>[@TraitClause0, @TraitClause1] } @@ -835,9 +871,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Trait<'a, T>, { - parent_clause0 = {impl FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(&'_ (T))> - parent_clause2 = Tuple<(&'_ (T))> + parent_clause0 = MetaSized<(&'_ (T))> + parent_clause1 = {impl FnOnce<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(&'_ (T))> + parent_clause3 = Tuple<(&'_ (T))> fn call_mut<'_0> = {impl FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}::call_mut<'a, '_1, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -847,9 +884,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Trait<'a, T>, { - parent_clause0 = {impl FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(&'_ (T))> - parent_clause2 = Tuple<(&'_ (T))> + parent_clause0 = MetaSized<(&'_ (T))> + parent_clause1 = {impl FnMut<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(&'_ (T))> + parent_clause3 = Tuple<(&'_ (T))> fn call<'_0> = {impl Fn<(&'_ (T)), &'_ (T)> for test_crate::test_closure_ref_early_bound::closure<'_, T>[@TraitClause0, @TraitClause1]}::call<'a, '_1, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -948,25 +986,28 @@ pub fn test_map_option2(@1: Option[Sized]) -> Option[Sized] // Full name: test_crate::test_map_option2::{impl FnOnce<(u32), u32> for test_crate::test_map_option2::closure} impl FnOnce<(u32), u32> for test_crate::test_map_option2::closure { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(u32), u32> for test_crate::test_map_option2::closure}::call_once } // Full name: test_crate::test_map_option2::{impl FnMut<(u32), u32> for test_crate::test_map_option2::closure} impl FnMut<(u32), u32> for test_crate::test_map_option2::closure { - parent_clause0 = {impl FnOnce<(u32), u32> for test_crate::test_map_option2::closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnOnce<(u32), u32> for test_crate::test_map_option2::closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call_mut<'_0> = {impl FnMut<(u32), u32> for test_crate::test_map_option2::closure}::call_mut<'_0_0> } // Full name: test_crate::test_map_option2::{impl Fn<(u32), u32> for test_crate::test_map_option2::closure} impl Fn<(u32), u32> for test_crate::test_map_option2::closure { - parent_clause0 = {impl FnMut<(u32), u32> for test_crate::test_map_option2::closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnMut<(u32), u32> for test_crate::test_map_option2::closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call<'_0> = {impl Fn<(u32), u32> for test_crate::test_map_option2::closure}::call<'_0_0> } @@ -1153,25 +1194,28 @@ fn {impl FnOnce<(u32), u32> for test_crate::test_map_option3::closure}::call_onc // Full name: test_crate::test_map_option3::{impl FnOnce<(u32), u32> for test_crate::test_map_option3::closure} impl FnOnce<(u32), u32> for test_crate::test_map_option3::closure { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(u32), u32> for test_crate::test_map_option3::closure}::call_once } // Full name: test_crate::test_map_option3::{impl FnMut<(u32), u32> for test_crate::test_map_option3::closure} impl FnMut<(u32), u32> for test_crate::test_map_option3::closure { - parent_clause0 = {impl FnOnce<(u32), u32> for test_crate::test_map_option3::closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnOnce<(u32), u32> for test_crate::test_map_option3::closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call_mut<'_0> = {impl FnMut<(u32), u32> for test_crate::test_map_option3::closure}::call_mut<'_0_0> } // Full name: test_crate::test_map_option3::{impl Fn<(u32), u32> for test_crate::test_map_option3::closure} impl Fn<(u32), u32> for test_crate::test_map_option3::closure { - parent_clause0 = {impl FnMut<(u32), u32> for test_crate::test_map_option3::closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnMut<(u32), u32> for test_crate::test_map_option3::closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call<'_0> = {impl Fn<(u32), u32> for test_crate::test_map_option3::closure}::call<'_0_0> } @@ -1270,25 +1314,28 @@ fn {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}:: // Full name: test_crate::test_regions::{impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure} impl<'_0> FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure { - parent_clause0 = Sized<(&'_ (&'_ (u32)))> - parent_clause1 = Tuple<(&'_ (&'_ (u32)))> - parent_clause2 = Sized + parent_clause0 = MetaSized<(&'_ (&'_ (u32)))> + parent_clause1 = Sized<(&'_ (&'_ (u32)))> + parent_clause2 = Tuple<(&'_ (&'_ (u32)))> + parent_clause3 = Sized fn call_once = {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}::call_once<'_0> } // Full name: test_crate::test_regions::{impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure} impl<'_0> FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure { - parent_clause0 = {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}<'_0> - parent_clause1 = Sized<(&'_ (&'_ (u32)))> - parent_clause2 = Tuple<(&'_ (&'_ (u32)))> + parent_clause0 = MetaSized<(&'_ (&'_ (u32)))> + parent_clause1 = {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}<'_0> + parent_clause2 = Sized<(&'_ (&'_ (u32)))> + parent_clause3 = Tuple<(&'_ (&'_ (u32)))> fn call_mut<'_0> = {impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}::call_mut<'_0, '_0_0> } // Full name: test_crate::test_regions::{impl Fn<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure} impl<'_0> Fn<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure { - parent_clause0 = {impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}<'_0> - parent_clause1 = Sized<(&'_ (&'_ (u32)))> - parent_clause2 = Tuple<(&'_ (&'_ (u32)))> + parent_clause0 = MetaSized<(&'_ (&'_ (u32)))> + parent_clause1 = {impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}<'_0> + parent_clause2 = Sized<(&'_ (&'_ (u32)))> + parent_clause3 = Tuple<(&'_ (&'_ (u32)))> fn call<'_0> = {impl Fn<(&'_ (&'_ (u32))), u32> for test_crate::test_regions::closure}::call<'_0, '_0_0> } @@ -1384,25 +1431,28 @@ pub fn test_regions_casted<'a>(@1: &'a (u32)) -> u32 // Full name: test_crate::test_regions_casted::{impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure} impl<'_0> FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure { - parent_clause0 = Sized<(&'_ (&'_ (u32)))> - parent_clause1 = Tuple<(&'_ (&'_ (u32)))> - parent_clause2 = Sized + parent_clause0 = MetaSized<(&'_ (&'_ (u32)))> + parent_clause1 = Sized<(&'_ (&'_ (u32)))> + parent_clause2 = Tuple<(&'_ (&'_ (u32)))> + parent_clause3 = Sized fn call_once = {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}::call_once<'_0> } // Full name: test_crate::test_regions_casted::{impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure} impl<'_0> FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure { - parent_clause0 = {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}<'_0> - parent_clause1 = Sized<(&'_ (&'_ (u32)))> - parent_clause2 = Tuple<(&'_ (&'_ (u32)))> + parent_clause0 = MetaSized<(&'_ (&'_ (u32)))> + parent_clause1 = {impl FnOnce<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}<'_0> + parent_clause2 = Sized<(&'_ (&'_ (u32)))> + parent_clause3 = Tuple<(&'_ (&'_ (u32)))> fn call_mut<'_0> = {impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}::call_mut<'_0, '_0_0> } // Full name: test_crate::test_regions_casted::{impl Fn<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure} impl<'_0> Fn<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure { - parent_clause0 = {impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}<'_0> - parent_clause1 = Sized<(&'_ (&'_ (u32)))> - parent_clause2 = Tuple<(&'_ (&'_ (u32)))> + parent_clause0 = MetaSized<(&'_ (&'_ (u32)))> + parent_clause1 = {impl FnMut<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}<'_0> + parent_clause2 = Sized<(&'_ (&'_ (u32)))> + parent_clause3 = Tuple<(&'_ (&'_ (u32)))> fn call<'_0> = {impl Fn<(&'_ (&'_ (u32))), u32> for test_crate::test_regions_casted::closure}::call<'_0, '_0_0> } @@ -1513,25 +1563,28 @@ fn {impl FnOnce<(u32), u32> for test_crate::test_closure_capture::closure<'_0, ' // Full name: test_crate::test_closure_capture::{impl FnOnce<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>} impl<'_0, '_1> FnOnce<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1> { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}::call_once<'_0, '_1> } // Full name: test_crate::test_closure_capture::{impl FnMut<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>} impl<'_0, '_1> FnMut<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1> { - parent_clause0 = {impl FnOnce<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}<'_0, '_1> - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnOnce<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}<'_0, '_1> + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call_mut<'_0> = {impl FnMut<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}::call_mut<'_0, '_1, '_0_0> } // Full name: test_crate::test_closure_capture::{impl Fn<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>} impl<'_0, '_1> Fn<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1> { - parent_clause0 = {impl FnMut<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}<'_0, '_1> - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnMut<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}<'_0, '_1> + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call<'_0> = {impl Fn<(u32), u32> for test_crate::test_closure_capture::closure<'_0, '_1>}::call<'_0, '_1, '_0_0> } @@ -1639,9 +1692,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized<(T)> - parent_clause1 = Tuple<(T)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(T)> + parent_clause1 = Sized<(T)> + parent_clause2 = Tuple<(T)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}::call_once[@TraitClause0, @TraitClause1] } @@ -1651,9 +1705,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnOnce<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(T)> - parent_clause2 = Tuple<(T)> + parent_clause0 = MetaSized<(T)> + parent_clause1 = {impl FnOnce<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(T)> + parent_clause3 = Tuple<(T)> fn call_mut<'_0> = {impl FnMut<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}::call_mut<'_0_0, T>[@TraitClause0, @TraitClause1] } @@ -1663,9 +1718,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnMut<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(T)> - parent_clause2 = Tuple<(T)> + parent_clause0 = MetaSized<(T)> + parent_clause1 = {impl FnMut<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(T)> + parent_clause3 = Tuple<(T)> fn call<'_0> = {impl Fn<(T), T> for test_crate::test_closure_clone::closure[@TraitClause0, @TraitClause1]}::call<'_0_0, T>[@TraitClause0, @TraitClause1] } @@ -1702,17 +1758,19 @@ fn {impl FnOnce<(i32), i32> for test_crate::test_array_map::closure}::call_once( // Full name: test_crate::test_array_map::{impl FnOnce<(i32), i32> for test_crate::test_array_map::closure} impl FnOnce<(i32), i32> for test_crate::test_array_map::closure { - parent_clause0 = Sized<(i32)> - parent_clause1 = Tuple<(i32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(i32)> + parent_clause1 = Sized<(i32)> + parent_clause2 = Tuple<(i32)> + parent_clause3 = Sized fn call_once = {impl FnOnce<(i32), i32> for test_crate::test_array_map::closure}::call_once } // Full name: test_crate::test_array_map::{impl FnMut<(i32), i32> for test_crate::test_array_map::closure} impl FnMut<(i32), i32> for test_crate::test_array_map::closure { - parent_clause0 = {impl FnOnce<(i32), i32> for test_crate::test_array_map::closure} - parent_clause1 = Sized<(i32)> - parent_clause2 = Tuple<(i32)> + parent_clause0 = MetaSized<(i32)> + parent_clause1 = {impl FnOnce<(i32), i32> for test_crate::test_array_map::closure} + parent_clause2 = Sized<(i32)> + parent_clause3 = Tuple<(i32)> fn call_mut<'_0> = {impl FnMut<(i32), i32> for test_crate::test_array_map::closure}::call_mut<'_0_0> } @@ -1825,17 +1883,19 @@ fn {impl FnOnce<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure< // Full name: test_crate::test_fnmut_with_ref::{impl FnOnce<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0>} impl<'_0, '_1> FnOnce<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0> { - parent_clause0 = Sized<(&'_ (usize))> - parent_clause1 = Tuple<(&'_ (usize))> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<(&'_ (usize))> + parent_clause1 = Sized<(&'_ (usize))> + parent_clause2 = Tuple<(&'_ (usize))> + parent_clause3 = Sized<()> fn call_once = {impl FnOnce<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0>}::call_once<'_0, '_1> } // Full name: test_crate::test_fnmut_with_ref::{impl FnMut<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0>} impl<'_0, '_1> FnMut<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0> { - parent_clause0 = {impl FnOnce<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0>}<'_0, '_1> - parent_clause1 = Sized<(&'_ (usize))> - parent_clause2 = Tuple<(&'_ (usize))> + parent_clause0 = MetaSized<(&'_ (usize))> + parent_clause1 = {impl FnOnce<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0>}<'_0, '_1> + parent_clause2 = Sized<(&'_ (usize))> + parent_clause3 = Tuple<(&'_ (usize))> fn call_mut<'_0> = {impl FnMut<(&'_ (usize)), ()> for test_crate::test_fnmut_with_ref::closure<'_0>}::call_mut<'_0, '_1, '_0_0> } diff --git a/charon/tests/ui/closures_with_where.out b/charon/tests/ui/closures_with_where.out index 2d7be6d38..05af07a4e 100644 --- a/charon/tests/ui/closures_with_where.out +++ b/charon/tests/ui/closures_with_where.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -35,9 +47,9 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, - @TraitClause2::parent_clause0::Output = T, + @TraitClause2::parent_clause1::Output = T, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -48,6 +60,7 @@ where // Full name: test_crate::Ops trait Ops { + parent_clause0 : [@TraitClause0]: MetaSized fn of_usize = of_usize[Self] } @@ -108,9 +121,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Ops, { - parent_clause0 = Sized<(usize)> - parent_clause1 = Tuple<(usize)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(usize)> + parent_clause1 = Sized<(usize)> + parent_clause2 = Tuple<(usize)> + parent_clause3 = Sized type Output = T fn call_once = {impl FnOnce<(usize)> for closure[@TraitClause0, @TraitClause1]}::call_once[@TraitClause0, @TraitClause1] } @@ -121,9 +135,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Ops, { - parent_clause0 = {impl FnOnce<(usize)> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(usize)> - parent_clause2 = Tuple<(usize)> + parent_clause0 = MetaSized<(usize)> + parent_clause1 = {impl FnOnce<(usize)> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(usize)> + parent_clause3 = Tuple<(usize)> fn call_mut<'_0> = {impl FnMut<(usize)> for closure[@TraitClause0, @TraitClause1]}::call_mut<'_0_0, T, const K : usize>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/comments.out b/charon/tests/ui/comments.out index f93ba5740..6ed8f1477 100644 --- a/charon/tests/ui/comments.out +++ b/charon/tests/ui/comments.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::default::Default #[lang_item("Default")] diff --git a/charon/tests/ui/constants.out b/charon/tests/ui/constants.out index f540f4dee..f3328802c 100644 --- a/charon/tests/ui/constants.out +++ b/charon/tests/ui/constants.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} pub fn core::num::{u32}::MAX() -> u32 diff --git a/charon/tests/ui/copy_nonoverlapping.out b/charon/tests/ui/copy_nonoverlapping.out index 52c808de3..0190dbd59 100644 --- a/charon/tests/ui/copy_nonoverlapping.out +++ b/charon/tests/ui/copy_nonoverlapping.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ptr::copy_nonoverlapping::precondition_check fn precondition_check(@1: *const (), @2: *mut (), @3: usize, @4: usize, @5: usize) diff --git a/charon/tests/ui/demo.out b/charon/tests/ui/demo.out index e54b9d165..dd20da777 100644 --- a/charon/tests/ui/demo.out +++ b/charon/tests/ui/demo.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: alloc::alloc::Global #[lang_item("global_alloc_ty")] @@ -167,7 +174,7 @@ pub enum CList where [@TraitClause0]: Sized, { - CCons(T, alloc::boxed::Box[@TraitClause0]>[Sized]), + CCons(T, alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]), CNil, } @@ -180,7 +187,7 @@ where let l@1: &'_ (CList[@TraitClause0]); // arg #1 let i@2: u32; // arg #2 let x@3: &'_ (T); // local - let tl@4: &'_ (alloc::boxed::Box[@TraitClause0]>[Sized]); // local + let tl@4: &'_ (alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]); // local let @5: bool; // anonymous local let @6: u32; // anonymous local let @7: &'_ (T); // anonymous local @@ -247,7 +254,7 @@ where let @3: &'_ mut (T); // anonymous local let @4: &'_ mut (T); // anonymous local let x@5: &'_ mut (T); // local - let tl@6: &'_ mut (alloc::boxed::Box[@TraitClause0]>[Sized]); // local + let tl@6: &'_ mut (alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]); // local let @7: &'_ mut (T); // anonymous local let @8: &'_ mut (T); // anonymous local let @9: bool; // anonymous local @@ -332,7 +339,7 @@ where let i@2: u32; // arg #2 let @3: (); // anonymous local let x@4: &'_ mut (T); // local - let tl@5: &'_ mut (alloc::boxed::Box[@TraitClause0]>[Sized]); // local + let tl@5: &'_ mut (alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]); // local let @6: (); // anonymous local let @7: bool; // anonymous local let @8: u32; // anonymous local @@ -450,7 +457,7 @@ where let l@1: &'_ mut (CList[@TraitClause0]); // arg #1 let @2: &'_ mut (CList[@TraitClause0]); // anonymous local let @3: &'_ mut (CList[@TraitClause0]); // anonymous local - let tl@4: &'_ mut (alloc::boxed::Box[@TraitClause0]>[Sized]); // local + let tl@4: &'_ mut (alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]); // local let @5: &'_ mut (CList[@TraitClause0]); // anonymous local let @6: &'_ mut (CList[@TraitClause0]); // anonymous local @@ -486,6 +493,7 @@ where // Full name: test_crate::Counter pub trait Counter { + parent_clause0 : [@TraitClause0]: MetaSized fn incr<'_0> = test_crate::Counter::incr<'_0_0, Self>[Self] } @@ -513,6 +521,7 @@ pub fn {impl Counter for usize}::incr<'_0>(@1: &'_0 mut (usize)) -> usize // Full name: test_crate::{impl Counter for usize} impl Counter for usize { + parent_clause0 = MetaSized fn incr<'_0> = {impl Counter for usize}::incr<'_0_0> } diff --git a/charon/tests/ui/dictionary_passing_style_woes.out b/charon/tests/ui/dictionary_passing_style_woes.out index 003ad50ce..d06ed9df5 100644 --- a/charon/tests/ui/dictionary_passing_style_woes.out +++ b/charon/tests/ui/dictionary_passing_style_woes.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -22,21 +29,31 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: test_crate::Iterator trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::IntoIterator trait IntoIterator { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator } // Full name: test_crate::{impl IntoIterator for I} @@ -45,9 +62,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Iterator, { - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1::parent_clause1 + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1 } // Full name: test_crate::callee @@ -86,7 +104,8 @@ where // Full name: test_crate::X trait X { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn method<'_0> = method<'_0_0, Self, Self_Assoc>[Self] } @@ -96,77 +115,79 @@ where [@TraitClause0]: X, // Full name: test_crate::A -trait A +trait A { - parent_clause0 : [@TraitClause0]: X + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: X } // Full name: test_crate::B -trait B +trait B { - parent_clause0 : [@TraitClause0]: X + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: X } // Full name: test_crate::a -fn a(@1: T) -> Clause1_Clause0_Assoc +fn a(@1: T) -> Clause1_Clause1_Assoc where [@TraitClause0]: Sized, - [@TraitClause1]: A, + [@TraitClause1]: A, { - let @0: Clause1_Clause0_Assoc; // return + let @0: Clause1_Clause1_Assoc; // return let x@1: T; // arg #1 let @2: &'_ (T); // anonymous local storage_live(@2) @2 := &x@1 - @0 := @TraitClause1::parent_clause0::method<'_>(move (@2)) + @0 := @TraitClause1::parent_clause1::method<'_>(move (@2)) storage_dead(@2) drop x@1 return } // Full name: test_crate::b -fn b(@1: T) -> Clause1_Clause0_Assoc +fn b(@1: T) -> Clause1_Clause1_Assoc where [@TraitClause0]: Sized, - [@TraitClause1]: B, + [@TraitClause1]: B, { - let @0: Clause1_Clause0_Assoc; // return + let @0: Clause1_Clause1_Assoc; // return let x@1: T; // arg #1 let @2: &'_ (T); // anonymous local storage_live(@2) @2 := &x@1 - @0 := @TraitClause1::parent_clause0::method<'_>(move (@2)) + @0 := @TraitClause1::parent_clause1::method<'_>(move (@2)) storage_dead(@2) drop x@1 return } // Full name: test_crate::x -fn x(@1: T) -> (Clause1_Clause0_Assoc, Clause1_Clause0_Assoc) +fn x(@1: T) -> (Clause1_Clause1_Assoc, Clause1_Clause1_Assoc) where [@TraitClause0]: Sized, - [@TraitClause1]: A, - [@TraitClause2]: B, + [@TraitClause1]: A, + [@TraitClause2]: B, [@TraitClause3]: Copy, { - let @0: (Clause1_Clause0_Assoc, Clause1_Clause0_Assoc); // return + let @0: (Clause1_Clause1_Assoc, Clause1_Clause1_Assoc); // return let x@1: T; // arg #1 - let @2: Clause1_Clause0_Assoc; // anonymous local + let @2: Clause1_Clause1_Assoc; // anonymous local let @3: T; // anonymous local - let @4: Clause1_Clause0_Assoc; // anonymous local + let @4: Clause1_Clause1_Assoc; // anonymous local let @5: T; // anonymous local storage_live(@2) storage_live(@3) @3 := copy (x@1) - @2 := a[@TraitClause0, @TraitClause1](move (@3)) + @2 := a[@TraitClause0, @TraitClause1](move (@3)) storage_dead(@3) storage_live(@4) storage_live(@5) @5 := copy (x@1) - @4 := b[@TraitClause0, @TraitClause2](move (@5)) + @4 := b[@TraitClause0, @TraitClause2](move (@5)) storage_dead(@5) @0 := (move (@2), move (@4)) drop @4 diff --git a/charon/tests/ui/dyn-trait.out b/charon/tests/ui/dyn-trait.out index fff44ab2a..351a550bc 100644 --- a/charon/tests/ui/dyn-trait.out +++ b/charon/tests/ui/dyn-trait.out @@ -9,9 +9,16 @@ pub opaque type Formatter<'a> where 'a : 'a, +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] @@ -48,6 +55,7 @@ pub opaque type String #[lang_item("ToString")] pub trait ToString { + parent_clause0 : [@TraitClause0]: MetaSized fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self>[Self] } @@ -59,18 +67,21 @@ where // Full name: alloc::string::{impl ToString for T}::to_string pub fn {impl ToString for T}::to_string<'_0, T>(@1: &'_0 (T)) -> String where - [@TraitClause0]: Display, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Display, // Full name: alloc::string::{impl ToString for T} impl ToString for T where - [@TraitClause0]: Display, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Display, { - fn to_string<'_0> = {impl ToString for T}::to_string<'_0_0, T>[@TraitClause0] + parent_clause0 = @TraitClause0 + fn to_string<'_0> = {impl ToString for T}::to_string<'_0_0, T>[@TraitClause0, @TraitClause1] } // Full name: test_crate::construct -fn construct(@1: T) -> alloc::boxed::Box[Sized] +fn construct(@1: T) -> alloc::boxed::Box[MetaSized, Sized] where [@TraitClause0]: Sized, [@TraitClause1]: Display, @@ -85,7 +96,7 @@ fn destruct<'_0>(@1: &'_0 (dyn (exists(TODO)))) -> String storage_live(@2) @2 := &*(x@1) - @0 := {impl ToString for T}::to_string<'_, dyn (exists(TODO))>[Display](move (@2)) + @0 := {impl ToString for T}::to_string<'_, dyn (exists(TODO))>[MetaSized, Display](move (@2)) storage_dead(@2) return } diff --git a/charon/tests/ui/external.out b/charon/tests/ui/external.out index a258e014c..b7083cf90 100644 --- a/charon/tests/ui/external.out +++ b/charon/tests/ui/external.out @@ -1,12 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::cell::Cell #[lang_item("Cell")] pub opaque type Cell +where + [@TraitClause0]: MetaSized, // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -20,17 +29,20 @@ pub trait Clone #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } -// Full name: core::cell::{Cell}::get -pub fn get<'_0, T>(@1: &'_0 (Cell)) -> T +// Full name: core::cell::{Cell[@TraitClause0::parent_clause0]}::get +pub fn get<'_0, T>(@1: &'_0 (Cell[@TraitClause0::parent_clause0])) -> T where [@TraitClause0]: Sized, [@TraitClause1]: Copy, -// Full name: core::cell::{Cell}::get_mut -pub fn get_mut<'_0, T>(@1: &'_0 mut (Cell)) -> &'_0 mut (T) +// Full name: core::cell::{Cell[@TraitClause0]}::get_mut +pub fn get_mut<'_0, T>(@1: &'_0 mut (Cell[@TraitClause0])) -> &'_0 mut (T) +where + [@TraitClause0]: MetaSized, #[lang_item("clone_fn")] pub fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self @@ -48,7 +60,15 @@ impl Clone for u32 { // Full name: core::marker::{impl Copy for u32} impl Copy for u32 { - parent_clause0 = {impl Clone for u32} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for u32} +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } #[lang_item("mem_swap")] @@ -70,11 +90,15 @@ impl Clone for NonZeroU32Inner { // Full name: core::num::niche_types::{impl Copy for NonZeroU32Inner} impl Copy for NonZeroU32Inner { - parent_clause0 = {impl Clone for NonZeroU32Inner} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for NonZeroU32Inner} } // Full name: core::num::nonzero::private::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::num::nonzero::ZeroablePrimitive pub trait ZeroablePrimitive @@ -88,7 +112,9 @@ pub trait ZeroablePrimitive } // Full name: core::num::nonzero::{impl Sealed for u32} -impl Sealed for u32 {} +impl Sealed for u32 { + parent_clause0 = MetaSized +} // Full name: core::num::nonzero::{impl ZeroablePrimitive for u32} impl ZeroablePrimitive for u32 { @@ -213,11 +239,11 @@ pub fn test_vec_push() } // Full name: test_crate::use_get -pub fn use_get<'_0>(@1: &'_0 (Cell)) -> u32 +pub fn use_get<'_0>(@1: &'_0 (Cell[MetaSized])) -> u32 { let @0: u32; // return - let rc@1: &'_ (Cell); // arg #1 - let @2: &'_ (Cell); // anonymous local + let rc@1: &'_ (Cell[MetaSized]); // arg #1 + let @2: &'_ (Cell[MetaSized]); // anonymous local storage_live(@2) @2 := &*(rc@1) @@ -227,19 +253,19 @@ pub fn use_get<'_0>(@1: &'_0 (Cell)) -> u32 } // Full name: test_crate::incr -pub fn incr<'_0>(@1: &'_0 mut (Cell)) +pub fn incr<'_0>(@1: &'_0 mut (Cell[MetaSized])) { let @0: (); // return - let rc@1: &'_ mut (Cell); // arg #1 + let rc@1: &'_ mut (Cell[MetaSized]); // arg #1 let @2: &'_ mut (u32); // anonymous local - let @3: &'_ mut (Cell); // anonymous local + let @3: &'_ mut (Cell[MetaSized]); // anonymous local let @4: u32; // anonymous local storage_live(@4) storage_live(@2) storage_live(@3) @3 := &two-phase-mut *(rc@1) - @2 := get_mut<'_, u32>(move (@3)) + @2 := get_mut<'_, u32>[MetaSized](move (@3)) storage_dead(@3) @4 := copy (*(@2)) + const (1 : u32) *(@2) := move (@4) diff --git a/charon/tests/ui/find-sized-clause.out b/charon/tests/ui/find-sized-clause.out index 23bebff1e..d29b43c51 100644 --- a/charon/tests/ui/find-sized-clause.out +++ b/charon/tests/ui/find-sized-clause.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -16,12 +23,17 @@ where // Full name: test_crate::Trait trait Trait +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::{impl Trait for Option[@TraitClause0]} impl Trait for Option[@TraitClause0] where [@TraitClause0]: Sized, -{} +{ + parent_clause0 = MetaSized[@TraitClause0]> +} diff --git a/charon/tests/ui/gosim-demo.out b/charon/tests/ui/gosim-demo.out index e7bbfc126..d9a32e509 100644 --- a/charon/tests/ui/gosim-demo.out +++ b/charon/tests/ui/gosim-demo.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -178,7 +185,8 @@ pub trait TrustedRandomAccessNoCoerce #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } @@ -217,11 +225,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] @@ -253,7 +262,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -269,23 +279,25 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -293,12 +305,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -315,9 +338,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -326,14 +350,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -346,7 +371,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -354,9 +380,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -371,7 +398,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -384,12 +411,13 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } @@ -411,7 +439,8 @@ impl<'a, T> Iterator for Iter<'a, T>[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (T)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<&'_ (T)> type Item = &'a (T) fn next<'_0> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::next<'a, '_0_0, T>[@TraitClause0] } @@ -426,9 +455,10 @@ impl<'a, T> IntoIterator for &'a (Slice) where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (T)> - parent_clause1 = Sized[@TraitClause0]> - parent_clause2 = {impl Iterator for Iter<'a, T>[@TraitClause0]}<'_, T>[@TraitClause0] + parent_clause0 = MetaSized<&'_ (Slice)> + parent_clause1 = Sized<&'_ (T)> + parent_clause2 = Sized[@TraitClause0]> + parent_clause3 = {impl Iterator for Iter<'a, T>[@TraitClause0]}<'_, T>[@TraitClause0] type Item = &'a (T) type IntoIter = Iter<'a, T>[@TraitClause0] fn into_iter = {impl IntoIterator for &'a (Slice)}::into_iter<'a, T>[@TraitClause0] @@ -456,22 +486,22 @@ where let @10: (); // anonymous local let @11: (); // anonymous local let @12: Arguments<'_>; // anonymous local - let @13: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local - let @14: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local - let @15: Array<&'_ (Str), 2 : usize>; // anonymous local - let @16: &'_ (Array, 1 : usize>); // anonymous local - let @17: &'_ (Array, 1 : usize>); // anonymous local - let @18: Array, 1 : usize>; // anonymous local - let @19: Argument<'_>; // anonymous local - let @20: &'_ (&'_ (T)); // anonymous local - let @21: &'_ (&'_ (T)); // anonymous local + let args@13: Array, 1 : usize>; // local + let @14: Argument<'_>; // anonymous local + let @15: &'_ (&'_ (T)); // anonymous local + let @16: &'_ (&'_ (T)); // anonymous local + let @17: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local + let @18: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local + let @19: Array<&'_ (Str), 2 : usize>; // anonymous local + let @20: &'_ (Array, 1 : usize>); // anonymous local + let @21: &'_ (Array, 1 : usize>); // anonymous local storage_live(@7) storage_live(x@9) storage_live(@10) storage_live(@11) storage_live(@12) - storage_live(@13) + storage_live(args@13) storage_live(@14) storage_live(@15) storage_live(@16) @@ -506,36 +536,36 @@ where storage_live(@10) storage_live(@11) storage_live(@12) - storage_live(@13) + storage_live(args@13) storage_live(@14) storage_live(@15) - @15 := [const ("- "), const ("\n")] - @14 := &@15 - @13 := &*(@14) storage_live(@16) + @16 := &x@9 + @15 := &*(@16) + @14 := new_debug<'_, '_, &'_ (T)>[Sized<&'_ (T)>, {impl Debug for &'_0 (T)}<'_, T>[@TraitClause1]](move (@15)) + storage_dead(@15) + args@13 := [move (@14)] + storage_dead(@14) storage_live(@17) storage_live(@18) storage_live(@19) + @19 := [const ("- "), const ("\n")] + @18 := &@19 + @17 := &*(@18) storage_live(@20) storage_live(@21) - @21 := &x@9 + @21 := &args@13 @20 := &*(@21) - @19 := new_debug<'_, '_, &'_ (T)>[Sized<&'_ (T)>, {impl Debug for &'_0 (T)}<'_, T>[@TraitClause1]](move (@20)) + @12 := new_v1<'_, 2 : usize, 1 : usize>(move (@17), move (@20)) + storage_dead(@21) storage_dead(@20) - @18 := [move (@19)] storage_dead(@19) - @17 := &@18 - @16 := &*(@17) - @12 := new_v1<'_, 2 : usize, 1 : usize>(move (@13), move (@16)) - storage_dead(@16) - storage_dead(@13) - @11 := _eprint<'_>(move (@12)) - storage_dead(@12) - storage_dead(@21) storage_dead(@18) storage_dead(@17) - storage_dead(@15) - storage_dead(@14) + @11 := _eprint<'_>(move (@12)) + storage_dead(@12) + storage_dead(@16) + storage_dead(args@13) storage_dead(@11) storage_dead(@10) storage_dead(x@9) diff --git a/charon/tests/ui/impl-trait.out b/charon/tests/ui/impl-trait.out index 741d33b45..b660929b1 100644 --- a/charon/tests/ui/impl-trait.out +++ b/charon/tests/ui/impl-trait.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -36,17 +43,28 @@ impl<'_0, T> Clone for &'_0 (T) { fn clone<'_0> = {impl Clone for &'_0 (T)}::clone<'_0, '_0_0, T> } +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -58,8 +76,9 @@ where // Full name: test_crate::Foo pub trait Foo { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Clone type Type fn get_ty<'_0> = test_crate::Foo::get_ty<'_0_0, Self>[Self] } @@ -88,8 +107,9 @@ pub fn {impl Foo for ()}::get_ty<'_0>(@1: &'_0 (())) -> &'_0 (u32) // Full name: test_crate::{impl Foo for ()} impl Foo for () { - parent_clause0 = Sized - parent_clause1 = {impl Clone for u32} + parent_clause0 = MetaSized<()> + parent_clause1 = Sized + parent_clause2 = {impl Clone for u32} type Type = u32 fn get_ty<'_0> = {impl Foo for ()}::get_ty<'_0_0> } @@ -139,8 +159,9 @@ fn use_foo() // Full name: test_crate::RPITIT pub trait RPITIT { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Foo + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Foo type fn make_foo = test_crate::RPITIT::make_foo[Self] } @@ -167,8 +188,9 @@ pub fn {impl RPITIT for ()}::make_foo() // Full name: test_crate::{impl RPITIT for ()} impl RPITIT for () { - parent_clause0 = Sized<()> - parent_clause1 = {impl Foo for ()} + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = {impl Foo for ()} type = () fn make_foo = {impl RPITIT for ()}::make_foo } @@ -181,9 +203,9 @@ where { let @0: (); // return let foo@1: @TraitClause1::; // local - let @2: @TraitClause1::parent_clause1::Type; // anonymous local - let @3: &'_ (@TraitClause1::parent_clause1::Type); // anonymous local - let @4: &'_ (@TraitClause1::parent_clause1::Type); // anonymous local + let @2: @TraitClause1::parent_clause2::Type; // anonymous local + let @3: &'_ (@TraitClause1::parent_clause2::Type); // anonymous local + let @4: &'_ (@TraitClause1::parent_clause2::Type); // anonymous local let @5: &'_ (@TraitClause1::); // anonymous local storage_live(foo@1) @@ -193,10 +215,10 @@ where storage_live(@4) storage_live(@5) @5 := &foo@1 - @4 := @TraitClause1::parent_clause1::get_ty<'_>(move (@5)) + @4 := @TraitClause1::parent_clause2::get_ty<'_>(move (@5)) @3 := &*(@4) storage_dead(@5) - @2 := @TraitClause1::parent_clause1::parent_clause1::clone<'_>(move (@3)) + @2 := @TraitClause1::parent_clause2::parent_clause2::clone<'_>(move (@3)) storage_dead(@3) drop @2 storage_dead(@4) @@ -259,9 +281,10 @@ impl<'_0, U> FnOnce<(&'_ (U))> for closure[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<(&'_ (U))> - parent_clause1 = Tuple<(&'_ (U))> - parent_clause2 = Sized[Sized<&'_ (U)>, {impl Clone for &'_0 (T)}<'_, U>]> + parent_clause0 = MetaSized<(&'_ (U))> + parent_clause1 = Sized<(&'_ (U))> + parent_clause2 = Tuple<(&'_ (U))> + parent_clause3 = Sized[Sized<&'_ (U)>, {impl Clone for &'_0 (T)}<'_, U>]> type Output = WrapClone<&'_ (U)>[Sized<&'_ (U)>, {impl Clone for &'_0 (T)}<'_, U>] fn call_once = {impl FnOnce<(&'_ (U))> for closure[@TraitClause0]}::call_once<'_0, U>[@TraitClause0] } diff --git a/charon/tests/ui/issue-114-opaque-bodies.out b/charon/tests/ui/issue-114-opaque-bodies.out index 6d126476a..6a862df5e 100644 --- a/charon/tests/ui/issue-114-opaque-bodies.out +++ b/charon/tests/ui/issue-114-opaque-bodies.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] diff --git a/charon/tests/ui/issue-118-generic-copy.out b/charon/tests/ui/issue-118-generic-copy.out index 9e3758789..33a5c1a8c 100644 --- a/charon/tests/ui/issue-118-generic-copy.out +++ b/charon/tests/ui/issue-118-generic-copy.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -21,7 +28,15 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: test_crate::Foo @@ -45,7 +60,8 @@ impl Clone for Foo { // Full name: test_crate::{impl Copy for Foo} impl Copy for Foo { - parent_clause0 = {impl Clone for Foo} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for Foo} } // Full name: test_crate::copy_foo @@ -92,8 +108,9 @@ where // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Copy + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Copy type Ty } diff --git a/charon/tests/ui/issue-120-bare-discriminant-read.out b/charon/tests/ui/issue-120-bare-discriminant-read.out index ecfe99728..5b43b1c6c 100644 --- a/charon/tests/ui/issue-120-bare-discriminant-read.out +++ b/charon/tests/ui/issue-120-bare-discriminant-read.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] diff --git a/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out b/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out index 8b6920ac8..a832ab667 100644 --- a/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out +++ b/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out @@ -1,8 +1,13 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: test_crate::Ops trait Ops { + parent_clause0 : [@TraitClause0]: MetaSized fn ZERO = test_crate::Ops::ZERO[Self] fn ntt_multiply = test_crate::Ops::ntt_multiply[Self] } @@ -46,6 +51,7 @@ fn {impl Ops for Portable}::ntt_multiply() -> Portable // Full name: test_crate::{impl Ops for Portable} impl Ops for Portable { + parent_clause0 = MetaSized fn ZERO = {impl Ops for Portable}::ZERO fn ntt_multiply = {impl Ops for Portable}::ntt_multiply } diff --git a/charon/tests/ui/issue-165-vec-macro.out b/charon/tests/ui/issue-165-vec-macro.out index 5a8083107..2fd2f1805 100644 --- a/charon/tests/ui/issue-165-vec-macro.out +++ b/charon/tests/ui/issue-165-vec-macro.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -26,6 +33,13 @@ impl Clone for i32 { fn clone<'_0> = {impl Clone for i32}::clone<'_0_0> } +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: alloc::alloc::Global #[lang_item("global_alloc_ty")] pub struct Global {} @@ -43,7 +57,7 @@ where // Full name: alloc::slice::{Slice}::into_vec #[lang_item("slice_into_vec")] -pub fn into_vec(@1: alloc::boxed::Box>[@TraitClause1]) -> Vec[@TraitClause0, @TraitClause1] +pub fn into_vec(@1: alloc::boxed::Box>[MetaSized>, @TraitClause1]) -> Vec[@TraitClause0, @TraitClause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -60,9 +74,9 @@ fn foo() { let @0: (); // return let _v@1: Vec[Sized, Sized]; // local - let @2: alloc::boxed::Box>[Sized]; // anonymous local - let @3: alloc::boxed::Box>[Sized]; // anonymous local - let @4: alloc::boxed::Box>[Sized]; // anonymous local + let @2: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local + let @3: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local + let @4: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local let _v2@5: Vec[Sized, Sized]; // local let @6: Array; // anonymous local @@ -72,9 +86,9 @@ fn foo() storage_live(@3) @6 := [const (1 : i32)] storage_live(@4) - @4 := @BoxNew>[Sized](move (@6)) + @4 := @BoxNew>[MetaSized>, Sized](move (@6)) @3 := move (@4) - @2 := unsize_cast>[Sized], alloc::boxed::Box>[Sized]>(move (@3)) + @2 := unsize_cast>[MetaSized>, Sized], alloc::boxed::Box>[MetaSized>, Sized]>(move (@3)) drop @3 drop @4 storage_dead(@4) @@ -100,9 +114,9 @@ pub fn bar() { let @0: (); // return let @1: Vec[Sized, Sized]; // anonymous local - let @2: alloc::boxed::Box>[Sized]; // anonymous local - let @3: alloc::boxed::Box>[Sized]; // anonymous local - let @4: alloc::boxed::Box>[Sized]; // anonymous local + let @2: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local + let @3: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local + let @4: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local let @5: Foo; // anonymous local let @6: Array; // anonymous local @@ -112,12 +126,12 @@ pub fn bar() storage_live(@3) @6 := [move (@5)] storage_live(@4) - @4 := @BoxNew>[Sized](move (@6)) + @4 := @BoxNew>[MetaSized>, Sized](move (@6)) storage_live(@5) @5 := Foo { } storage_dead(@5) @3 := move (@4) - @2 := unsize_cast>[Sized], alloc::boxed::Box>[Sized]>(move (@3)) + @2 := unsize_cast>[MetaSized>, Sized], alloc::boxed::Box>[MetaSized>, Sized]>(move (@3)) drop @3 drop @4 storage_dead(@4) diff --git a/charon/tests/ui/issue-297-cfg.out b/charon/tests/ui/issue-297-cfg.out index a11997442..bbc7ee7c2 100644 --- a/charon/tests/ui/issue-297-cfg.out +++ b/charon/tests/ui/issue-297-cfg.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -107,7 +114,8 @@ pub trait TrustedRandomAccessNoCoerce #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } @@ -146,11 +154,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] @@ -191,9 +200,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Iterator, { - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1::parent_clause1 + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1 type Item = @TraitClause1::Item type IntoIter = I fn into_iter = {impl IntoIterator for I}::into_iter[@TraitClause0, @TraitClause1] @@ -202,7 +212,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -218,23 +229,25 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -242,12 +255,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -264,9 +288,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -275,14 +300,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -295,7 +321,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -303,9 +330,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -320,7 +348,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -333,12 +361,13 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } @@ -359,7 +388,8 @@ impl<'a, T> Iterator for Chunks<'a, T>[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (Slice)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<&'_ (Slice)> type Item = &'a (Slice) fn next<'_0> = {impl Iterator for Chunks<'a, T>[@TraitClause0]}::next<'a, '_0_0, T>[@TraitClause0] } diff --git a/charon/tests/ui/issue-323-closure-borrow.out b/charon/tests/ui/issue-323-closure-borrow.out index 1298baaa9..3180f393f 100644 --- a/charon/tests/ui/issue-323-closure-borrow.out +++ b/charon/tests/ui/issue-323-closure-borrow.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,13 +34,14 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -113,18 +125,20 @@ fn {impl FnOnce<()> for closure<'_0>}::call_once<'_0>(@1: closure<'_0>, @2: ()) // Full name: test_crate::new::{impl FnOnce<()> for closure<'_0>} impl<'_0> FnOnce<()> for closure<'_0> { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized<()> type Output = () fn call_once = {impl FnOnce<()> for closure<'_0>}::call_once<'_0> } // Full name: test_crate::new::{impl FnMut<()> for closure<'_0>} impl<'_0> FnMut<()> for closure<'_0> { - parent_clause0 = {impl FnOnce<()> for closure<'_0>}<'_0> - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnOnce<()> for closure<'_0>}<'_0> + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call_mut<'_0> = {impl FnMut<()> for closure<'_0>}::call_mut<'_0, '_0_0> } diff --git a/charon/tests/ui/issue-369-mismatched-genericparams.out b/charon/tests/ui/issue-369-mismatched-genericparams.out index 4957bee88..1d3a7815e 100644 --- a/charon/tests/ui/issue-369-mismatched-genericparams.out +++ b/charon/tests/ui/issue-369-mismatched-genericparams.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -17,14 +24,16 @@ where // Full name: test_crate::FromResidual pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::Try pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized type Residual } @@ -33,7 +42,8 @@ impl FromResidual<()> for Option[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<()> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<()> } // Full name: test_crate::{impl Try for Option[@TraitClause0]} @@ -41,8 +51,9 @@ impl Try for Option[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = {impl FromResidual<()> for Option[@TraitClause0]}[@TraitClause0] - parent_clause1 = Sized<()> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = {impl FromResidual<()> for Option[@TraitClause0]}[@TraitClause0] + parent_clause2 = Sized<()> type Residual = () } diff --git a/charon/tests/ui/issue-372-type-param-out-of-range.out b/charon/tests/ui/issue-372-type-param-out-of-range.out index f91860fb8..9a85829b4 100644 --- a/charon/tests/ui/issue-372-type-param-out-of-range.out +++ b/charon/tests/ui/issue-372-type-param-out-of-range.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -23,14 +34,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -53,7 +65,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, - for<'_0> @TraitClause2::parent_clause0::Output = (), + for<'_0> @TraitClause2::parent_clause1::Output = (), { let @0: (); // return @@ -68,7 +80,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: for<'b> FnMut, - for<'b> @TraitClause2::parent_clause0::Output = (), + for<'b> @TraitClause2::parent_clause1::Output = (), { let @0: (); // return @@ -84,7 +96,7 @@ pub fn test_crate::{T}::f() where [@TraitClause0]: Sized, [@TraitClause1]: for<'_0> FnMut, - for<'_0> @TraitClause1::parent_clause0::Output = (), + for<'_0> @TraitClause1::parent_clause1::Output = (), { let @0: (); // return diff --git a/charon/tests/ui/issue-378-ctor-as-fn.out b/charon/tests/ui/issue-378-ctor-as-fn.out index dcbd06e27..d3940ef5b 100644 --- a/charon/tests/ui/issue-378-ctor-as-fn.out +++ b/charon/tests/ui/issue-378-ctor-as-fn.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] diff --git a/charon/tests/ui/issue-394-rpit-with-lifetime.out b/charon/tests/ui/issue-394-rpit-with-lifetime.out index 8a6c57003..4b293b547 100644 --- a/charon/tests/ui/issue-394-rpit-with-lifetime.out +++ b/charon/tests/ui/issue-394-rpit-with-lifetime.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -50,9 +62,9 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, - @TraitClause2::parent_clause0::Output = Option[@TraitClause0], + @TraitClause2::parent_clause1::Output = Option[@TraitClause0], -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -91,18 +103,20 @@ fn {impl FnOnce<()> for closure<'_>}::call_once<'a>(@1: closure<'_>, @2: ()) -> // Full name: test_crate::sparse_transitions::{impl FnOnce<()> for closure<'_>} impl<'a> FnOnce<()> for closure<'_> { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized[Sized]> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized[Sized]> type Output = Option[Sized] fn call_once = {impl FnOnce<()> for closure<'_>}::call_once<'a> } // Full name: test_crate::sparse_transitions::{impl FnMut<()> for closure<'_>} impl<'a> FnMut<()> for closure<'_> { - parent_clause0 = {impl FnOnce<()> for closure<'_>}<'_> - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnOnce<()> for closure<'_>}<'_> + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call_mut<'_0> = {impl FnMut<()> for closure<'_>}::call_mut<'a, '_0_0> } diff --git a/charon/tests/ui/issue-395-failed-to-normalize.out b/charon/tests/ui/issue-395-failed-to-normalize.out index 1131f94ac..651eaf433 100644 --- a/charon/tests/ui/issue-395-failed-to-normalize.out +++ b/charon/tests/ui/issue-395-failed-to-normalize.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -107,7 +114,8 @@ pub trait TrustedRandomAccessNoCoerce #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = next<'_0_0, Self>[Self] } @@ -146,11 +154,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = into_iter[Self] @@ -183,7 +192,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -199,24 +209,26 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } // Full name: core::iter::traits::iterator::Iterator::next #[lang_item("next")] -pub fn next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -224,12 +236,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -246,9 +269,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -257,14 +281,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -277,7 +302,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -285,9 +311,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -302,7 +329,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -315,19 +342,21 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } // Full name: test_crate::Trait pub trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type AssocType } @@ -339,7 +368,8 @@ where // Full name: test_crate::C pub trait C { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::S diff --git a/charon/tests/ui/issue-4-slice-try-into-array.out b/charon/tests/ui/issue-4-slice-try-into-array.out index 2caff3b20..c33736dc2 100644 --- a/charon/tests/ui/issue-4-slice-try-into-array.out +++ b/charon/tests/ui/issue-4-slice-try-into-array.out @@ -6,9 +6,16 @@ pub opaque type Formatter<'a> where 'a : 'a, +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] @@ -65,7 +72,8 @@ pub trait Clone #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::array::{impl TryFrom<&'_0 (Slice)> for Array}::try_from @@ -148,7 +156,15 @@ where // Full name: core::marker::{impl Copy for u8} impl Copy for u8 { - parent_clause0 = {impl Clone for u8} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for u8} +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::result::{Result[@TraitClause0, @TraitClause1]}::unwrap diff --git a/charon/tests/ui/issue-4-traits.out b/charon/tests/ui/issue-4-traits.out index 1c37b02c1..b94e763eb 100644 --- a/charon/tests/ui/issue-4-traits.out +++ b/charon/tests/ui/issue-4-traits.out @@ -6,9 +6,16 @@ pub opaque type Formatter<'a> where 'a : 'a, +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] @@ -65,7 +72,8 @@ pub trait Clone #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::array::{impl TryFrom<&'_0 (Slice)> for Array}::try_from @@ -148,7 +156,15 @@ where // Full name: core::marker::{impl Copy for u8} impl Copy for u8 { - parent_clause0 = {impl Clone for u8} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for u8} +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::result::{Result[@TraitClause0, @TraitClause1]}::unwrap diff --git a/charon/tests/ui/issue-45-misc.out b/charon/tests/ui/issue-45-misc.out index 478db77f3..9b7db684e 100644 --- a/charon/tests/ui/issue-45-misc.out +++ b/charon/tests/ui/issue-45-misc.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -35,7 +47,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = U, + @TraitClause3::parent_clause1::Output = U, // Full name: core::clone::Clone #[lang_item("clone")] @@ -168,6 +180,7 @@ pub trait TrustedRandomAccessNoCoerce } // Full name: core::iter::range::Step +#[lang_item("range_step")] pub trait Step { parent_clause0 : [@TraitClause0]: Sized @@ -213,7 +226,8 @@ impl Step for u8 { #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } @@ -240,7 +254,8 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Step, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = @TraitClause0 type Item = A fn next<'_0> = {impl Iterator for Range[@TraitClause0]}::next<'_0_0, A>[@TraitClause0, @TraitClause1] } @@ -279,11 +294,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] @@ -324,9 +340,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Iterator, { - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1::parent_clause1 + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1 type Item = @TraitClause1::Item type IntoIter = I fn into_iter = {impl IntoIterator for I}::into_iter[@TraitClause0, @TraitClause1] @@ -335,7 +352,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -351,23 +369,25 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -375,7 +395,15 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::ops::control_flow::ControlFlow @@ -389,7 +417,7 @@ where Break(B), } -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -401,7 +429,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -409,9 +438,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -426,7 +456,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -439,12 +469,13 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } @@ -494,18 +525,20 @@ fn {impl FnOnce<(i32)> for closure}::call_once(@1: closure, @2: (i32)) -> i32 // Full name: test_crate::map::{impl FnOnce<(i32)> for closure} impl FnOnce<(i32)> for closure { - parent_clause0 = Sized<(i32)> - parent_clause1 = Tuple<(i32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(i32)> + parent_clause1 = Sized<(i32)> + parent_clause2 = Tuple<(i32)> + parent_clause3 = Sized type Output = i32 fn call_once = {impl FnOnce<(i32)> for closure}::call_once } // Full name: test_crate::map::{impl FnMut<(i32)> for closure} impl FnMut<(i32)> for closure { - parent_clause0 = {impl FnOnce<(i32)> for closure} - parent_clause1 = Sized<(i32)> - parent_clause2 = Tuple<(i32)> + parent_clause0 = MetaSized<(i32)> + parent_clause1 = {impl FnOnce<(i32)> for closure} + parent_clause2 = Sized<(i32)> + parent_clause3 = Tuple<(i32)> fn call_mut<'_0> = {impl FnMut<(i32)> for closure}::call_mut<'_0_0> } diff --git a/charon/tests/ui/issue-70-override-provided-method.2.out b/charon/tests/ui/issue-70-override-provided-method.2.out index e1fb270d1..e4c106d92 100644 --- a/charon/tests/ui/issue-70-override-provided-method.2.out +++ b/charon/tests/ui/issue-70-override-provided-method.2.out @@ -1,8 +1,13 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: test_crate::Trait trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized fn required<'_0> = test_crate::Trait::required<'_0_0, Self>[Self] fn provided1<'_0> = test_crate::Trait::provided1<'_0_0, Self>[Self] fn provided2<'_0> = provided2<'_0_0, Self>[Self] @@ -145,6 +150,7 @@ fn test_crate::{impl Trait for Foo}::provided2<'_0>(@1: &'_0 (Foo)) // Full name: test_crate::{impl Trait for Foo} impl Trait for Foo { + parent_clause0 = MetaSized fn required<'_0> = {impl Trait for Foo}::required<'_0_0> fn provided1<'_0> = test_crate::{impl Trait for Foo}::provided1<'_0_0> fn provided2<'_0> = test_crate::{impl Trait for Foo}::provided2<'_0_0> @@ -219,6 +225,7 @@ fn test_crate::{impl Trait for Bar}::provided2<'_0>(@1: &'_0 (Bar)) // Full name: test_crate::{impl Trait for Bar} impl Trait for Bar { + parent_clause0 = MetaSized fn required<'_0> = {impl Trait for Bar}::required<'_0_0> fn provided1<'_0> = {impl Trait for Bar}::provided1<'_0_0> fn provided2<'_0> = test_crate::{impl Trait for Bar}::provided2<'_0_0> diff --git a/charon/tests/ui/issue-70-override-provided-method.3.out b/charon/tests/ui/issue-70-override-provided-method.3.out index 76356fee2..26df841b4 100644 --- a/charon/tests/ui/issue-70-override-provided-method.3.out +++ b/charon/tests/ui/issue-70-override-provided-method.3.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -34,7 +41,15 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::option::Option @@ -66,8 +81,9 @@ where // Full name: test_crate::GenericTrait trait GenericTrait { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Clone fn other_method = test_crate::GenericTrait::other_method[Self] fn provided, [@TraitClause1]: PartialEq> = test_crate::GenericTrait::provided[Self, @TraitClause0_0, @TraitClause0_1] } @@ -176,8 +192,9 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Copy, { - parent_clause0 = Sized[@TraitClause0]> - parent_clause1 = {impl Clone for Option[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause0] + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized[@TraitClause0]> + parent_clause2 = {impl Clone for Option[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause1] fn other_method = {impl GenericTrait[@TraitClause0]> for Override[@TraitClause0]}::other_method[@TraitClause0, @TraitClause1] fn provided, [@TraitClause1]: PartialEq[@TraitClause0]>> = {impl GenericTrait[@TraitClause0]> for Override[@TraitClause0]}::provided[@TraitClause0, @TraitClause1, @TraitClause0_0, @TraitClause0_1] } @@ -246,8 +263,9 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Copy, { - parent_clause0 = Sized[@TraitClause0]> - parent_clause1 = {impl Clone for Option[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause0] + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized[@TraitClause0]> + parent_clause2 = {impl Clone for Option[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause1] fn other_method = {impl GenericTrait[@TraitClause0]> for NoOverride[@TraitClause0]}::other_method[@TraitClause0, @TraitClause1] fn provided, [@TraitClause1]: PartialEq[@TraitClause0]>> = test_crate::{impl GenericTrait[@TraitClause0]> for NoOverride[@TraitClause0]}::provided[@TraitClause0, @TraitClause1, @TraitClause0_0, @TraitClause0_1] } diff --git a/charon/tests/ui/issue-70-override-provided-method.out b/charon/tests/ui/issue-70-override-provided-method.out index 56091cc00..fa972f036 100644 --- a/charon/tests/ui/issue-70-override-provided-method.out +++ b/charon/tests/ui/issue-70-override-provided-method.out @@ -20,9 +20,16 @@ pub enum Ordering { Greater, } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -75,6 +82,9 @@ impl PartialOrd for u32 { // Full name: core::marker::StructuralPartialEq #[lang_item("structural_peq")] pub trait StructuralPartialEq +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::{impl PartialEq[@TraitClause0]> for Option[@TraitClause0]}::eq pub fn {impl PartialEq[@TraitClause0]> for Option[@TraitClause0]}::eq<'_0, '_1, T>(@1: &'_0 (Option[@TraitClause0]), @2: &'_1 (Option[@TraitClause0])) -> bool @@ -127,7 +137,9 @@ struct Foo { } // Full name: test_crate::{impl StructuralPartialEq for Foo} -impl StructuralPartialEq for Foo {} +impl StructuralPartialEq for Foo { + parent_clause0 = MetaSized +} // Full name: test_crate::{impl PartialEq for Foo}::eq pub fn {impl PartialEq for Foo}::eq<'_0, '_1>(@1: &'_0 (Foo), @2: &'_1 (Foo)) -> bool diff --git a/charon/tests/ui/issue-72-hash-missing-impl.out b/charon/tests/ui/issue-72-hash-missing-impl.out index 284e5e0d8..d0fb04f3b 100644 --- a/charon/tests/ui/issue-72-hash-missing-impl.out +++ b/charon/tests/ui/issue-72-hash-missing-impl.out @@ -1,21 +1,34 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Hasher pub trait Hasher +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::DefaultHasher pub struct DefaultHasher {} // Full name: test_crate::{impl Hasher for DefaultHasher} -impl Hasher for DefaultHasher {} +impl Hasher for DefaultHasher { + parent_clause0 = MetaSized +} // Full name: test_crate::Hash pub trait Hash { + parent_clause0 : [@TraitClause0]: MetaSized fn hash<'_0, '_1, H, [@TraitClause0]: Sized, [@TraitClause1]: Hasher> = test_crate::Hash::hash<'_0_0, '_0_1, Self, H>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -42,6 +55,7 @@ where // Full name: test_crate::{impl Hash for u32} impl Hash for u32 { + parent_clause0 = MetaSized fn hash<'_0, '_1, H, [@TraitClause0]: Sized, [@TraitClause1]: Hasher> = {impl Hash for u32}::hash<'_0_0, '_0_1, H>[@TraitClause0_0, @TraitClause0_1] } diff --git a/charon/tests/ui/issue-91-enum-to-discriminant-cast.out b/charon/tests/ui/issue-91-enum-to-discriminant-cast.out index e34174d77..38bc698fe 100644 --- a/charon/tests/ui/issue-91-enum-to-discriminant-cast.out +++ b/charon/tests/ui/issue-91-enum-to-discriminant-cast.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -21,7 +28,15 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: test_crate::Foo @@ -48,7 +63,8 @@ impl Clone for Foo { // Full name: test_crate::{impl Copy for Foo} impl Copy for Foo { - parent_clause0 = {impl Clone for Foo} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for Foo} } // Full name: test_crate::Ordering diff --git a/charon/tests/ui/issue-93-recursive-traits-with-assoc-types.out b/charon/tests/ui/issue-93-recursive-traits-with-assoc-types.out index 4d93dc20e..e15acc468 100644 --- a/charon/tests/ui/issue-93-recursive-traits-with-assoc-types.out +++ b/charon/tests/ui/issue-93-recursive-traits-with-assoc-types.out @@ -1,22 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait1 pub trait Trait1 { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Trait2 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Trait2 type T } // Full name: test_crate::Trait2 pub trait Trait2 { - parent_clause0 : [@TraitClause0]: Trait1 - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Trait1 + parent_clause2 : [@TraitClause2]: Sized type U } diff --git a/charon/tests/ui/issue-94-recursive-trait-defns.out b/charon/tests/ui/issue-94-recursive-trait-defns.out index a9f166ef5..14b06d271 100644 --- a/charon/tests/ui/issue-94-recursive-trait-defns.out +++ b/charon/tests/ui/issue-94-recursive-trait-defns.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait1 pub trait Trait1 @@ -16,7 +23,8 @@ pub trait Trait1 // Full name: test_crate::Trait2 pub trait Trait2 { - parent_clause0 : [@TraitClause0]: Trait1 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Trait1 } // Full name: test_crate::T1 @@ -38,23 +46,26 @@ pub trait T2 // Full name: test_crate::T3 pub trait T3 { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: T5 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: T5 type T } // Full name: test_crate::T5 pub trait T5 { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: T4 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: T4 type T } // Full name: test_crate::T4 pub trait T4 { - parent_clause0 : [@TraitClause0]: T3 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: T3 } // Full name: test_crate::T6 @@ -69,7 +80,8 @@ pub trait T6 // Full name: test_crate::T7 pub trait T7 { - parent_clause0 : [@TraitClause0]: T6 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: T6 fn g = g[Self] } diff --git a/charon/tests/ui/issue-97-missing-parent-item-clause.out b/charon/tests/ui/issue-97-missing-parent-item-clause.out index 2c59fd317..056b9ad9b 100644 --- a/charon/tests/ui/issue-97-missing-parent-item-clause.out +++ b/charon/tests/ui/issue-97-missing-parent-item-clause.out @@ -1,11 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Ord pub trait Ord +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::AVLTree pub struct AVLTree @@ -28,7 +38,9 @@ where } // Full name: test_crate::{impl Ord for u32} -impl Ord for u32 {} +impl Ord for u32 { + parent_clause0 = MetaSized +} // Full name: test_crate::test pub fn test(@1: AVLTree[Sized]) diff --git a/charon/tests/ui/iterator.out b/charon/tests/ui/iterator.out index 3dc2d4924..c5836f59c 100644 --- a/charon/tests/ui/iterator.out +++ b/charon/tests/ui/iterator.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::array::iter::IntoIter #[lang_item("ArrayIntoIter")] @@ -31,24 +38,35 @@ where Err(E), } +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::clone::Clone #[lang_item("clone")] pub trait Clone { parent_clause0 : [@TraitClause0]: Sized fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] - fn clone_from<'_0, '_1> = clone_from<'_0_0, '_0_1, Self>[Self] + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = clone_from<'_0_0, '_0_1, Self>[Self, @TraitClause0_0] } // Full name: core::marker::Copy #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::num::nonzero::private::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::num::nonzero::ZeroablePrimitive pub trait ZeroablePrimitive @@ -72,21 +90,26 @@ where pub fn {impl Clone for usize}::clone<'_0>(@1: &'_0 (usize)) -> usize pub fn core::clone::impls::{impl Clone for usize}::clone_from<'_0, '_1>(@1: &'_0 mut (usize), @2: &'_1 (usize)) +where + [@TraitClause0]: Destruct, // Full name: core::clone::impls::{impl Clone for usize} impl Clone for usize { parent_clause0 = Sized fn clone<'_0> = {impl Clone for usize}::clone<'_0_0> - fn clone_from<'_0, '_1> = core::clone::impls::{impl Clone for usize}::clone_from<'_0_0, '_0_1> + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = core::clone::impls::{impl Clone for usize}::clone_from<'_0_0, '_0_1>[@TraitClause0_0] } // Full name: core::marker::{impl Copy for usize} impl Copy for usize { - parent_clause0 = {impl Clone for usize} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for usize} } // Full name: core::num::nonzero::{impl Sealed for usize} -impl Sealed for usize {} +impl Sealed for usize { + parent_clause0 = MetaSized +} // Full name: core::num::niche_types::NonZeroUsizeInner pub opaque type NonZeroUsizeInner @@ -95,17 +118,20 @@ pub opaque type NonZeroUsizeInner pub fn {impl Clone for NonZeroUsizeInner}::clone<'_0>(@1: &'_0 (NonZeroUsizeInner)) -> NonZeroUsizeInner pub fn core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_0, '_1>(@1: &'_0 mut (NonZeroUsizeInner), @2: &'_1 (NonZeroUsizeInner)) +where + [@TraitClause0]: Destruct, // Full name: core::num::niche_types::{impl Clone for NonZeroUsizeInner} impl Clone for NonZeroUsizeInner { parent_clause0 = Sized fn clone<'_0> = {impl Clone for NonZeroUsizeInner}::clone<'_0_0> - fn clone_from<'_0, '_1> = core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_0_0, '_0_1> + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_0_0, '_0_1>[@TraitClause0_0] } // Full name: core::num::niche_types::{impl Copy for NonZeroUsizeInner} impl Copy for NonZeroUsizeInner { - parent_clause0 = {impl Clone for NonZeroUsizeInner} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for NonZeroUsizeInner} } // Full name: core::num::nonzero::{impl ZeroablePrimitive for usize} @@ -138,14 +164,18 @@ where // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -154,9 +184,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } @@ -234,7 +265,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -253,9 +285,10 @@ where #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -265,12 +298,13 @@ pub trait Try // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } @@ -358,11 +392,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] @@ -372,7 +407,8 @@ where #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] fn next_chunk<'_0, const N : usize, [@TraitClause0]: Sized> = next_chunk<'_0_0, Self, const N : usize>[Self, @TraitClause0_0] @@ -385,49 +421,49 @@ pub trait Iterator fn chain, [@TraitClause1]: Sized, [@TraitClause2]: IntoIterator, @TraitClause1_2::Item = Self::Item> = chain[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn zip, [@TraitClause1]: Sized, [@TraitClause2]: IntoIterator> = zip[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn intersperse<[@TraitClause0]: Sized, [@TraitClause1]: Clone> = intersperse[Self, @TraitClause0_0, @TraitClause0_1] - fn intersperse_with, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = Self::Item> = intersperse_with[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = B> = map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn for_each, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = ()> = core::iter::traits::iterator::Iterator::for_each[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = filter[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = filter_map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn intersperse_with, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = Self::Item> = intersperse_with[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = B> = map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn for_each, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = ()> = core::iter::traits::iterator::Iterator::for_each[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = filter[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = filter_map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn enumerate<[@TraitClause0]: Sized> = enumerate[Self, @TraitClause0_0] fn peekable<[@TraitClause0]: Sized> = peekable[Self, @TraitClause0_0] - fn skip_while, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = skip_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn take_while, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = take_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = map_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip_while, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = skip_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn take_while, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = take_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = map_while[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn skip<[@TraitClause0]: Sized> = skip[Self, @TraitClause0_0] fn take<[@TraitClause0]: Sized> = take[Self, @TraitClause0_0] - fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = Option[@TraitClause1_1]> = scan[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = U> = flat_map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = Option[@TraitClause1_1]> = scan[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = U> = flat_map[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn flatten<[@TraitClause0]: Sized, [@TraitClause1]: IntoIterator> = flatten[Self, @TraitClause0_0, @TraitClause0_1] - fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut))>, for<'_0> @TraitClause1_3::parent_clause0::Output = R> = map_windows[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut))>, for<'_0> @TraitClause1_3::parent_clause1::Output = R> = map_windows[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn fuse<[@TraitClause0]: Sized> = fuse[Self, @TraitClause0_0] - fn inspect, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = ()> = inspect[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn inspect, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = ()> = inspect[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn by_ref<'_0, [@TraitClause0]: Sized> = by_ref<'_0_0, Self>[Self, @TraitClause0_0] fn collect, [@TraitClause1]: FromIterator, [@TraitClause2]: Sized> = collect[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn try_collect<'_0, B, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Try, [@TraitClause3]: Residual<@TraitClause1_2::Residual, B>, [@TraitClause4]: FromIterator> = try_collect<'_0_0, Self, B>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn collect_into<'_0, E, [@TraitClause0]: Sized, [@TraitClause1]: Extend, [@TraitClause2]: Sized> = collect_into<'_0_0, Self, E>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Default, [@TraitClause4]: Extend, [@TraitClause5]: for<'_0> FnMut, for<'_0> @TraitClause1_5::parent_clause0::Output = bool> = partition[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: DoubleEndedIterator, [@TraitClause4]: for<'_0> FnMut, T : 'a, Self::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause0::Output = bool> = partition_in_place<'a, Self, T, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_partitioned, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = is_partitioned[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::iter::traits::iterator::Iterator::try_fold<'_0_0, Self, B, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, [@TraitClause4]: Try, @TraitClause1_3::parent_clause0::Output = R, @TraitClause1_4::Output = ()> = try_for_each<'_0_0, Self, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn fold, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::fold[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn reduce, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = Self::Item> = reduce[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[Self::parent_clause0]>, [@TraitClause5]: FnMut R, (Self::Item, Self::Item)>, @TraitClause1_3::Output = Self::Item, @TraitClause1_5::parent_clause0::Output = R> = try_reduce<'_0_0, Self, R, impl FnMut(Self::Item, Self::Item) -> R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::all<'_0_0, Self, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::any<'_0_0, Self, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::find<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::iter::traits::iterator::Iterator::find_map<'_0_0, Self, B, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[Self::parent_clause0]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (Self::Item))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause0::Output = R> = try_find<'_0_0, Self, R, impl FnMut(&Self::Item) -> R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::position<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut, [@TraitClause2]: Sized, [@TraitClause3]: ExactSizeIterator, [@TraitClause4]: DoubleEndedIterator, @TraitClause1_1::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::rposition<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Default, [@TraitClause4]: Extend, [@TraitClause5]: for<'_0> FnMut, for<'_0> @TraitClause1_5::parent_clause1::Output = bool> = partition[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: DoubleEndedIterator, [@TraitClause4]: for<'_0> FnMut, T : 'a, Self::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause1::Output = bool> = partition_in_place<'a, Self, T, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_partitioned, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = is_partitioned[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause1::Output = R, @TraitClause1_5::Output = B> = core::iter::traits::iterator::Iterator::try_fold<'_0_0, Self, B, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, [@TraitClause4]: Try, @TraitClause1_3::parent_clause1::Output = R, @TraitClause1_4::Output = ()> = try_for_each<'_0_0, Self, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn fold, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = B> = core::iter::traits::iterator::Iterator::fold[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn reduce, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = Self::Item> = reduce[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[Self::parent_clause1]>, [@TraitClause5]: FnMut R, (Self::Item, Self::Item)>, @TraitClause1_3::Output = Self::Item, @TraitClause1_5::parent_clause1::Output = R> = try_reduce<'_0_0, Self, R, impl FnMut(Self::Item, Self::Item) -> R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::iter::traits::iterator::Iterator::all<'_0_0, Self, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::iter::traits::iterator::Iterator::any<'_0_0, Self, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::iter::traits::iterator::Iterator::find<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::iter::traits::iterator::Iterator::find_map<'_0_0, Self, B, F>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[Self::parent_clause1]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (Self::Item))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause1::Output = R> = try_find<'_0_0, Self, R, impl FnMut(&Self::Item) -> R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::iter::traits::iterator::Iterator::position<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = rfind<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_rfold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause1::Output = R, @TraitClause1_5::Output = B> = try_rfold<'_0_0, Self, B, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn rfold, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = B> = rfold[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn rfind<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = rfind<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn len<'_0> = len<'_0_0, Self>[Self] fn is_empty<'_0> = is_empty<'_0_0, Self>[Self] } @@ -571,7 +610,7 @@ pub fn {impl Iterator for IntoIter[@TraitClause0]}::next<'_0 where [@TraitClause0]: Sized, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::next_chunk<'_0, T, const N : usize, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0])) -> Result, IntoIter[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0]>[Sized>, Sized[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0]>] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::next_chunk<'_0, T, const N : usize, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0])) -> Result, IntoIter[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1]>[Sized>, Sized[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1]>] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, @@ -596,7 +635,7 @@ pub fn {impl Iterator for IntoIter[@TraitClause0]}::advance_ where [@TraitClause0]: Sized, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::nth<'_0, T, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: usize) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::nth<'_0, T, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: usize) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, @@ -605,7 +644,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::chain(@1: IntoIter[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::chain(@1: IntoIter[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -613,7 +652,7 @@ where [@TraitClause3]: IntoIterator, @TraitClause3::Item = T, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::zip(@1: IntoIter[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::zip(@1: IntoIter[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -632,7 +671,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = T, + @TraitClause3::parent_clause1::Output = T, #[lang_item("IteratorMap")] pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map(@1: IntoIter[@TraitClause0], @2: F) -> Map[@TraitClause0], F>[@TraitClause3, @TraitClause2] @@ -642,7 +681,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::for_each(@1: IntoIter[@TraitClause0], @2: F) where @@ -650,7 +689,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = (), + @TraitClause3::parent_clause1::Output = (), #[lang_item("iter_filter")] pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::filter(@1: IntoIter[@TraitClause0], @2: P) -> Filter[@TraitClause0], P>[@TraitClause2, @TraitClause1] @@ -659,7 +698,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::filter_map(@1: IntoIter[@TraitClause0], @2: F) -> FilterMap[@TraitClause0], F>[@TraitClause3, @TraitClause2] where @@ -668,7 +707,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], #[lang_item("enumerate_method")] pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::enumerate(@1: IntoIter[@TraitClause0]) -> Enumerate[@TraitClause0]>[@TraitClause1] @@ -687,7 +726,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::take_while(@1: IntoIter[@TraitClause0], @2: P) -> TakeWhile[@TraitClause0], P>[@TraitClause2, @TraitClause1] where @@ -695,7 +734,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map_while(@1: IntoIter[@TraitClause0], @2: P) -> MapWhile[@TraitClause0], P>[@TraitClause3, @TraitClause2] where @@ -704,7 +743,7 @@ where [@TraitClause2]: Sized

, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::skip(@1: IntoIter[@TraitClause0], @2: usize) -> Skip[@TraitClause0]>[@TraitClause1] where @@ -724,7 +763,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = Option[@TraitClause2], + for<'_0> @TraitClause5::parent_clause1::Output = Option[@TraitClause2], pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::flat_map(@1: IntoIter[@TraitClause0], @2: F) -> FlatMap[@TraitClause0], U, F>[@TraitClause3, @TraitClause1, @TraitClause2, @TraitClause4] where @@ -734,7 +773,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = U, + @TraitClause5::parent_clause1::Output = U, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::flatten(@1: IntoIter[@TraitClause0]) -> Flatten[@TraitClause0]>[@TraitClause1, {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0], @TraitClause2] where @@ -749,7 +788,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut))>, - for<'_0> @TraitClause4::parent_clause0::Output = R, + for<'_0> @TraitClause4::parent_clause1::Output = R, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::fuse(@1: IntoIter[@TraitClause0]) -> Fuse[@TraitClause0]>[@TraitClause1] where @@ -762,7 +801,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = (), + for<'_0> @TraitClause3::parent_clause1::Output = (), pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::by_ref<'_0, T, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0])) -> &'_0 mut (IntoIter[@TraitClause0]) where @@ -802,7 +841,7 @@ where [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: for<'_0> FnMut, - for<'_0> @TraitClause6::parent_clause0::Output = bool, + for<'_0> @TraitClause6::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partition_in_place<'a, T, T, P, const N : usize>(@1: IntoIter[@TraitClause0], @2: P) -> usize where @@ -814,7 +853,7 @@ where [@TraitClause5]: for<'_0> FnMut, T : 'a, {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::Item = &'a mut (T), - for<'_0> @TraitClause5::parent_clause0::Output = bool, + for<'_0> @TraitClause5::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_partitioned(@1: IntoIter[@TraitClause0], @2: P) -> bool where @@ -822,7 +861,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, // Full name: core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_fold pub fn {impl Iterator for IntoIter[@TraitClause0]}::try_fold<'_0, T, B, F, R, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: B, @3: F) -> R @@ -834,7 +873,7 @@ where [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: FnMut, [@TraitClause6]: Try, - @TraitClause5::parent_clause0::Output = R, + @TraitClause5::parent_clause1::Output = R, @TraitClause6::Output = B, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_for_each<'_0, T, F, R, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: F) -> R @@ -845,7 +884,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: Try, - @TraitClause4::parent_clause0::Output = R, + @TraitClause4::parent_clause1::Output = R, @TraitClause5::Output = (), // Full name: core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::fold @@ -855,15 +894,15 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = Acc, + @TraitClause3::parent_clause1::Output = Acc, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::reduce(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::reduce(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = T, + @TraitClause3::parent_clause1::Output = T, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_reduce<'_0, T, R, impl FnMut(Self::Item, Self::Item) -> R, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause5::TryType where @@ -872,10 +911,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1]>, [@TraitClause6]: FnMut R, (T, T)>, @TraitClause4::Output = T, - @TraitClause6::parent_clause0::Output = R, + @TraitClause6::parent_clause1::Output = R, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::all<'_0, T, F, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: F) -> bool where @@ -883,7 +922,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::any<'_0, T, F, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: F) -> bool where @@ -891,15 +930,15 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find<'_0, T, P, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: P) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find<'_0, T, P, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: P) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find_map<'_0, T, B, F, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: F) -> Option[@TraitClause1] where @@ -908,7 +947,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_find<'_0, T, R, impl FnMut(&Self::Item) -> R, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause5::TryType where @@ -917,10 +956,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1]>, [@TraitClause6]: for<'_0> FnMut R, (&'_0_0 (T))>, @TraitClause4::Output = bool, - for<'_0> @TraitClause6::parent_clause0::Output = R, + for<'_0> @TraitClause6::parent_clause1::Output = R, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::position<'_0, T, P, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: P) -> Option[Sized] where @@ -928,7 +967,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::rposition<'_0, T, P, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: P) -> Option[Sized] where @@ -938,21 +977,21 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: ExactSizeIterator[@TraitClause0]>, [@TraitClause5]: DoubleEndedIterator[@TraitClause0]>, - @TraitClause2::parent_clause0::Output = bool, + @TraitClause2::parent_clause1::Output = bool, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max(@1: IntoIter[@TraitClause0]) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max(@1: IntoIter[@TraitClause0]) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min(@1: IntoIter[@TraitClause0]) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min(@1: IntoIter[@TraitClause0]) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by_key(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by_key(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -960,17 +999,17 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by_key(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by_key(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -978,15 +1017,15 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0] +pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by(@1: IntoIter[@TraitClause0], @2: F) -> Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::rev(@1: IntoIter[@TraitClause0]) -> Rev[@TraitClause0]>[@TraitClause1] where @@ -1073,7 +1112,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = Ordering, + @TraitClause5::parent_clause1::Output = Ordering, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partial_cmp(@1: IntoIter[@TraitClause0], @2: I) -> Option[Sized] where @@ -1091,7 +1130,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = Option[Sized], + @TraitClause5::parent_clause1::Output = Option[Sized], pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::eq(@1: IntoIter[@TraitClause0], @2: I) -> bool where @@ -1109,7 +1148,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = bool, + @TraitClause5::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::ne(@1: IntoIter[@TraitClause0], @2: I) -> bool where @@ -1163,7 +1202,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = bool, pub fn core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_sorted_by_key(@1: IntoIter[@TraitClause0], @2: F) -> bool where @@ -1173,7 +1212,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: PartialOrd, - @TraitClause4::parent_clause0::Output = K, + @TraitClause4::parent_clause1::Output = K, // Full name: core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::__iterator_get_unchecked pub unsafe fn {impl Iterator for IntoIter[@TraitClause0]}::__iterator_get_unchecked<'_0, T, const N : usize>(@1: &'_0 mut (IntoIter[@TraitClause0]), @2: usize) -> T @@ -1185,7 +1224,8 @@ impl Iterator for IntoIter[@TraitClause0 where [@TraitClause0]: Sized, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = @TraitClause0 type Item = T fn next<'_0> = {impl Iterator for IntoIter[@TraitClause0]}::next<'_0_0, T, const N : usize>[@TraitClause0] fn next_chunk<'_0, const N : usize, [@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::next_chunk<'_0_0, T, const N : usize, const N : usize>[@TraitClause0, @TraitClause0_0] @@ -1198,49 +1238,49 @@ where fn chain, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator, @TraitClause1_2::Item = T> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::chain[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn zip, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::zip[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn intersperse<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Clone> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::intersperse[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = T> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::intersperse_with[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = ()> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::for_each[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::filter[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::filter_map[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = T> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::intersperse_with[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = B> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = ()> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::for_each[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::filter[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::filter_map[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn enumerate<[@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::enumerate[@TraitClause0, @TraitClause0_0] fn peekable<[@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::peekable[@TraitClause0, @TraitClause0_0] - fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::skip_while[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::take_while[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map_while[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::skip_while[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::take_while[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map_while[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn skip<[@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::skip[@TraitClause0, @TraitClause0_0] fn take<[@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::take[@TraitClause0, @TraitClause0_0] - fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = Option[@TraitClause1_1]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::scan[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = U> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::flat_map[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = Option[@TraitClause1_1]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::scan[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = U> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::flat_map[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn flatten<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: IntoIterator> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::flatten[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut))>, for<'_0> @TraitClause1_3::parent_clause0::Output = R> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map_windows[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut))>, for<'_0> @TraitClause1_3::parent_clause1::Output = R> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::map_windows[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn fuse<[@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::fuse[@TraitClause0, @TraitClause0_0] - fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = ()> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::inspect[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = ()> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::inspect[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn by_ref<'_0, [@TraitClause0]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::by_ref<'_0_0, T, const N : usize>[@TraitClause0, @TraitClause0_0] fn collect, [@TraitClause1]: FromIterator, [@TraitClause2]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::collect[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn try_collect<'_0, B, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Try, [@TraitClause3]: Residual<@TraitClause1_2::Residual, B>, [@TraitClause4]: FromIterator> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_collect<'_0_0, T, B, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn collect_into<'_0, E, [@TraitClause0]: Sized, [@TraitClause1]: Extend, [@TraitClause2]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::collect_into<'_0_0, T, E, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend, [@TraitClause5]: for<'_0> FnMut, for<'_0> @TraitClause1_5::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partition[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partition_in_place<'a, T, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_partitioned[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = {impl Iterator for IntoIter[@TraitClause0]}::try_fold<'_0_0, T, B, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: Try, @TraitClause1_3::parent_clause0::Output = R, @TraitClause1_4::Output = ()> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_for_each<'_0_0, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn fold, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = Acc> = {impl Iterator for IntoIter[@TraitClause0]}::fold[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = T> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::reduce[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0]>, [@TraitClause5]: FnMut R, (T, T)>, @TraitClause1_3::Output = T, @TraitClause1_5::parent_clause0::Output = R> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_reduce<'_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::all<'_0_0, T, F, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::any<'_0_0, T, F, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find<'_0_0, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find_map<'_0_0, T, B, F, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause0]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (T))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause0::Output = R> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_find<'_0_0, T, R, impl FnMut(&Self::Item) -> R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::position<'_0_0, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::rposition<'_0_0, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend, [@TraitClause5]: for<'_0> FnMut, for<'_0> @TraitClause1_5::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partition[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partition_in_place<'a, T, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_partitioned[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause1::Output = R, @TraitClause1_5::Output = B> = {impl Iterator for IntoIter[@TraitClause0]}::try_fold<'_0_0, T, B, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: Try, @TraitClause1_3::parent_clause1::Output = R, @TraitClause1_4::Output = ()> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_for_each<'_0_0, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn fold, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = Acc> = {impl Iterator for IntoIter[@TraitClause0]}::fold[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = T> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::reduce[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1]>, [@TraitClause5]: FnMut R, (T, T)>, @TraitClause1_3::Output = T, @TraitClause1_5::parent_clause1::Output = R> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_reduce<'_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::all<'_0_0, T, F, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::any<'_0_0, T, F, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find<'_0_0, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::find_map<'_0_0, T, B, F, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option[{impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::parent_clause1]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (T))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause1::Output = R> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::try_find<'_0_0, T, R, impl FnMut(&Self::Item) -> R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::position<'_0_0, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::rposition<'_0_0, T, P, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn max<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn min<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by_key[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by_key[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by_key[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::max_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by_key[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::min_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn rev<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: DoubleEndedIterator[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::rev[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn unzip, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: Default, [@TraitClause7]: Extend, [@TraitClause8]: Sized[@TraitClause0]>, [@TraitClause9]: Iterator[@TraitClause0]>, {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::Item = (A, B)> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::unzip[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] fn copied<'a, T, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Iterator[@TraitClause0]>, [@TraitClause3]: Copy, T : 'a, {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0]::Item = &'a (T)> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::copied<'a, T, T, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] @@ -1250,19 +1290,19 @@ where fn sum, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Sum> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::sum[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn product, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Product> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::product[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, @TraitClause1_1::Item = T> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::cmp[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = Ordering> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::cmp_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = Ordering> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::cmp_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn partial_cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partial_cmp[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = Option[Sized]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partial_cmp_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = Option[Sized]> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::partial_cmp_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn eq, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::eq[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::eq_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::eq_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn ne, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::ne[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn lt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::lt[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn le, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::le[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn gt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::gt[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn ge, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized[@TraitClause0]>> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::ge[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn is_sorted<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: PartialOrd> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_sorted[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_sorted_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_sorted_by_key[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = bool> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_sorted_by[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause1::Output = K> = core::array::iter::{impl Iterator for IntoIter[@TraitClause0]}::is_sorted_by_key[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn __iterator_get_unchecked<'_0> = {impl Iterator for IntoIter[@TraitClause0]}::__iterator_get_unchecked<'_0_0, T, const N : usize>[@TraitClause0] } @@ -1276,9 +1316,10 @@ impl IntoIterator for Array where [@TraitClause0]: Sized, { - parent_clause0 = @TraitClause0 - parent_clause1 = Sized[@TraitClause0]> - parent_clause2 = {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0] + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause0 + parent_clause2 = Sized[@TraitClause0]> + parent_clause3 = {impl Iterator for IntoIter[@TraitClause0]}[@TraitClause0] type Item = T type IntoIter = IntoIter[@TraitClause0] fn into_iter = {impl IntoIterator for Array}::into_iter[@TraitClause0] @@ -1293,6 +1334,7 @@ where pub fn clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) where [@TraitClause0]: Clone, + [@TraitClause1]: Destruct, #[lang_item("cmp_partialeq_eq")] pub fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool @@ -1393,7 +1435,8 @@ where #[lang_item("add_assign")] pub trait AddAssign { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn add_assign<'_0> = core::ops::arith::AddAssign::add_assign<'_0_0, Self, Rhs>[Self] } @@ -1402,7 +1445,8 @@ pub fn {impl AddAssign<&'_0 (i32)> for i32}::add_assign<'_0, '_1>(@1: &'_1 mut ( // Full name: core::ops::arith::{impl AddAssign<&'_0 (i32)> for i32} impl<'_0> AddAssign<&'_0 (i32)> for i32 { - parent_clause0 = Sized<&'_ (i32)> + parent_clause0 = MetaSized + parent_clause1 = Sized<&'_ (i32)> fn add_assign<'_0> = {impl AddAssign<&'_0 (i32)> for i32}::add_assign<'_0, '_0_0> } @@ -1452,9 +1496,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Iterator, { - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1::parent_clause1 + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1 type Item = @TraitClause1::Item type IntoIter = I fn into_iter = {impl IntoIterator for I}::into_iter[@TraitClause0, @TraitClause1] @@ -1485,7 +1530,7 @@ where [@TraitClause1]: Sized, // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, @@ -1495,7 +1540,7 @@ where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::double_ended::DoubleEndedIterator::nth_back -pub fn nth_back<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn nth_back<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, @@ -1507,9 +1552,9 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: Sized, - [@TraitClause5]: FnMut, + [@TraitClause5]: FnMut, [@TraitClause6]: Try, - @TraitClause5::parent_clause0::Output = R, + @TraitClause5::parent_clause1::Output = R, @TraitClause6::Output = B, // Full name: core::iter::traits::double_ended::DoubleEndedIterator::rfold @@ -1519,17 +1564,17 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, - [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = B, + [@TraitClause4]: FnMut, + @TraitClause4::parent_clause1::Output = B, // Full name: core::iter::traits::double_ended::DoubleEndedIterator::rfind -pub fn rfind<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn rfind<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, [@TraitClause1]: Sized

, [@TraitClause2]: Sized, - [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + [@TraitClause3]: for<'_0> FnMut, + for<'_0> @TraitClause3::parent_clause1::Output = bool, // Full name: core::iter::traits::exact_size::ExactSizeIterator::len pub fn len<'_0, Self>(@1: &'_0 (Self)) -> usize @@ -1542,12 +1587,12 @@ where [@TraitClause0]: ExactSizeIterator, #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, // Full name: core::iter::traits::iterator::Iterator::next_chunk -pub fn next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> Result, IntoIter<@TraitClause0::Item, const N : usize>[@TraitClause0::parent_clause0]>[Sized>, Sized[@TraitClause0::parent_clause0]>] +pub fn next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> Result, IntoIter<@TraitClause0::Item, const N : usize>[@TraitClause0::parent_clause1]>[Sized>, Sized[@TraitClause0::parent_clause1]>] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, @@ -1561,7 +1606,7 @@ where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, -pub fn core::iter::traits::iterator::Iterator::last(@1: Self) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::last(@1: Self) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, @@ -1570,7 +1615,7 @@ pub fn core::iter::traits::iterator::Iterator::advance_by<'_0, Self>(@1: &'_0 mu where [@TraitClause0]: Iterator, -pub fn core::iter::traits::iterator::Iterator::nth<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::nth<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -1581,7 +1626,7 @@ where [@TraitClause1]: Sized, // Full name: core::iter::traits::iterator::Iterator::chain -pub fn chain(@1: Self, @2: U) -> Chain[@TraitClause2, @TraitClause3::parent_clause1] +pub fn chain(@1: Self, @2: U) -> Chain[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, @@ -1590,7 +1635,7 @@ where @TraitClause3::Item = @TraitClause0::Item, // Full name: core::iter::traits::iterator::Iterator::zip -pub fn zip(@1: Self, @2: U) -> Zip[@TraitClause2, @TraitClause3::parent_clause1] +pub fn zip(@1: Self, @2: U) -> Zip[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, @@ -1611,7 +1656,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = @TraitClause0::Item, + @TraitClause3::parent_clause1::Output = @TraitClause0::Item, // Full name: core::iter::traits::iterator::Iterator::map #[lang_item("IteratorMap")] @@ -1622,7 +1667,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, pub fn core::iter::traits::iterator::Iterator::for_each(@1: Self, @2: F) where @@ -1630,7 +1675,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = (), + @TraitClause3::parent_clause1::Output = (), // Full name: core::iter::traits::iterator::Iterator::filter #[lang_item("iter_filter")] @@ -1640,7 +1685,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, // Full name: core::iter::traits::iterator::Iterator::filter_map pub fn filter_map(@1: Self, @2: F) -> FilterMap[@TraitClause3, @TraitClause2] @@ -1650,7 +1695,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], // Full name: core::iter::traits::iterator::Iterator::enumerate #[lang_item("enumerate_method")] @@ -1672,7 +1717,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, // Full name: core::iter::traits::iterator::Iterator::take_while pub fn take_while(@1: Self, @2: P) -> TakeWhile[@TraitClause2, @TraitClause1] @@ -1681,7 +1726,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, // Full name: core::iter::traits::iterator::Iterator::map_while pub fn map_while(@1: Self, @2: P) -> MapWhile[@TraitClause3, @TraitClause2] @@ -1691,7 +1736,7 @@ where [@TraitClause2]: Sized

, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], // Full name: core::iter::traits::iterator::Iterator::skip pub fn skip(@1: Self, @2: usize) -> Skip[@TraitClause1] @@ -1714,7 +1759,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: Sized, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = Option[@TraitClause2], + for<'_0> @TraitClause5::parent_clause1::Output = Option[@TraitClause2], // Full name: core::iter::traits::iterator::Iterator::flat_map pub fn flat_map(@1: Self, @2: F) -> FlatMap[@TraitClause3, @TraitClause1, @TraitClause2, @TraitClause4] @@ -1725,7 +1770,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = U, + @TraitClause5::parent_clause1::Output = U, // Full name: core::iter::traits::iterator::Iterator::flatten pub fn flatten(@1: Self) -> Flatten[@TraitClause1, @TraitClause0, @TraitClause2] @@ -1742,7 +1787,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut))>, - for<'_0> @TraitClause4::parent_clause0::Output = R, + for<'_0> @TraitClause4::parent_clause1::Output = R, // Full name: core::iter::traits::iterator::Iterator::fuse pub fn fuse(@1: Self) -> Fuse[@TraitClause1] @@ -1757,7 +1802,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = (), + for<'_0> @TraitClause3::parent_clause1::Output = (), // Full name: core::iter::traits::iterator::Iterator::by_ref pub fn by_ref<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 mut (Self) @@ -1802,7 +1847,7 @@ where [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: for<'_0> FnMut, - for<'_0> @TraitClause6::parent_clause0::Output = bool, + for<'_0> @TraitClause6::parent_clause1::Output = bool, // Full name: core::iter::traits::iterator::Iterator::partition_in_place pub fn partition_in_place<'a, Self, T, P>(@1: Self, @2: P) -> usize @@ -1815,7 +1860,7 @@ where [@TraitClause5]: for<'_0> FnMut, T : 'a, @TraitClause0::Item = &'a mut (T), - for<'_0> @TraitClause5::parent_clause0::Output = bool, + for<'_0> @TraitClause5::parent_clause1::Output = bool, // Full name: core::iter::traits::iterator::Iterator::is_partitioned pub fn is_partitioned(@1: Self, @2: P) -> bool @@ -1824,7 +1869,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::iter::traits::iterator::Iterator::try_fold<'_0, Self, B, F, R>(@1: &'_0 mut (Self), @2: B, @3: F) -> R where @@ -1835,7 +1880,7 @@ where [@TraitClause4]: Sized, [@TraitClause5]: FnMut, [@TraitClause6]: Try, - @TraitClause5::parent_clause0::Output = R, + @TraitClause5::parent_clause1::Output = R, @TraitClause6::Output = B, // Full name: core::iter::traits::iterator::Iterator::try_for_each @@ -1847,7 +1892,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: FnMut, [@TraitClause5]: Try, - @TraitClause4::parent_clause0::Output = R, + @TraitClause4::parent_clause1::Output = R, @TraitClause5::Output = (), pub fn core::iter::traits::iterator::Iterator::fold(@1: Self, @2: B, @3: F) -> B @@ -1857,16 +1902,16 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, // Full name: core::iter::traits::iterator::Iterator::reduce -pub fn reduce(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn reduce(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = @TraitClause0::Item, + @TraitClause3::parent_clause1::Output = @TraitClause0::Item, // Full name: core::iter::traits::iterator::Iterator::try_reduce pub fn try_reduce<'_0, Self, R, impl FnMut(Self::Item, Self::Item) -> R>(@1: &'_0 mut (Self), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause5::TryType @@ -1876,10 +1921,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<@TraitClause0::Item>[@TraitClause0::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<@TraitClause0::Item>[@TraitClause0::parent_clause1]>, [@TraitClause6]: FnMut R, (@TraitClause0::Item, @TraitClause0::Item)>, @TraitClause4::Output = @TraitClause0::Item, - @TraitClause6::parent_clause0::Output = R, + @TraitClause6::parent_clause1::Output = R, pub fn core::iter::traits::iterator::Iterator::all<'_0, Self, F>(@1: &'_0 mut (Self), @2: F) -> bool where @@ -1887,7 +1932,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::iter::traits::iterator::Iterator::any<'_0, Self, F>(@1: &'_0 mut (Self), @2: F) -> bool where @@ -1895,15 +1940,15 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, -pub fn core::iter::traits::iterator::Iterator::find<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::find<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::iter::traits::iterator::Iterator::find_map<'_0, Self, B, F>(@1: &'_0 mut (Self), @2: F) -> Option[@TraitClause1] where @@ -1912,7 +1957,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], // Full name: core::iter::traits::iterator::Iterator::try_find pub fn try_find<'_0, Self, R, impl FnMut(&Self::Item) -> R>(@1: &'_0 mut (Self), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause5::TryType @@ -1922,10 +1967,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<@TraitClause0::Item>[@TraitClause0::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<@TraitClause0::Item>[@TraitClause0::parent_clause1]>, [@TraitClause6]: for<'_0> FnMut R, (&'_0_0 (@TraitClause0::Item))>, @TraitClause4::Output = bool, - for<'_0> @TraitClause6::parent_clause0::Output = R, + for<'_0> @TraitClause6::parent_clause1::Output = R, pub fn core::iter::traits::iterator::Iterator::position<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> Option[Sized] where @@ -1933,7 +1978,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::iter::traits::iterator::Iterator::rposition<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> Option[Sized] where @@ -1943,22 +1988,22 @@ where [@TraitClause3]: Sized, [@TraitClause4]: ExactSizeIterator, [@TraitClause5]: DoubleEndedIterator, - @TraitClause2::parent_clause0::Output = bool, + @TraitClause2::parent_clause1::Output = bool, -pub fn core::iter::traits::iterator::Iterator::max(@1: Self) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::max(@1: Self) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, [@TraitClause2]: Ord<@TraitClause0::Item>, -pub fn core::iter::traits::iterator::Iterator::min(@1: Self) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::min(@1: Self) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, [@TraitClause2]: Ord<@TraitClause0::Item>, // Full name: core::iter::traits::iterator::Iterator::max_by_key -pub fn max_by_key(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn max_by_key(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, @@ -1966,19 +2011,19 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, // Full name: core::iter::traits::iterator::Iterator::max_by -pub fn max_by(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn max_by(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, // Full name: core::iter::traits::iterator::Iterator::min_by_key -pub fn min_by_key(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn min_by_key(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, @@ -1986,16 +2031,16 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, // Full name: core::iter::traits::iterator::Iterator::min_by -pub fn min_by(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn min_by(@1: Self, @2: F) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, // Full name: core::iter::traits::iterator::Iterator::rev pub fn rev(@1: Self) -> Rev[@TraitClause1] @@ -2089,7 +2134,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = Ordering, + @TraitClause5::parent_clause1::Output = Ordering, pub fn core::iter::traits::iterator::Iterator::partial_cmp(@1: Self, @2: I) -> Option[Sized] where @@ -2108,7 +2153,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = Option[Sized], + @TraitClause5::parent_clause1::Output = Option[Sized], pub fn core::iter::traits::iterator::Iterator::eq(@1: Self, @2: I) -> bool where @@ -2127,7 +2172,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = bool, + @TraitClause5::parent_clause1::Output = bool, pub fn core::iter::traits::iterator::Iterator::ne(@1: Self, @2: I) -> bool where @@ -2182,7 +2227,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = bool, // Full name: core::iter::traits::iterator::Iterator::is_sorted_by_key pub fn is_sorted_by_key(@1: Self, @2: F) -> bool @@ -2193,7 +2238,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: FnMut, [@TraitClause5]: PartialOrd, - @TraitClause4::parent_clause0::Output = K, + @TraitClause4::parent_clause1::Output = K, pub unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> @TraitClause0::Item where @@ -2205,7 +2250,7 @@ where [@TraitClause0]: AddAssign, // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -2222,7 +2267,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -2252,7 +2297,7 @@ pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::next<'a, '_1, T>(@1: &'_1 where [@TraitClause0]: Sized, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::next_chunk<'a, '_1, T, const N : usize>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0])) -> Result, IntoIter<&'a (T), const N : usize>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>[Sized>, Sized[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::next_chunk<'a, '_1, T, const N : usize>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0])) -> Result, IntoIter<&'a (T), const N : usize>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>[Sized>, Sized[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, @@ -2287,7 +2332,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::chain<'a, T, U>(@1: Iter<'a, T>[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::chain<'a, T, U>(@1: Iter<'a, T>[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -2295,7 +2340,7 @@ where [@TraitClause3]: IntoIterator, @TraitClause3::Item = &'a (T), -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::zip<'a, T, U>(@1: Iter<'a, T>[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::zip<'a, T, U>(@1: Iter<'a, T>[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -2314,7 +2359,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = &'a (T), + @TraitClause3::parent_clause1::Output = &'a (T), #[lang_item("IteratorMap")] pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map<'a, T, B, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Map[@TraitClause0], F>[@TraitClause3, @TraitClause2] @@ -2324,7 +2369,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::for_each pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::for_each<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) @@ -2333,7 +2378,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = (), + @TraitClause3::parent_clause1::Output = (), #[lang_item("iter_filter")] pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::filter<'a, T, P>(@1: Iter<'a, T>[@TraitClause0], @2: P) -> Filter[@TraitClause0], P>[@TraitClause2, @TraitClause1] @@ -2342,7 +2387,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> FilterMap[@TraitClause0], F>[@TraitClause3, @TraitClause2] where @@ -2351,7 +2396,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], #[lang_item("enumerate_method")] pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::enumerate<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Enumerate[@TraitClause0]>[@TraitClause1] @@ -2370,7 +2415,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::take_while<'a, T, P>(@1: Iter<'a, T>[@TraitClause0], @2: P) -> TakeWhile[@TraitClause0], P>[@TraitClause2, @TraitClause1] where @@ -2378,7 +2423,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>(@1: Iter<'a, T>[@TraitClause0], @2: P) -> MapWhile[@TraitClause0], P>[@TraitClause3, @TraitClause2] where @@ -2387,7 +2432,7 @@ where [@TraitClause2]: Sized

, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::skip<'a, T>(@1: Iter<'a, T>[@TraitClause0], @2: usize) -> Skip[@TraitClause0]>[@TraitClause1] where @@ -2407,7 +2452,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = Option[@TraitClause2], + for<'_0> @TraitClause5::parent_clause1::Output = Option[@TraitClause2], pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> FlatMap[@TraitClause0], U, F>[@TraitClause3, @TraitClause1, @TraitClause2, @TraitClause4] where @@ -2417,7 +2462,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = U, + @TraitClause5::parent_clause1::Output = U, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::flatten<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Flatten[@TraitClause0]>[@TraitClause1, {impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0], @TraitClause2] where @@ -2432,7 +2477,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut))>, - for<'_0> @TraitClause4::parent_clause0::Output = R, + for<'_0> @TraitClause4::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::fuse<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Fuse[@TraitClause0]>[@TraitClause1] where @@ -2445,7 +2490,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = (), + for<'_0> @TraitClause3::parent_clause1::Output = (), pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::by_ref<'a, '_1, T>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0])) -> &'_1 mut (Iter<'a, T>[@TraitClause0]) where @@ -2485,7 +2530,7 @@ where [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: for<'_0> FnMut, - for<'_0> @TraitClause6::parent_clause0::Output = bool, + for<'_0> @TraitClause6::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>(@1: Iter<'a, T>[@TraitClause0], @2: P) -> usize where @@ -2497,7 +2542,7 @@ where [@TraitClause5]: for<'_0> FnMut, T : 'a, {impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), - for<'_0> @TraitClause5::parent_clause0::Output = bool, + for<'_0> @TraitClause5::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>(@1: Iter<'a, T>[@TraitClause0], @2: P) -> bool where @@ -2505,7 +2550,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_fold<'a, '_1, T, B, F, R>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: B, @3: F) -> R where @@ -2516,7 +2561,7 @@ where [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: FnMut, [@TraitClause6]: Try, - @TraitClause5::parent_clause0::Output = R, + @TraitClause5::parent_clause1::Output = R, @TraitClause6::Output = B, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_for_each<'a, '_1, T, F, R>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: F) -> R @@ -2527,7 +2572,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: Try, - @TraitClause4::parent_clause0::Output = R, + @TraitClause4::parent_clause1::Output = R, @TraitClause5::Output = (), // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::fold @@ -2537,15 +2582,15 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = B, + @TraitClause3::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::reduce<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::reduce<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = &'a (T), + @TraitClause3::parent_clause1::Output = &'a (T), pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_reduce<'a, '_1, T, R, impl FnMut(Self::Item, Self::Item) -> R>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause5::TryType where @@ -2554,10 +2599,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause6]: FnMut R, (&'a (T), &'a (T))>, @TraitClause4::Output = &'a (T), - @TraitClause6::parent_clause0::Output = R, + @TraitClause6::parent_clause1::Output = R, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::all pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::all<'a, '_1, T, F>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: F) -> bool @@ -2566,7 +2611,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::any pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::any<'a, '_1, T, F>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: F) -> bool @@ -2575,7 +2620,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::find pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::find<'a, '_1, T, P>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: P) -> Option<&'_ (T)>[Sized<&'_ (T)>] @@ -2584,7 +2629,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::find_map pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::find_map<'a, '_1, T, B, F>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: F) -> Option[@TraitClause1] @@ -2594,7 +2639,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_find<'a, '_1, T, R, impl FnMut(&Self::Item) -> R>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause5::TryType where @@ -2603,10 +2648,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause6]: for<'_0> FnMut R, (&'_0_0 (&'a (T)))>, @TraitClause4::Output = bool, - for<'_0> @TraitClause6::parent_clause0::Output = R, + for<'_0> @TraitClause6::parent_clause1::Output = R, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::position pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::position<'a, '_1, T, P>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: P) -> Option[Sized] @@ -2615,32 +2660,32 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::rposition pub fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::rposition<'a, '_1, T, P>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: P) -> Option[Sized] where [@TraitClause0]: Sized, [@TraitClause1]: Sized

, - [@TraitClause2]: FnMut, + [@TraitClause2]: FnMut, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: ExactSizeIterator[@TraitClause0]>, [@TraitClause5]: DoubleEndedIterator[@TraitClause0]>, - @TraitClause2::parent_clause0::Output = bool, + @TraitClause2::parent_clause1::Output = bool, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord<&'a (T)>, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord<&'a (T)>, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -2648,17 +2693,17 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -2666,15 +2711,15 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by<'a, T, F>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::rev<'a, T>(@1: Iter<'a, T>[@TraitClause0]) -> Rev[@TraitClause0]>[@TraitClause1] where @@ -2761,7 +2806,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = Ordering, + @TraitClause5::parent_clause1::Output = Ordering, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partial_cmp<'a, T, I>(@1: Iter<'a, T>[@TraitClause0], @2: I) -> Option[Sized] where @@ -2779,7 +2824,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = Option[Sized], + @TraitClause5::parent_clause1::Output = Option[Sized], pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::eq<'a, T, I>(@1: Iter<'a, T>[@TraitClause0], @2: I) -> bool where @@ -2797,7 +2842,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut, - @TraitClause5::parent_clause0::Output = bool, + @TraitClause5::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::ne<'a, T, I>(@1: Iter<'a, T>[@TraitClause0], @2: I) -> bool where @@ -2852,7 +2897,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>(@1: Iter<'a, T>[@TraitClause0], @2: F) -> bool where @@ -2862,7 +2907,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: PartialOrd, - @TraitClause4::parent_clause0::Output = K, + @TraitClause4::parent_clause1::Output = K, // Full name: core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::__iterator_get_unchecked pub unsafe fn {impl Iterator for Iter<'a, T>[@TraitClause0]}::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (Iter<'a, T>[@TraitClause0]), @2: usize) -> &'_ (T) @@ -2874,7 +2919,8 @@ impl<'a, T> Iterator for Iter<'a, T>[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (T)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<&'_ (T)> type Item = &'a (T) fn next<'_0> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::next<'a, '_0_0, T>[@TraitClause0] fn next_chunk<'_0, const N : usize, [@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::next_chunk<'a, '_0_0, T, const N : usize>[@TraitClause0, @TraitClause0_0] @@ -2887,49 +2933,49 @@ where fn chain, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator, @TraitClause1_2::Item = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::chain<'a, T, U>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn zip, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::zip<'a, T, U>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn intersperse<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Clone<&'a (T)>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::intersperse<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::intersperse_with<'a, T, G>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = ()> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::filter<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::intersperse_with<'a, T, G>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = ()> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::filter<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn enumerate<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::enumerate<'a, T>[@TraitClause0, @TraitClause0_0] fn peekable<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::peekable<'a, T>[@TraitClause0, @TraitClause0_0] - fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::skip_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::take_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::skip_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::take_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn skip<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::skip<'a, T>[@TraitClause0, @TraitClause0_0] fn take<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::take<'a, T>[@TraitClause0, @TraitClause0_0] - fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = Option[@TraitClause1_1]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::scan<'a, T, St, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = U> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = Option[@TraitClause1_1]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::scan<'a, T, St, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = U> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn flatten<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: IntoIterator<&'a (T)>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::flatten<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut))>, for<'_0> @TraitClause1_3::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map_windows<'a, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut))>, for<'_0> @TraitClause1_3::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::map_windows<'a, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn fuse<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::fuse<'a, T>[@TraitClause0, @TraitClause0_0] - fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::inspect<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = ()> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::inspect<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn by_ref<'_0, [@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::by_ref<'a, '_0_0, T>[@TraitClause0, @TraitClause0_0] fn collect, [@TraitClause1]: FromIterator, [@TraitClause2]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::collect<'a, T, B>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn try_collect<'_0, B, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Try<&'a (T)>, [@TraitClause3]: Residual<@TraitClause1_2::Residual, B>, [@TraitClause4]: FromIterator> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_collect<'a, '_0_0, T, B>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn collect_into<'_0, E, [@TraitClause0]: Sized, [@TraitClause1]: Extend, [@TraitClause2]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::collect_into<'a, '_0_0, T, E>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend, [@TraitClause5]: for<'_0> FnMut, for<'_0> @TraitClause1_5::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partition<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_fold<'a, '_0_0, T, B, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: Try, @TraitClause1_3::parent_clause0::Output = R, @TraitClause1_4::Output = ()> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_for_each<'a, '_0_0, T, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn fold, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = B> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::reduce<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, [@TraitClause5]: FnMut R, (&'a (T), &'a (T))>, @TraitClause1_3::Output = &'a (T), @TraitClause1_5::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_reduce<'a, '_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (&'a (T)))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_find<'a, '_0_0, T, R, impl FnMut(&Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause0::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend, [@TraitClause5]: for<'_0> FnMut, for<'_0> @TraitClause1_5::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partition<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause1::Output = R, @TraitClause1_5::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_fold<'a, '_0_0, T, B, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: Try, @TraitClause1_3::parent_clause1::Output = R, @TraitClause1_4::Output = ()> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_for_each<'a, '_0_0, T, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn fold, [@TraitClause1]: Sized, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = B> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::reduce<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause5]: FnMut R, (&'a (T), &'a (T))>, @TraitClause1_3::Output = &'a (T), @TraitClause1_5::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_reduce<'a, '_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (T)>[{impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (&'a (T)))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::try_find<'a, '_0_0, T, R, impl FnMut(&Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause1::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn max<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord<&'a (T)>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn min<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord<&'a (T)>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::max_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::min_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn rev<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: DoubleEndedIterator[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::rev<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn unzip, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: Default, [@TraitClause7]: Extend, [@TraitClause8]: Sized[@TraitClause0]>, [@TraitClause9]: Iterator[@TraitClause0]>, {impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = (A, B)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::unzip<'a, T, A, B, FromA, FromB>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] fn copied<'a, T, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Iterator[@TraitClause0]>, [@TraitClause3]: Copy, T : 'a, {impl Iterator for Iter<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::copied<'a, 'a, T, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] @@ -2939,19 +2985,19 @@ where fn sum, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Sum> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::sum<'a, T, S>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn product, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Product> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::product<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: Ord<&'a (T)>, [@TraitClause3]: Sized[@TraitClause0]>, @TraitClause1_1::Item = &'a (T)> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::cmp<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn partial_cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partial_cmp<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = Option[Sized]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partial_cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = Option[Sized]> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::partial_cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn eq, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::eq<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::eq_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::eq_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn ne, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::ne<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn lt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::lt<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn le, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::le<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn gt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::gt<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn ge, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (T), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::ge<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn is_sorted<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: PartialOrd<&'a (T), &'a (T)>> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_sorted<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = bool> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause1::Output = K> = core::slice::iter::{impl Iterator for Iter<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn __iterator_get_unchecked<'_0> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] } @@ -2967,7 +3013,7 @@ pub fn {impl Iterator for Chunks<'a, T>[@TraitClause0]}::next<'a, '_1, T>(@1: &' where [@TraitClause0]: Sized, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::next_chunk<'a, '_1, T, const N : usize>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0])) -> Result), const N : usize>, IntoIter<&'a (Slice), const N : usize>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>[Sized), const N : usize>>, Sized), const N : usize>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::next_chunk<'a, '_1, T, const N : usize>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0])) -> Result), const N : usize>, IntoIter<&'a (Slice), const N : usize>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>[Sized), const N : usize>>, Sized), const N : usize>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, @@ -3001,7 +3047,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::chain<'a, T, U>(@1: Chunks<'a, T>[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::chain<'a, T, U>(@1: Chunks<'a, T>[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -3009,7 +3055,7 @@ where [@TraitClause3]: IntoIterator, @TraitClause3::Item = &'a (Slice), -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::zip<'a, T, U>(@1: Chunks<'a, T>[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::zip<'a, T, U>(@1: Chunks<'a, T>[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -3028,7 +3074,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = &'a (Slice), + @TraitClause3::parent_clause1::Output = &'a (Slice), #[lang_item("IteratorMap")] pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Map[@TraitClause0], F>[@TraitClause3, @TraitClause2] @@ -3038,7 +3084,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::for_each<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) where @@ -3046,7 +3092,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = (), + @TraitClause3::parent_clause1::Output = (), #[lang_item("iter_filter")] pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::filter<'a, T, P>(@1: Chunks<'a, T>[@TraitClause0], @2: P) -> Filter[@TraitClause0], P>[@TraitClause2, @TraitClause1] @@ -3055,7 +3101,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> FilterMap[@TraitClause0], F>[@TraitClause3, @TraitClause2] where @@ -3064,7 +3110,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], #[lang_item("enumerate_method")] pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::enumerate<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Enumerate[@TraitClause0]>[@TraitClause1] @@ -3083,7 +3129,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::take_while<'a, T, P>(@1: Chunks<'a, T>[@TraitClause0], @2: P) -> TakeWhile[@TraitClause0], P>[@TraitClause2, @TraitClause1] where @@ -3091,7 +3137,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>(@1: Chunks<'a, T>[@TraitClause0], @2: P) -> MapWhile[@TraitClause0], P>[@TraitClause3, @TraitClause2] where @@ -3100,7 +3146,7 @@ where [@TraitClause2]: Sized

, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::skip<'a, T>(@1: Chunks<'a, T>[@TraitClause0], @2: usize) -> Skip[@TraitClause0]>[@TraitClause1] where @@ -3120,7 +3166,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut))>, - for<'_0> @TraitClause5::parent_clause0::Output = Option[@TraitClause2], + for<'_0> @TraitClause5::parent_clause1::Output = Option[@TraitClause2], pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> FlatMap[@TraitClause0], U, F>[@TraitClause3, @TraitClause1, @TraitClause2, @TraitClause4] where @@ -3130,7 +3176,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut))>, - @TraitClause5::parent_clause0::Output = U, + @TraitClause5::parent_clause1::Output = U, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::flatten<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Flatten[@TraitClause0]>[@TraitClause1, {impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0], @TraitClause2] where @@ -3145,7 +3191,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut), const N : usize>))>, - for<'_0> @TraitClause4::parent_clause0::Output = R, + for<'_0> @TraitClause4::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::fuse<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Fuse[@TraitClause0]>[@TraitClause1] where @@ -3158,7 +3204,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = (), + for<'_0> @TraitClause3::parent_clause1::Output = (), pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::by_ref<'a, '_1, T>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0])) -> &'_1 mut (Chunks<'a, T>[@TraitClause0]) where @@ -3198,7 +3244,7 @@ where [@TraitClause4]: Default, [@TraitClause5]: Extend)>, [@TraitClause6]: for<'_0> FnMut)))>, - for<'_0> @TraitClause6::parent_clause0::Output = bool, + for<'_0> @TraitClause6::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>(@1: Chunks<'a, T>[@TraitClause0], @2: P) -> usize where @@ -3210,7 +3256,7 @@ where [@TraitClause5]: for<'_0> FnMut, T : 'a, {impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), - for<'_0> @TraitClause5::parent_clause0::Output = bool, + for<'_0> @TraitClause5::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>(@1: Chunks<'a, T>[@TraitClause0], @2: P) -> bool where @@ -3218,7 +3264,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_fold<'a, '_1, T, B, F, R>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: B, @3: F) -> R where @@ -3229,7 +3275,7 @@ where [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: FnMut))>, [@TraitClause6]: Try, - @TraitClause5::parent_clause0::Output = R, + @TraitClause5::parent_clause1::Output = R, @TraitClause6::Output = B, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_for_each<'a, '_1, T, F, R>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: F) -> R @@ -3240,7 +3286,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: Try, - @TraitClause4::parent_clause0::Output = R, + @TraitClause4::parent_clause1::Output = R, @TraitClause5::Output = (), pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::fold<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: B, @3: F) -> B @@ -3250,15 +3296,15 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::reduce<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::reduce<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut), &'a (Slice))>, - @TraitClause3::parent_clause0::Output = &'a (Slice), + @TraitClause3::parent_clause1::Output = &'a (Slice), pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_reduce<'a, '_1, T, R, impl FnMut(Self::Item, Self::Item) -> R>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause5::TryType where @@ -3267,10 +3313,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause6]: FnMut R, (&'a (Slice), &'a (Slice))>, @TraitClause4::Output = &'a (Slice), - @TraitClause6::parent_clause0::Output = R, + @TraitClause6::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::all<'a, '_1, T, F>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: F) -> bool where @@ -3278,7 +3324,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::any<'a, '_1, T, F>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: F) -> bool where @@ -3286,15 +3332,15 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find<'a, '_1, T, P>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: P) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find<'a, '_1, T, P>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: P) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find_map<'a, '_1, T, B, F>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: F) -> Option[@TraitClause1] where @@ -3303,7 +3349,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_find<'a, '_1, T, R, impl FnMut(&Self::Item) -> R>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause5::TryType where @@ -3312,10 +3358,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause6]: for<'_0> FnMut R, (&'_0_0 (&'a (Slice)))>, @TraitClause4::Output = bool, - for<'_0> @TraitClause6::parent_clause0::Output = R, + for<'_0> @TraitClause6::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::position<'a, '_1, T, P>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: P) -> Option[Sized] where @@ -3323,7 +3369,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::rposition<'a, '_1, T, P>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: P) -> Option[Sized] where @@ -3333,21 +3379,21 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: ExactSizeIterator[@TraitClause0]>, [@TraitClause5]: DoubleEndedIterator[@TraitClause0]>, - @TraitClause2::parent_clause0::Output = bool, + @TraitClause2::parent_clause1::Output = bool, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord<&'a (Slice)>, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord<&'a (Slice)>, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -3355,17 +3401,17 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut)))>, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -3373,15 +3419,15 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut)))>, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by<'a, T, F>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::rev<'a, T>(@1: Chunks<'a, T>[@TraitClause0]) -> Rev[@TraitClause0]>[@TraitClause1] where @@ -3468,7 +3514,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut), @TraitClause4::Item)>, - @TraitClause5::parent_clause0::Output = Ordering, + @TraitClause5::parent_clause1::Output = Ordering, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partial_cmp<'a, T, I>(@1: Chunks<'a, T>[@TraitClause0], @2: I) -> Option[Sized] where @@ -3486,7 +3532,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut), @TraitClause4::Item)>, - @TraitClause5::parent_clause0::Output = Option[Sized], + @TraitClause5::parent_clause1::Output = Option[Sized], pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::eq<'a, T, I>(@1: Chunks<'a, T>[@TraitClause0], @2: I) -> bool where @@ -3504,7 +3550,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut), @TraitClause4::Item)>, - @TraitClause5::parent_clause0::Output = bool, + @TraitClause5::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::ne<'a, T, I>(@1: Chunks<'a, T>[@TraitClause0], @2: I) -> bool where @@ -3558,7 +3604,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>(@1: Chunks<'a, T>[@TraitClause0], @2: F) -> bool where @@ -3568,7 +3614,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: PartialOrd, - @TraitClause4::parent_clause0::Output = K, + @TraitClause4::parent_clause1::Output = K, // Full name: core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::__iterator_get_unchecked pub unsafe fn {impl Iterator for Chunks<'a, T>[@TraitClause0]}::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (Chunks<'a, T>[@TraitClause0]), @2: usize) -> &'_ (Slice) @@ -3580,7 +3626,8 @@ impl<'a, T> Iterator for Chunks<'a, T>[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (Slice)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<&'_ (Slice)> type Item = &'a (Slice) fn next<'_0> = {impl Iterator for Chunks<'a, T>[@TraitClause0]}::next<'a, '_0_0, T>[@TraitClause0] fn next_chunk<'_0, const N : usize, [@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::next_chunk<'a, '_0_0, T, const N : usize>[@TraitClause0, @TraitClause0_0] @@ -3593,49 +3640,49 @@ where fn chain, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator, @TraitClause1_2::Item = &'a (Slice)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::chain<'a, T, U>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn zip, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::zip<'a, T, U>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn intersperse<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Clone<&'a (Slice)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::intersperse<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::intersperse_with<'a, T, G>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::filter<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::intersperse_with<'a, T, G>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = ()> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::filter<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn enumerate<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::enumerate<'a, T>[@TraitClause0, @TraitClause0_0] fn peekable<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::peekable<'a, T>[@TraitClause0, @TraitClause0_0] - fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::skip_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::take_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::skip_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::take_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn skip<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::skip<'a, T>[@TraitClause0, @TraitClause0_0] fn take<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::take<'a, T>[@TraitClause0, @TraitClause0_0] - fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut))>, for<'_0> @TraitClause1_4::parent_clause0::Output = Option[@TraitClause1_1]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::scan<'a, T, St, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut))>, @TraitClause1_4::parent_clause0::Output = U> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut))>, for<'_0> @TraitClause1_4::parent_clause1::Output = Option[@TraitClause1_1]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::scan<'a, T, St, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut))>, @TraitClause1_4::parent_clause1::Output = U> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn flatten<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: IntoIterator<&'a (Slice)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::flatten<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut), const N : usize>))>, for<'_0> @TraitClause1_3::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map_windows<'a, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut), const N : usize>))>, for<'_0> @TraitClause1_3::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::map_windows<'a, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn fuse<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::fuse<'a, T>[@TraitClause0, @TraitClause0_0] - fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::inspect<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = ()> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::inspect<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn by_ref<'_0, [@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::by_ref<'a, '_0_0, T>[@TraitClause0, @TraitClause0_0] fn collect, [@TraitClause1]: FromIterator)>, [@TraitClause2]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::collect<'a, T, B>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn try_collect<'_0, B, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Try<&'a (Slice)>, [@TraitClause3]: Residual<@TraitClause1_2::Residual, B>, [@TraitClause4]: FromIterator> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_collect<'a, '_0_0, T, B>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn collect_into<'_0, E, [@TraitClause0]: Sized, [@TraitClause1]: Extend)>, [@TraitClause2]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::collect_into<'a, '_0_0, T, E>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend)>, [@TraitClause5]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_5::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partition<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_fold<'a, '_0_0, T, B, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: Try, @TraitClause1_3::parent_clause0::Output = R, @TraitClause1_4::Output = ()> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_for_each<'a, '_0_0, T, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn fold, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut), &'a (Slice))>, @TraitClause1_2::parent_clause0::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::reduce<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, [@TraitClause5]: FnMut R, (&'a (Slice), &'a (Slice))>, @TraitClause1_3::Output = &'a (Slice), @TraitClause1_5::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_reduce<'a, '_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (&'a (Slice)))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_find<'a, '_0_0, T, R, impl FnMut(&Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut))>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend)>, [@TraitClause5]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_5::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partition<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: Try, @TraitClause1_4::parent_clause1::Output = R, @TraitClause1_5::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_fold<'a, '_0_0, T, B, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: Try, @TraitClause1_3::parent_clause1::Output = R, @TraitClause1_4::Output = ()> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_for_each<'a, '_0_0, T, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn fold, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut), &'a (Slice))>, @TraitClause1_2::parent_clause1::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::reduce<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause5]: FnMut R, (&'a (Slice), &'a (Slice))>, @TraitClause1_3::Output = &'a (Slice), @TraitClause1_5::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_reduce<'a, '_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (&'a (Slice)))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::try_find<'a, '_0_0, T, R, impl FnMut(&Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut))>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn max<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord<&'a (Slice)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn min<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord<&'a (Slice)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::max_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::min_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn rev<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: DoubleEndedIterator[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::rev<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn unzip, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: Default, [@TraitClause7]: Extend, [@TraitClause8]: Sized[@TraitClause0]>, [@TraitClause9]: Iterator[@TraitClause0]>, {impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = (A, B)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::unzip<'a, T, A, B, FromA, FromB>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] fn copied<'a, T, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Iterator[@TraitClause0]>, [@TraitClause3]: Copy, T : 'a, {impl Iterator for Chunks<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a (T)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::copied<'a, 'a, T, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] @@ -3645,19 +3692,19 @@ where fn sum, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Sum)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::sum<'a, T, S>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn product, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Product)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::product<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: Ord<&'a (Slice)>, [@TraitClause3]: Sized[@TraitClause0]>, @TraitClause1_1::Item = &'a (Slice)> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::cmp<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn partial_cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partial_cmp<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause0::Output = Option[Sized]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partial_cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause1::Output = Option[Sized]> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::partial_cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn eq, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::eq<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::eq_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::eq_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn ne, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::ne<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn lt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::lt<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn le, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::le<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn gt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::gt<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn ge, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::ge<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn is_sorted<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: PartialOrd<&'a (Slice), &'a (Slice)>> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_sorted<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause1::Output = K> = core::slice::iter::{impl Iterator for Chunks<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn __iterator_get_unchecked<'_0> = {impl Iterator for Chunks<'a, T>[@TraitClause0]}::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] } @@ -3673,7 +3720,7 @@ pub fn {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::next<'a, '_1, T>(@ where [@TraitClause0]: Sized, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::next_chunk<'a, '_1, T, const N : usize>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0])) -> Result), const N : usize>, IntoIter<&'a (Slice), const N : usize>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>[Sized), const N : usize>>, Sized), const N : usize>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::next_chunk<'a, '_1, T, const N : usize>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0])) -> Result), const N : usize>, IntoIter<&'a (Slice), const N : usize>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>[Sized), const N : usize>>, Sized), const N : usize>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, @@ -3707,7 +3754,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::chain<'a, T, U>(@1: ChunksExact<'a, T>[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::chain<'a, T, U>(@1: ChunksExact<'a, T>[@TraitClause0], @2: U) -> Chain[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -3715,7 +3762,7 @@ where [@TraitClause3]: IntoIterator, @TraitClause3::Item = &'a (Slice), -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::zip<'a, T, U>(@1: ChunksExact<'a, T>[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause1] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::zip<'a, T, U>(@1: ChunksExact<'a, T>[@TraitClause0], @2: U) -> Zip[@TraitClause0], @TraitClause3::IntoIter>[@TraitClause2, @TraitClause3::parent_clause2] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -3734,7 +3781,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut, - @TraitClause3::parent_clause0::Output = &'a (Slice), + @TraitClause3::parent_clause1::Output = &'a (Slice), #[lang_item("IteratorMap")] pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Map[@TraitClause0], F>[@TraitClause3, @TraitClause2] @@ -3744,7 +3791,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::for_each<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) where @@ -3752,7 +3799,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = (), + @TraitClause3::parent_clause1::Output = (), #[lang_item("iter_filter")] pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::filter<'a, T, P>(@1: ChunksExact<'a, T>[@TraitClause0], @2: P) -> Filter[@TraitClause0], P>[@TraitClause2, @TraitClause1] @@ -3761,7 +3808,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> FilterMap[@TraitClause0], F>[@TraitClause3, @TraitClause2] where @@ -3770,7 +3817,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], #[lang_item("enumerate_method")] pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::enumerate<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Enumerate[@TraitClause0]>[@TraitClause1] @@ -3789,7 +3836,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::take_while<'a, T, P>(@1: ChunksExact<'a, T>[@TraitClause0], @2: P) -> TakeWhile[@TraitClause0], P>[@TraitClause2, @TraitClause1] where @@ -3797,7 +3844,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>(@1: ChunksExact<'a, T>[@TraitClause0], @2: P) -> MapWhile[@TraitClause0], P>[@TraitClause3, @TraitClause2] where @@ -3806,7 +3853,7 @@ where [@TraitClause2]: Sized

, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::skip<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0], @2: usize) -> Skip[@TraitClause0]>[@TraitClause1] where @@ -3826,7 +3873,7 @@ where [@TraitClause3]: Sized, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut))>, - for<'_0> @TraitClause5::parent_clause0::Output = Option[@TraitClause2], + for<'_0> @TraitClause5::parent_clause1::Output = Option[@TraitClause2], pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> FlatMap[@TraitClause0], U, F>[@TraitClause3, @TraitClause1, @TraitClause2, @TraitClause4] where @@ -3836,7 +3883,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut))>, - @TraitClause5::parent_clause0::Output = U, + @TraitClause5::parent_clause1::Output = U, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::flatten<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Flatten[@TraitClause0]>[@TraitClause1, {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0], @TraitClause2] where @@ -3851,7 +3898,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut), const N : usize>))>, - for<'_0> @TraitClause4::parent_clause0::Output = R, + for<'_0> @TraitClause4::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::fuse<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Fuse[@TraitClause0]>[@TraitClause1] where @@ -3864,7 +3911,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = (), + for<'_0> @TraitClause3::parent_clause1::Output = (), pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::by_ref<'a, '_1, T>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0])) -> &'_1 mut (ChunksExact<'a, T>[@TraitClause0]) where @@ -3904,7 +3951,7 @@ where [@TraitClause4]: Default, [@TraitClause5]: Extend)>, [@TraitClause6]: for<'_0> FnMut)))>, - for<'_0> @TraitClause6::parent_clause0::Output = bool, + for<'_0> @TraitClause6::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>(@1: ChunksExact<'a, T>[@TraitClause0], @2: P) -> usize where @@ -3916,7 +3963,7 @@ where [@TraitClause5]: for<'_0> FnMut, T : 'a, {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), - for<'_0> @TraitClause5::parent_clause0::Output = bool, + for<'_0> @TraitClause5::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>(@1: ChunksExact<'a, T>[@TraitClause0], @2: P) -> bool where @@ -3924,7 +3971,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_fold<'a, '_1, T, B, F, R>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: B, @3: F) -> R where @@ -3935,7 +3982,7 @@ where [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: FnMut))>, [@TraitClause6]: Try, - @TraitClause5::parent_clause0::Output = R, + @TraitClause5::parent_clause1::Output = R, @TraitClause6::Output = B, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_for_each<'a, '_1, T, F, R>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: F) -> R @@ -3946,7 +3993,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: Try, - @TraitClause4::parent_clause0::Output = R, + @TraitClause4::parent_clause1::Output = R, @TraitClause5::Output = (), pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::fold<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: B, @3: F) -> B @@ -3956,15 +4003,15 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = B, + @TraitClause4::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::reduce<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::reduce<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut), &'a (Slice))>, - @TraitClause3::parent_clause0::Output = &'a (Slice), + @TraitClause3::parent_clause1::Output = &'a (Slice), pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_reduce<'a, '_1, T, R, impl FnMut(Self::Item, Self::Item) -> R>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause5::TryType where @@ -3973,10 +4020,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause6]: FnMut R, (&'a (Slice), &'a (Slice))>, @TraitClause4::Output = &'a (Slice), - @TraitClause6::parent_clause0::Output = R, + @TraitClause6::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::all<'a, '_1, T, F>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: F) -> bool where @@ -3984,7 +4031,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::any<'a, '_1, T, F>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: F) -> bool where @@ -3992,15 +4039,15 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find<'a, '_1, T, P>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: P) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find<'a, '_1, T, P>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: P) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut)))>, - for<'_0> @TraitClause3::parent_clause0::Output = bool, + for<'_0> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find_map<'a, '_1, T, B, F>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: F) -> Option[@TraitClause1] where @@ -4009,7 +4056,7 @@ where [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, - @TraitClause4::parent_clause0::Output = Option[@TraitClause1], + @TraitClause4::parent_clause1::Output = Option[@TraitClause1], pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_find<'a, '_1, T, R, impl FnMut(&Self::Item) -> R>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause5::TryType where @@ -4018,10 +4065,10 @@ where [@TraitClause2]: Sized R>, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: Try, - [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, + [@TraitClause5]: Residual<@TraitClause4::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause6]: for<'_0> FnMut R, (&'_0_0 (&'a (Slice)))>, @TraitClause4::Output = bool, - for<'_0> @TraitClause6::parent_clause0::Output = R, + for<'_0> @TraitClause6::parent_clause1::Output = R, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::position<'a, '_1, T, P>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: P) -> Option[Sized] where @@ -4029,7 +4076,7 @@ where [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, - @TraitClause3::parent_clause0::Output = bool, + @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::rposition<'a, '_1, T, P>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: P) -> Option[Sized] where @@ -4039,21 +4086,21 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: ExactSizeIterator[@TraitClause0]>, [@TraitClause5]: DoubleEndedIterator[@TraitClause0]>, - @TraitClause2::parent_clause0::Output = bool, + @TraitClause2::parent_clause1::Output = bool, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord<&'a (Slice)>, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Ord<&'a (Slice)>, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -4061,17 +4108,17 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut)))>, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -4079,15 +4126,15 @@ where [@TraitClause3]: Ord, [@TraitClause4]: Sized[@TraitClause0]>, [@TraitClause5]: for<'_0> FnMut)))>, - for<'_0> @TraitClause5::parent_clause0::Output = B, + for<'_0> @TraitClause5::parent_clause1::Output = B, -pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0] +pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by<'a, T, F>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = Ordering, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = Ordering, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::rev<'a, T>(@1: ChunksExact<'a, T>[@TraitClause0]) -> Rev[@TraitClause0]>[@TraitClause1] where @@ -4174,7 +4221,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut), @TraitClause4::Item)>, - @TraitClause5::parent_clause0::Output = Ordering, + @TraitClause5::parent_clause1::Output = Ordering, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partial_cmp<'a, T, I>(@1: ChunksExact<'a, T>[@TraitClause0], @2: I) -> Option[Sized] where @@ -4192,7 +4239,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut), @TraitClause4::Item)>, - @TraitClause5::parent_clause0::Output = Option[Sized], + @TraitClause5::parent_clause1::Output = Option[Sized], pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::eq<'a, T, I>(@1: ChunksExact<'a, T>[@TraitClause0], @2: I) -> bool where @@ -4210,7 +4257,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: IntoIterator, [@TraitClause5]: FnMut), @TraitClause4::Item)>, - @TraitClause5::parent_clause0::Output = bool, + @TraitClause5::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::ne<'a, T, I>(@1: ChunksExact<'a, T>[@TraitClause0], @2: I) -> bool where @@ -4264,7 +4311,7 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, - for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + for<'_0, '_1> @TraitClause3::parent_clause1::Output = bool, pub fn core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>(@1: ChunksExact<'a, T>[@TraitClause0], @2: F) -> bool where @@ -4274,7 +4321,7 @@ where [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: PartialOrd, - @TraitClause4::parent_clause0::Output = K, + @TraitClause4::parent_clause1::Output = K, // Full name: core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::__iterator_get_unchecked pub unsafe fn {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (ChunksExact<'a, T>[@TraitClause0]), @2: usize) -> &'_ (Slice) @@ -4286,7 +4333,8 @@ impl<'a, T> Iterator for ChunksExact<'a, T>[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (Slice)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<&'_ (Slice)> type Item = &'a (Slice) fn next<'_0> = {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::next<'a, '_0_0, T>[@TraitClause0] fn next_chunk<'_0, const N : usize, [@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::next_chunk<'a, '_0_0, T, const N : usize>[@TraitClause0, @TraitClause0_0] @@ -4299,49 +4347,49 @@ where fn chain, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator, @TraitClause1_2::Item = &'a (Slice)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::chain<'a, T, U>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn zip, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: IntoIterator> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::zip<'a, T, U>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn intersperse<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Clone<&'a (Slice)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::intersperse<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause0::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::intersperse_with<'a, T, G>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::filter<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn intersperse_with, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut, @TraitClause1_2::parent_clause1::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::intersperse_with<'a, T, G>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn for_each, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = ()> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::filter<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::filter_map<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn enumerate<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::enumerate<'a, T>[@TraitClause0, @TraitClause0_0] fn peekable<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::peekable<'a, T>[@TraitClause0, @TraitClause0_0] - fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::skip_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::take_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::skip_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn take_while, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::take_while<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map_while, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map_while<'a, T, B, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn skip<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::skip<'a, T>[@TraitClause0, @TraitClause0_0] fn take<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::take<'a, T>[@TraitClause0, @TraitClause0_0] - fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut))>, for<'_0> @TraitClause1_4::parent_clause0::Output = Option[@TraitClause1_1]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::scan<'a, T, St, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut))>, @TraitClause1_4::parent_clause0::Output = U> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn scan, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut))>, for<'_0> @TraitClause1_4::parent_clause1::Output = Option[@TraitClause1_1]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::scan<'a, T, St, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn flat_map, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut))>, @TraitClause1_4::parent_clause1::Output = U> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::flat_map<'a, T, U, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn flatten<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: IntoIterator<&'a (Slice)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::flatten<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut), const N : usize>))>, for<'_0> @TraitClause1_3::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map_windows<'a, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn map_windows, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: for<'_0> FnMut), const N : usize>))>, for<'_0> @TraitClause1_3::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::map_windows<'a, T, F, R, const N : usize>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn fuse<[@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::fuse<'a, T>[@TraitClause0, @TraitClause0_0] - fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::inspect<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn inspect, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = ()> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::inspect<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn by_ref<'_0, [@TraitClause0]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::by_ref<'a, '_0_0, T>[@TraitClause0, @TraitClause0_0] fn collect, [@TraitClause1]: FromIterator)>, [@TraitClause2]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::collect<'a, T, B>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn try_collect<'_0, B, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Try<&'a (Slice)>, [@TraitClause3]: Residual<@TraitClause1_2::Residual, B>, [@TraitClause4]: FromIterator> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_collect<'a, '_0_0, T, B>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn collect_into<'_0, E, [@TraitClause0]: Sized, [@TraitClause1]: Extend)>, [@TraitClause2]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::collect_into<'a, '_0_0, T, E>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend)>, [@TraitClause5]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_5::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partition<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_fold<'a, '_0_0, T, B, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: Try, @TraitClause1_3::parent_clause0::Output = R, @TraitClause1_4::Output = ()> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_for_each<'a, '_0_0, T, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn fold, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut), &'a (Slice))>, @TraitClause1_2::parent_clause0::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::reduce<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, [@TraitClause5]: FnMut R, (&'a (Slice), &'a (Slice))>, @TraitClause1_3::Output = &'a (Slice), @TraitClause1_5::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_reduce<'a, '_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause0::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause0]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (&'a (Slice)))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause0::Output = R> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_find<'a, '_0_0, T, R, impl FnMut(&Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut))>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partition, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Default, [@TraitClause4]: Extend)>, [@TraitClause5]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_5::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partition<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn partition_in_place<'a, T, P, [@TraitClause0]: Sized, [@TraitClause1]: Sized

, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: DoubleEndedIterator[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut, T : 'a, {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a mut (T), for<'_0> @TraitClause1_4::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partition_in_place<'a, 'a, T, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_partitioned, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_partitioned<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_fold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: FnMut))>, [@TraitClause5]: Try, @TraitClause1_4::parent_clause1::Output = R, @TraitClause1_5::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_fold<'a, '_0_0, T, B, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn try_for_each<'_0, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: Try, @TraitClause1_3::parent_clause1::Output = R, @TraitClause1_4::Output = ()> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_for_each<'a, '_0_0, T, F, R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn fold, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn reduce, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut), &'a (Slice))>, @TraitClause1_2::parent_clause1::Output = &'a (Slice)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::reduce<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn try_reduce<'_0, R, impl FnMut(Self::Item, Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause5]: FnMut R, (&'a (Slice), &'a (Slice))>, @TraitClause1_3::Output = &'a (Slice), @TraitClause1_5::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_reduce<'a, '_0_0, T, R, impl FnMut(Self::Item, Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn all<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn any<'_0, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find_map<'_0, B, F, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, @TraitClause1_3::parent_clause1::Output = Option[@TraitClause1_0]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn try_find<'_0, R, impl FnMut(&Self::Item) -> R, [@TraitClause0]: Sized, [@TraitClause1]: Sized R>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: Try, [@TraitClause4]: Residual<@TraitClause1_3::Residual, Option<&'a (Slice)>[{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::parent_clause1]>, [@TraitClause5]: for<'_0> FnMut R, (&'_0_0 (&'a (Slice)))>, @TraitClause1_3::Output = bool, for<'_0> @TraitClause1_5::parent_clause1::Output = R> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::try_find<'a, '_0_0, T, R, impl FnMut(&Self::Item) -> R>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn position<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: FnMut))>, @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_0, P, [@TraitClause0]: Sized

, [@TraitClause1]: FnMut))>, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn max<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord<&'a (Slice)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn min<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: Ord<&'a (Slice)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::max_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized[@TraitClause0]>, [@TraitClause4]: for<'_0> FnMut)))>, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by_key<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn min_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::min_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn rev<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: DoubleEndedIterator[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::rev<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] fn unzip, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: Default, [@TraitClause7]: Extend, [@TraitClause8]: Sized[@TraitClause0]>, [@TraitClause9]: Iterator[@TraitClause0]>, {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = (A, B)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::unzip<'a, T, A, B, FromA, FromB>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] fn copied<'a, T, [@TraitClause0]: Sized, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Iterator[@TraitClause0]>, [@TraitClause3]: Copy, T : 'a, {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}<'a, T>[@TraitClause0]::Item = &'a (T)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::copied<'a, 'a, T, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] @@ -4351,19 +4399,19 @@ where fn sum, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Sum)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::sum<'a, T, S>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn product, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: Product)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::product<'a, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: Ord<&'a (Slice)>, [@TraitClause3]: Sized[@TraitClause0]>, @TraitClause1_1::Item = &'a (Slice)> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::cmp<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause0::Output = Ordering> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause1::Output = Ordering> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn partial_cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partial_cmp<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause0::Output = Option[Sized]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partial_cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause1::Output = Option[Sized]> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::partial_cmp_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn eq, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::eq<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::eq_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut), @TraitClause1_3::Item)>, @TraitClause1_4::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::eq_by<'a, T, I, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn ne, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::ne<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn lt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::lt<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn le, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::le<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn gt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::gt<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn ge, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd<&'a (Slice), @TraitClause1_1::Item>, [@TraitClause3]: Sized[@TraitClause0]>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::ge<'a, T, I>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn is_sorted<[@TraitClause0]: Sized[@TraitClause0]>, [@TraitClause1]: PartialOrd<&'a (Slice), &'a (Slice)>> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_sorted<'a, T>[@TraitClause0, @TraitClause0_0, @TraitClause0_1] - fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_sorted_by, [@TraitClause1]: Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> FnMut)), &'_0_1 (&'a (Slice)))>, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = bool> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized[@TraitClause0]>, [@TraitClause3]: FnMut))>, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause1::Output = K> = core::slice::iter::{impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::is_sorted_by_key<'a, T, F, K>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn __iterator_get_unchecked<'_0> = {impl Iterator for ChunksExact<'a, T>[@TraitClause0]}::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] } diff --git a/charon/tests/ui/loops.out b/charon/tests/ui/loops.out index 3de6f947c..a8293c939 100644 --- a/charon/tests/ui/loops.out +++ b/charon/tests/ui/loops.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -181,6 +188,7 @@ pub trait TrustedRandomAccessNoCoerce } // Full name: core::iter::range::Step +#[lang_item("range_step")] pub trait Step { parent_clause0 : [@TraitClause0]: Sized @@ -264,7 +272,8 @@ impl Step for i32 { #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } @@ -291,7 +300,8 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Step, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = @TraitClause0 type Item = A fn next<'_0> = {impl Iterator for Range[@TraitClause0]}::next<'_0_0, A>[@TraitClause0, @TraitClause1] } @@ -330,11 +340,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] @@ -375,9 +386,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Iterator, { - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1::parent_clause1 + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1 type Item = @TraitClause1::Item type IntoIter = I fn into_iter = {impl IntoIterator for I}::into_iter[@TraitClause0, @TraitClause1] @@ -386,7 +398,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -402,23 +415,25 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -426,12 +441,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -448,9 +474,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -459,14 +486,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -479,6 +507,9 @@ where #[lang_item("index")] pub trait Index { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized + parent_clause2 : [@TraitClause2]: MetaSized type Output fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } @@ -491,11 +522,13 @@ where #[lang_item("index_mut")] pub trait IndexMut { - parent_clause0 : [@TraitClause0]: Index + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Index + parent_clause2 : [@TraitClause2]: MetaSized fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx>[Self] } -pub fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (@TraitClause0::parent_clause0::Output) +pub fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (@TraitClause0::parent_clause1::Output) where [@TraitClause0]: IndexMut, @@ -503,7 +536,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -511,9 +545,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -528,7 +563,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -541,26 +576,35 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } // Full name: core::slice::index::private_slice_index::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::slice::index::private_slice_index::{impl Sealed for usize} -impl Sealed for usize {} +impl Sealed for usize { + parent_clause0 = MetaSized +} // Full name: core::slice::index::SliceIndex #[lang_item("SliceIndex")] pub trait SliceIndex { - parent_clause0 : [@TraitClause0]: Sealed + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sealed + parent_clause2 : [@TraitClause2]: MetaSized + parent_clause3 : [@TraitClause3]: MetaSized type Output fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T>[Self] fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T>[Self] @@ -629,7 +673,10 @@ impl SliceIndex> for usize where [@TraitClause0]: Sized, { - parent_clause0 = {impl Sealed for usize} + parent_clause0 = MetaSized + parent_clause1 = {impl Sealed for usize} + parent_clause2 = MetaSized> + parent_clause3 = @TraitClause0::parent_clause0 type Output = T fn get<'_0> = {impl SliceIndex> for usize}::get<'_0_0, T>[@TraitClause0] fn get_mut<'_0> = {impl SliceIndex> for usize}::get_mut<'_0_0, T>[@TraitClause0] @@ -671,6 +718,9 @@ where [@TraitClause2]: Sized, [@TraitClause3]: SliceIndex>, { + parent_clause0 = MetaSized[@TraitClause0, @TraitClause2]> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause3::parent_clause3 type Output = @TraitClause3::Output fn index<'_0> = {impl Index for Vec[@TraitClause0, @TraitClause2]}::index<'_0_0, T, I, A>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] } @@ -691,7 +741,9 @@ where [@TraitClause2]: Sized, [@TraitClause3]: SliceIndex>, { - parent_clause0 = {impl Index for Vec[@TraitClause0, @TraitClause2]}[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] + parent_clause0 = MetaSized[@TraitClause0, @TraitClause2]> + parent_clause1 = {impl Index for Vec[@TraitClause0, @TraitClause2]}[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] + parent_clause2 = @TraitClause1::parent_clause0 fn index_mut<'_0> = {impl IndexMut for Vec[@TraitClause0, @TraitClause2]}::index_mut<'_0_0, T, I, A>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3] } @@ -2056,7 +2108,7 @@ pub enum List where [@TraitClause0]: Sized, { - Cons(T, alloc::boxed::Box[@TraitClause0]>[Sized]), + Cons(T, alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]), Nil, } @@ -2067,7 +2119,7 @@ pub fn get_elem_mut<'_0>(@1: &'_0 mut (List[Sized]), @2: usize) -> let ls@1: &'_ mut (List[Sized]); // arg #1 let x@2: usize; // arg #2 let y@3: &'_ mut (usize); // local - let tl@4: &'_ mut (alloc::boxed::Box[Sized]>[Sized]); // local + let tl@4: &'_ mut (alloc::boxed::Box[Sized]>[MetaSized[Sized]>, Sized]); // local let @5: bool; // anonymous local let @6: usize; // anonymous local let @7: usize; // anonymous local @@ -2131,7 +2183,7 @@ where let i@2: u32; // arg #2 let @3: (); // anonymous local let x@4: &'_ mut (T); // local - let tl@5: &'_ mut (alloc::boxed::Box[@TraitClause0]>[Sized]); // local + let tl@5: &'_ mut (alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]); // local let @6: bool; // anonymous local let @7: u32; // anonymous local let @8: &'_ mut (List[@TraitClause0]); // anonymous local diff --git a/charon/tests/ui/matches.out b/charon/tests/ui/matches.out index 57d598c02..4cf5fa052 100644 --- a/charon/tests/ui/matches.out +++ b/charon/tests/ui/matches.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::E1 pub enum E1 { diff --git a/charon/tests/ui/method-impl-generalization.out b/charon/tests/ui/method-impl-generalization.out index edeb30aaf..727bbd4eb 100644 --- a/charon/tests/ui/method-impl-generalization.out +++ b/charon/tests/ui/method-impl-generalization.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -22,7 +29,15 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: test_crate::Trait @@ -167,6 +182,7 @@ fn main() // Full name: test_crate::Foo trait Foo { + parent_clause0 : [@TraitClause0]: MetaSized fn foo<'a, 'b> = test_crate::Foo::foo<'a, 'b, Self>[Self] } @@ -187,6 +203,7 @@ fn {impl Foo for ()}::foo<'a, 'b>(@1: &'b (()), @2: &'a (())) -> &'b (()) // Full name: test_crate::{impl Foo for ()} impl Foo for () { + parent_clause0 = MetaSized<()> fn foo<'a, 'b> = {impl Foo for ()}::foo<'a, 'b> } diff --git a/charon/tests/ui/ml-name-matcher-tests.out b/charon/tests/ui/ml-name-matcher-tests.out index f3292823e..688aff822 100644 --- a/charon/tests/ui/ml-name-matcher-tests.out +++ b/charon/tests/ui/ml-name-matcher-tests.out @@ -1,13 +1,23 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::index::Index #[lang_item("index")] pub trait Index { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized + parent_clause2 : [@TraitClause2]: MetaSized type Output fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } @@ -42,12 +52,18 @@ where // Full name: core::slice::index::private_slice_index::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::slice::index::SliceIndex #[lang_item("SliceIndex")] pub trait SliceIndex { - parent_clause0 : [@TraitClause0]: Sealed + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sealed + parent_clause2 : [@TraitClause2]: MetaSized + parent_clause3 : [@TraitClause3]: MetaSized type Output fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T>[Self] fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T>[Self] @@ -71,12 +87,17 @@ where [@TraitClause1]: Sized, [@TraitClause2]: SliceIndex>, { + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause2::parent_clause3 type Output = @TraitClause2::Output fn index<'_0> = {impl Index for Slice}::index<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } // Full name: core::slice::index::private_slice_index::{impl Sealed for RangeFrom[Sized]} -impl Sealed for RangeFrom[Sized] {} +impl Sealed for RangeFrom[Sized] { + parent_clause0 = MetaSized[Sized]> +} pub fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> Option<&'_0 (@TraitClause0::Output)>[Sized<&'_0 (@TraitClause0::Output)>] where @@ -137,7 +158,10 @@ impl SliceIndex> for RangeFrom[Sized] where [@TraitClause0]: Sized, { - parent_clause0 = {impl Sealed for RangeFrom[Sized]} + parent_clause0 = MetaSized[Sized]> + parent_clause1 = {impl Sealed for RangeFrom[Sized]} + parent_clause2 = MetaSized> + parent_clause3 = MetaSized> type Output = Slice fn get<'_0> = {impl SliceIndex> for RangeFrom[Sized]}::get<'_0_0, T>[@TraitClause0] fn get_mut<'_0> = {impl SliceIndex> for RangeFrom[Sized]}::get_mut<'_0_0, T>[@TraitClause0] @@ -164,7 +188,8 @@ fn bar() // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn method> = test_crate::Trait::method[Self, @TraitClause0_0] } @@ -173,8 +198,8 @@ where [@TraitClause0]: Trait, [@TraitClause1]: Sized, -// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]}::method -fn {impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]}::method() +// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]}::method +fn {impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]}::method() where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -186,17 +211,18 @@ where return } -// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]} -impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized] +// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]} +impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized] where [@TraitClause0]: Sized, { - parent_clause0 = Sized[@TraitClause0]> - fn method> = {impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]}::method[@TraitClause0, @TraitClause0_0] + parent_clause0 = MetaSized[@TraitClause0::parent_clause0, Sized]> + parent_clause1 = Sized[@TraitClause0]> + fn method> = {impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]}::method[@TraitClause0, @TraitClause0_0] } -// Full name: test_crate::{impl Trait[Sized]> for Option[@TraitClause1]}::method -fn {impl Trait[Sized]> for Option[@TraitClause1]}::method() +// Full name: test_crate::{impl Trait[@TraitClause0::parent_clause0, Sized]> for Option[@TraitClause1]}::method +fn {impl Trait[@TraitClause0::parent_clause0, Sized]> for Option[@TraitClause1]}::method() where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -209,14 +235,15 @@ where return } -// Full name: test_crate::{impl Trait[Sized]> for Option[@TraitClause1]} -impl Trait[Sized]> for Option[@TraitClause1] +// Full name: test_crate::{impl Trait[@TraitClause0::parent_clause0, Sized]> for Option[@TraitClause1]} +impl Trait[@TraitClause0::parent_clause0, Sized]> for Option[@TraitClause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, { - parent_clause0 = Sized[Sized]> - fn method> = {impl Trait[Sized]> for Option[@TraitClause1]}::method[@TraitClause0, @TraitClause1, @TraitClause0_0] + parent_clause0 = MetaSized[@TraitClause1]> + parent_clause1 = Sized[@TraitClause0::parent_clause0, Sized]> + fn method> = {impl Trait[@TraitClause0::parent_clause0, Sized]> for Option[@TraitClause1]}::method[@TraitClause0, @TraitClause1, @TraitClause0_0] } // Full name: test_crate::foo diff --git a/charon/tests/ui/monomorphization/adt_proj.out b/charon/tests/ui/monomorphization/adt_proj.out index 4b7fb9217..07de5c683 100644 --- a/charon/tests/ui/monomorphization/adt_proj.out +++ b/charon/tests/ui/monomorphization/adt_proj.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} #[lang_item("Result")] pub enum core::result::Result:: { diff --git a/charon/tests/ui/monomorphization/closure-fn.out b/charon/tests/ui/monomorphization/closure-fn.out index 56b8cc831..4a4ea2da3 100644 --- a/charon/tests/ui/monomorphization/closure-fn.out +++ b/charon/tests/ui/monomorphization/closure-fn.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,9 +45,10 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } @@ -46,26 +59,29 @@ struct test_crate::main::closure::<'_, '_> { // Full name: test_crate::main::{impl FnOnce<(u8, u8)> for closure<'_0, '_1>} impl<'_0, '_1> FnOnce<(u8, u8)> for closure<'_0, '_1> { - parent_clause0 = Sized<(u8, u8)> - parent_clause1 = Tuple<(u8, u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8, u8)> + parent_clause1 = Sized<(u8, u8)> + parent_clause2 = Tuple<(u8, u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}::call_once<'_0, '_1> } // Full name: test_crate::main::{impl FnMut<(u8, u8)> for closure<'_0, '_1>} impl<'_0, '_1> FnMut<(u8, u8)> for closure<'_0, '_1> { - parent_clause0 = {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> - parent_clause1 = Sized<(u8, u8)> - parent_clause2 = Tuple<(u8, u8)> + parent_clause0 = MetaSized<(u8, u8)> + parent_clause1 = {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> + parent_clause2 = Sized<(u8, u8)> + parent_clause3 = Tuple<(u8, u8)> fn call_mut<'_0> = {impl FnMut<(u8, u8)> for closure<'_0, '_1>}::call_mut<'_0, '_1, '_0_0> } // Full name: test_crate::main::{impl Fn<(u8, u8)> for closure<'_0, '_1>} impl<'_0, '_1> Fn<(u8, u8)> for closure<'_0, '_1> { - parent_clause0 = {impl FnMut<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> - parent_clause1 = Sized<(u8, u8)> - parent_clause2 = Tuple<(u8, u8)> + parent_clause0 = MetaSized<(u8, u8)> + parent_clause1 = {impl FnMut<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> + parent_clause2 = Sized<(u8, u8)> + parent_clause3 = Tuple<(u8, u8)> fn call<'_0> = {impl Fn<(u8, u8)> for closure<'_0, '_1>}::call<'_0, '_1, '_0_0> } diff --git a/charon/tests/ui/monomorphization/closure-fnonce.out b/charon/tests/ui/monomorphization/closure-fnonce.out index d4d57026d..67f12c058 100644 --- a/charon/tests/ui/monomorphization/closure-fnonce.out +++ b/charon/tests/ui/monomorphization/closure-fnonce.out @@ -1,12 +1,22 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::NotCopy struct NotCopy {} @@ -18,9 +28,10 @@ pub fn core::mem::drop::(@1: NotCopy) #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -61,9 +72,10 @@ fn {impl FnOnce<(u8)> for closure}::call_once(@1: closure, @2: (u8)) -> u8 // Full name: test_crate::main::{impl FnOnce<(u8)> for closure} impl FnOnce<(u8)> for closure { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8)> for closure}::call_once } diff --git a/charon/tests/ui/monomorphization/closures.out b/charon/tests/ui/monomorphization/closures.out index 7209bd311..957411361 100644 --- a/charon/tests/ui/monomorphization/closures.out +++ b/charon/tests/ui/monomorphization/closures.out @@ -1,12 +1,22 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Thing struct Thing {} @@ -18,9 +28,10 @@ pub fn core::mem::drop::(@1: Thing) #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -29,9 +40,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -39,9 +51,10 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } @@ -51,26 +64,29 @@ struct test_crate::main::closure::<'_> { // Full name: test_crate::main::{impl FnOnce<(u8)> for test_crate::main::closure<'_0>} impl<'_0> FnOnce<(u8)> for test_crate::main::closure<'_0> { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8)> for test_crate::main::closure<'_0>}::call_once<'_0> } // Full name: test_crate::main::{impl FnMut<(u8)> for test_crate::main::closure<'_0>} impl<'_0> FnMut<(u8)> for test_crate::main::closure<'_0> { - parent_clause0 = {impl FnOnce<(u8)> for test_crate::main::closure<'_0>}<'_0> - parent_clause1 = Sized<(u8)> - parent_clause2 = Tuple<(u8)> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = {impl FnOnce<(u8)> for test_crate::main::closure<'_0>}<'_0> + parent_clause2 = Sized<(u8)> + parent_clause3 = Tuple<(u8)> fn call_mut<'_0> = {impl FnMut<(u8)> for test_crate::main::closure<'_0>}::call_mut<'_0, '_0_0> } // Full name: test_crate::main::{impl Fn<(u8)> for test_crate::main::closure<'_0>} impl<'_0> Fn<(u8)> for test_crate::main::closure<'_0> { - parent_clause0 = {impl FnMut<(u8)> for test_crate::main::closure<'_0>}<'_0> - parent_clause1 = Sized<(u8)> - parent_clause2 = Tuple<(u8)> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = {impl FnMut<(u8)> for test_crate::main::closure<'_0>}<'_0> + parent_clause2 = Sized<(u8)> + parent_clause3 = Tuple<(u8)> fn call<'_0> = {impl Fn<(u8)> for test_crate::main::closure<'_0>}::call<'_0, '_0_0> } @@ -122,18 +138,20 @@ struct test_crate::main::closure#1::<'_> { // Full name: test_crate::main::{impl FnOnce<(u8)> for test_crate::main::closure#1<'_0>} impl<'_0> FnOnce<(u8)> for test_crate::main::closure#1<'_0> { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8)> for test_crate::main::closure#1<'_0>}::call_once<'_0> } // Full name: test_crate::main::{impl FnMut<(u8)> for test_crate::main::closure#1<'_0>} impl<'_0> FnMut<(u8)> for test_crate::main::closure#1<'_0> { - parent_clause0 = {impl FnOnce<(u8)> for test_crate::main::closure#1<'_0>}<'_0> - parent_clause1 = Sized<(u8)> - parent_clause2 = Tuple<(u8)> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = {impl FnOnce<(u8)> for test_crate::main::closure#1<'_0>}<'_0> + parent_clause2 = Sized<(u8)> + parent_clause3 = Tuple<(u8)> fn call_mut<'_0> = {impl FnMut<(u8)> for test_crate::main::closure#1<'_0>}::call_mut<'_0, '_0_0> } @@ -218,9 +236,10 @@ fn {impl FnOnce<(u8)> for test_crate::main::closure#2}::call_once(@1: test_crate // Full name: test_crate::main::{impl FnOnce<(u8)> for test_crate::main::closure#2} impl FnOnce<(u8)> for test_crate::main::closure#2 { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8)> for test_crate::main::closure#2}::call_once } diff --git a/charon/tests/ui/monomorphization/const_generics.out b/charon/tests/ui/monomorphization/const_generics.out index 8fb11ad94..715bc72d1 100644 --- a/charon/tests/ui/monomorphization/const_generics.out +++ b/charon/tests/ui/monomorphization/const_generics.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} struct test_crate::Foo:: { value: bool, diff --git a/charon/tests/ui/monomorphization/fn_ptr_generics.out b/charon/tests/ui/monomorphization/fn_ptr_generics.out index 76b74b056..3efa963e2 100644 --- a/charon/tests/ui/monomorphization/fn_ptr_generics.out +++ b/charon/tests/ui/monomorphization/fn_ptr_generics.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} #[lang_item("Option")] pub enum core::option::Option:: { diff --git a/charon/tests/ui/monomorphization/fndefs-casts.out b/charon/tests/ui/monomorphization/fndefs-casts.out index a06cf760e..007b0f9ee 100644 --- a/charon/tests/ui/monomorphization/fndefs-casts.out +++ b/charon/tests/ui/monomorphization/fndefs-casts.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } @@ -33,9 +45,10 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = call<'_0_0, Self, Args>[Self] } diff --git a/charon/tests/ui/monomorphization/rec-adt.out b/charon/tests/ui/monomorphization/rec-adt.out index f53f7acca..5ea30120b 100644 --- a/charon/tests/ui/monomorphization/rec-adt.out +++ b/charon/tests/ui/monomorphization/rec-adt.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} #[lang_item("NonNull")] pub opaque type core::ptr::non_null::NonNull::> diff --git a/charon/tests/ui/monomorphization/trait_impls.out b/charon/tests/ui/monomorphization/trait_impls.out index bc3acb73b..541c9e84b 100644 --- a/charon/tests/ui/monomorphization/trait_impls.out +++ b/charon/tests/ui/monomorphization/trait_impls.out @@ -26,9 +26,16 @@ impl Eq for bool { parent_clause0 = {impl PartialEq for bool} } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} fn test_crate::do_test::(@1: bool, @2: bool) { diff --git a/charon/tests/ui/monomorphization/trait_impls_ullbc.out b/charon/tests/ui/monomorphization/trait_impls_ullbc.out index ca391a329..751a4d43a 100644 --- a/charon/tests/ui/monomorphization/trait_impls_ullbc.out +++ b/charon/tests/ui/monomorphization/trait_impls_ullbc.out @@ -26,9 +26,16 @@ impl Eq for bool { parent_clause0 = {impl PartialEq for bool} } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} fn test_crate::do_test::(@1: bool, @2: bool) { diff --git a/charon/tests/ui/no_nested_borrows.out b/charon/tests/ui/no_nested_borrows.out index 7cb98e33b..b2ac0c5db 100644 --- a/charon/tests/ui/no_nested_borrows.out +++ b/charon/tests/ui/no_nested_borrows.out @@ -1,13 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::deref::Deref #[lang_item("deref")] pub trait Deref { + parent_clause0 : [@TraitClause0]: MetaSized type Target fn deref<'_0> = core::ops::deref::Deref::deref<'_0_0, Self>[Self] } @@ -34,32 +42,37 @@ where #[lang_item("global_alloc_ty")] pub struct Global {} -// Full name: alloc::boxed::{impl Deref for alloc::boxed::Box[@TraitClause0]}::deref -pub fn {impl Deref for alloc::boxed::Box[@TraitClause0]}::deref<'_0, T, A>(@1: &'_0 (alloc::boxed::Box[@TraitClause0])) -> &'_0 (T) +// Full name: alloc::boxed::{impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref +pub fn {impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref<'_0, T, A>(@1: &'_0 (alloc::boxed::Box[@TraitClause0, @TraitClause1])) -> &'_0 (T) where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, -// Full name: alloc::boxed::{impl Deref for alloc::boxed::Box[@TraitClause0]} -impl Deref for alloc::boxed::Box[@TraitClause0] +// Full name: alloc::boxed::{impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1]} +impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1] where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, { + parent_clause0 = @TraitClause0 type Target = T - fn deref<'_0> = {impl Deref for alloc::boxed::Box[@TraitClause0]}::deref<'_0_0, T, A>[@TraitClause0] + fn deref<'_0> = {impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref<'_0_0, T, A>[@TraitClause0, @TraitClause1] } -// Full name: alloc::boxed::{impl DerefMut for alloc::boxed::Box[@TraitClause0]}::deref_mut -pub fn {impl DerefMut for alloc::boxed::Box[@TraitClause0]}::deref_mut<'_0, T, A>(@1: &'_0 mut (alloc::boxed::Box[@TraitClause0])) -> &'_0 mut (T) +// Full name: alloc::boxed::{impl DerefMut for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref_mut +pub fn {impl DerefMut for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref_mut<'_0, T, A>(@1: &'_0 mut (alloc::boxed::Box[@TraitClause0, @TraitClause1])) -> &'_0 mut (T) where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, -// Full name: alloc::boxed::{impl DerefMut for alloc::boxed::Box[@TraitClause0]} -impl DerefMut for alloc::boxed::Box[@TraitClause0] +// Full name: alloc::boxed::{impl DerefMut for alloc::boxed::Box[@TraitClause0, @TraitClause1]} +impl DerefMut for alloc::boxed::Box[@TraitClause0, @TraitClause1] where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, { - parent_clause0 = {impl Deref for alloc::boxed::Box[@TraitClause0]}[@TraitClause0] - fn deref_mut<'_0> = {impl DerefMut for alloc::boxed::Box[@TraitClause0]}::deref_mut<'_0_0, T, A>[@TraitClause0] + parent_clause0 = {impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + fn deref_mut<'_0> = {impl DerefMut for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref_mut<'_0_0, T, A>[@TraitClause0, @TraitClause1] } // Full name: test_crate::Pair @@ -77,7 +90,7 @@ pub enum List where [@TraitClause0]: Sized, { - Cons(T, alloc::boxed::Box[@TraitClause0]>[Sized]), + Cons(T, alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]), Nil, } @@ -350,7 +363,7 @@ pub fn test_list1() { let @0: (); // return let l@1: List[Sized]; // local - let @2: alloc::boxed::Box[Sized]>[Sized]; // anonymous local + let @2: alloc::boxed::Box[Sized]>[MetaSized[Sized]>, Sized]; // anonymous local let @3: List[Sized]; // anonymous local storage_live(l@1) @@ -373,11 +386,11 @@ pub fn test_list1() pub fn test_box1() { let @0: (); // return - let b@1: alloc::boxed::Box[Sized]; // local + let b@1: alloc::boxed::Box[MetaSized, Sized]; // local let x@2: &'_ mut (i32); // local - let @3: &'_ mut (alloc::boxed::Box[Sized]); // anonymous local + let @3: &'_ mut (alloc::boxed::Box[MetaSized, Sized]); // anonymous local let x@4: &'_ (i32); // local - let @5: &'_ (alloc::boxed::Box[Sized]); // anonymous local + let @5: &'_ (alloc::boxed::Box[MetaSized, Sized]); // anonymous local let @6: (); // anonymous local let @7: bool; // anonymous local let @8: i32; // anonymous local @@ -387,13 +400,13 @@ pub fn test_box1() storage_live(x@2) storage_live(@3) @3 := &two-phase-mut b@1 - x@2 := {impl DerefMut for alloc::boxed::Box[@TraitClause0]}::deref_mut<'_, i32, Global>[Sized](move (@3)) + x@2 := {impl DerefMut for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref_mut<'_, i32, Global>[MetaSized, Sized](move (@3)) storage_dead(@3) *(x@2) := const (1 : i32) storage_live(x@4) storage_live(@5) @5 := &b@1 - x@4 := {impl Deref for alloc::boxed::Box[@TraitClause0]}::deref<'_, i32, Global>[Sized](move (@5)) + x@4 := {impl Deref for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::deref<'_, i32, Global>[MetaSized, Sized](move (@5)) storage_dead(@5) storage_live(@6) storage_live(@7) @@ -472,7 +485,7 @@ where let @0: (T, List[@TraitClause0]); // return let l@1: List[@TraitClause0]; // arg #1 let hd@2: T; // local - let tl@3: alloc::boxed::Box[@TraitClause0]>[Sized]; // local + let tl@3: alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]; // local let @4: T; // anonymous local let @5: List[@TraitClause0]; // anonymous local @@ -519,7 +532,7 @@ where [@TraitClause0]: Sized, { Leaf(T), - Node(T, NodeElem[@TraitClause0], alloc::boxed::Box[@TraitClause0]>[Sized]), + Node(T, NodeElem[@TraitClause0], alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]), } // Full name: test_crate::NodeElem @@ -527,7 +540,7 @@ pub enum NodeElem where [@TraitClause0]: Sized, { - Cons(alloc::boxed::Box[@TraitClause0]>[Sized], alloc::boxed::Box[@TraitClause0]>[Sized]), + Cons(alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized], alloc::boxed::Box[@TraitClause0]>[MetaSized[@TraitClause0]>, Sized]), Nil, } diff --git a/charon/tests/ui/opacity.out b/charon/tests/ui/opacity.out index 3e790ac92..db42ba9d6 100644 --- a/charon/tests/ui/opacity.out +++ b/charon/tests/ui/opacity.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::convert::Into #[lang_item("Into")] diff --git a/charon/tests/ui/opaque-trait.out b/charon/tests/ui/opaque-trait.out index c27377717..acf828d38 100644 --- a/charon/tests/ui/opaque-trait.out +++ b/charon/tests/ui/opaque-trait.out @@ -1,12 +1,20 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized const CONST1 : usize const CONST2 : usize const CONST3 : usize @@ -137,6 +145,7 @@ fn test_crate::{impl Trait for ()}::method2() // Full name: test_crate::{impl Trait for ()} impl Trait for () { + parent_clause0 = MetaSized<()> const CONST1 = {impl Trait for ()}::CONST1 const CONST2 = {impl Trait for ()}::CONST2 const CONST3 = {impl Trait for ()}::CONST3 @@ -177,6 +186,7 @@ fn {impl Trait for u8}::method2() // Full name: test_crate::{impl Trait for u8} impl Trait for u8 { + parent_clause0 = MetaSized const CONST1 = test_crate::Trait::CONST1[{impl Trait for u8}] const CONST2 = {impl Trait for u8}::CONST2 const CONST3 = test_crate::Trait::CONST3[{impl Trait for u8}] diff --git a/charon/tests/ui/opaque_attribute.out b/charon/tests/ui/opaque_attribute.out index f53c30fa9..27cb132b3 100644 --- a/charon/tests/ui/opaque_attribute.out +++ b/charon/tests/ui/opaque_attribute.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -17,6 +24,7 @@ where // Full name: test_crate::BoolTrait pub trait BoolTrait { + parent_clause0 : [@TraitClause0]: MetaSized fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self>[Self] } @@ -36,6 +44,7 @@ pub fn {impl BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bool)) -> bool // Full name: test_crate::{impl BoolTrait for bool} impl BoolTrait for bool { + parent_clause0 = MetaSized fn get_bool<'_0> = {impl BoolTrait for bool}::get_bool<'_0_0> } @@ -76,6 +85,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: BoolTrait, { + parent_clause0 = MetaSized[@TraitClause0]> fn get_bool<'_0> = {impl BoolTrait for Option[@TraitClause0]}::get_bool<'_0_0, T>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/panics.out b/charon/tests/ui/panics.out index 7f562af33..eaf14e2cd 100644 --- a/charon/tests/ui/panics.out +++ b/charon/tests/ui/panics.out @@ -10,9 +10,6 @@ where #[lang_item("format_argument")] pub opaque type Argument<'a> -// Full name: core::fmt::rt::{Argument<'_0>}::none -pub fn none<'_0>() -> Array, 0 : usize> - // Full name: core::fmt::rt::{Arguments<'a>}::new_const pub fn new_const<'a, const N : usize>(@1: &'a (Array<&'static (Str), const N : usize>)) -> Arguments<'a> @@ -70,7 +67,7 @@ fn panic3() storage_live(@5) storage_live(@6) storage_live(@7) - @7 := none<'_>() + @7 := [] @6 := &@7 @5 := &*(@6) @1 := new_v1<'_, 1 : usize, 0 : usize>(move (@2), move (@5)) @@ -166,7 +163,7 @@ fn panic7() storage_live(@5) storage_live(@6) storage_live(@7) - @7 := none<'_>() + @7 := [] @6 := &@7 @5 := &*(@6) @1 := new_v1<'_, 1 : usize, 0 : usize>(move (@2), move (@5)) diff --git a/charon/tests/ui/params.out b/charon/tests/ui/params.out index eab0a6639..3076905b3 100644 --- a/charon/tests/ui/params.out +++ b/charon/tests/ui/params.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: alloc::alloc::Global #[lang_item("global_alloc_ty")] @@ -45,7 +52,7 @@ where T1 : 'b, { V1(&'a mut (T1), &'b mut (T2)), - V2(alloc::boxed::Box[@TraitClause1, @TraitClause0]>[Sized]), + V2(alloc::boxed::Box[@TraitClause1, @TraitClause0]>[MetaSized[@TraitClause1, @TraitClause0]>, Sized]), } // Full name: test_crate::E2 @@ -59,7 +66,7 @@ where T2 : 'a, { V1(&'a mut (T1), &'b mut (T2)), - V3(alloc::boxed::Box[@TraitClause0, @TraitClause1]>[Sized]), + V3(alloc::boxed::Box[@TraitClause0, @TraitClause1]>[MetaSized[@TraitClause0, @TraitClause1]>, Sized]), } // Full name: test_crate::E3 @@ -77,8 +84,8 @@ where 'b : 'c, { V1(&'a mut (T1), &'b mut (T2)), - V2(alloc::boxed::Box[@TraitClause1, @TraitClause0]>[Sized]), - V3(alloc::boxed::Box[@TraitClause0, @TraitClause1]>[Sized]), + V2(alloc::boxed::Box[@TraitClause1, @TraitClause0]>[MetaSized[@TraitClause1, @TraitClause0]>, Sized]), + V3(alloc::boxed::Box[@TraitClause0, @TraitClause1]>[MetaSized[@TraitClause0, @TraitClause1]>, Sized]), V4(&'c (&'a (T1))), } @@ -99,8 +106,8 @@ where 'b : 'c, { V1(&'a mut (T1), &'b mut (T2)), - V2(alloc::boxed::Box[@TraitClause1, @TraitClause0, @TraitClause2]>[Sized]), - V3(alloc::boxed::Box[@TraitClause0, @TraitClause1, @TraitClause2]>[Sized]), + V2(alloc::boxed::Box[@TraitClause1, @TraitClause0, @TraitClause2]>[MetaSized[@TraitClause1, @TraitClause0, @TraitClause2]>, Sized]), + V3(alloc::boxed::Box[@TraitClause0, @TraitClause1, @TraitClause2]>[MetaSized[@TraitClause0, @TraitClause1, @TraitClause2]>, Sized]), V4(&'c (&'a (T3))), } @@ -121,8 +128,8 @@ where 'c : 'b, { V1(&'a mut (T1), &'b mut (T2)), - V2(alloc::boxed::Box[@TraitClause1, @TraitClause0, @TraitClause2]>[Sized]), - V3(alloc::boxed::Box[@TraitClause0, @TraitClause1, @TraitClause2]>[Sized]), + V2(alloc::boxed::Box[@TraitClause1, @TraitClause0, @TraitClause2]>[MetaSized[@TraitClause1, @TraitClause0, @TraitClause2]>, Sized]), + V3(alloc::boxed::Box[@TraitClause0, @TraitClause1, @TraitClause2]>[MetaSized[@TraitClause0, @TraitClause1, @TraitClause2]>, Sized]), V4(&'a (&'c (T3))), } diff --git a/charon/tests/ui/polonius_map.out b/charon/tests/ui/polonius_map.out index 1e01696d2..d8c52c400 100644 --- a/charon/tests/ui/polonius_map.out +++ b/charon/tests/ui/polonius_map.out @@ -1,9 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::borrow::Borrow #[lang_item("Borrow")] pub trait Borrow { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed>[Self] } @@ -14,10 +20,17 @@ where // Full name: core::borrow::{impl Borrow for T}::borrow #[lang_item("noop_method_borrow")] pub fn {impl Borrow for T}::borrow<'_0, T>(@1: &'_0 (T)) -> &'_0 (T) +where + [@TraitClause0]: MetaSized, // Full name: core::borrow::{impl Borrow for T} -impl Borrow for T { - fn borrow<'_0> = {impl Borrow for T}::borrow<'_0_0, T> +impl Borrow for T +where + [@TraitClause0]: MetaSized, +{ + parent_clause0 = @TraitClause0 + parent_clause1 = @TraitClause0 + fn borrow<'_0> = {impl Borrow for T}::borrow<'_0_0, T>[@TraitClause0] } // Full name: core::cmp::PartialEq @@ -55,10 +68,14 @@ impl Eq for u32 { // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::hash::Hasher pub trait Hasher { + parent_clause0 : [@TraitClause0]: MetaSized fn finish<'_0> = core::hash::Hasher::finish<'_0_0, Self>[Self] fn write<'_0, '_1> = core::hash::Hasher::write<'_0_0, '_0_1, Self>[Self] } @@ -87,8 +104,9 @@ where // Full name: core::hash::BuildHasher pub trait BuildHasher { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Hasher + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Hasher type Hasher fn build_hasher<'_0> = core::hash::BuildHasher::build_hasher<'_0_0, Self>[Self] } @@ -112,6 +130,9 @@ impl Hash for u32 { #[lang_item("index")] pub trait Index { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized + parent_clause2 : [@TraitClause2]: MetaSized type Output fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } @@ -147,9 +168,10 @@ where [@TraitClause3]: Eq, [@TraitClause4]: Hash, [@TraitClause5]: BuildHasher, - [@TraitClause6]: Borrow, - [@TraitClause7]: Hash, - [@TraitClause8]: Eq, + [@TraitClause6]: MetaSized, + [@TraitClause7]: Borrow, + [@TraitClause8]: Hash, + [@TraitClause9]: Eq, // Full name: std::collections::hash::map::{HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}::insert #[lang_item("hashmap_insert")] @@ -162,34 +184,39 @@ where [@TraitClause4]: Hash, [@TraitClause5]: BuildHasher, -// Full name: std::collections::hash::map::{impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}::index -pub fn {impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}::index<'_0, '_1, K, Q, V, S>(@1: &'_1 (HashMap[@TraitClause0, @TraitClause1, @TraitClause2]), @2: &'_0 (Q)) -> &'_1 (V) +// Full name: std::collections::hash::map::{impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause2, @TraitClause3]}::index +pub fn {impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause2, @TraitClause3]}::index<'_0, '_1, K, Q, V, S>(@1: &'_1 (HashMap[@TraitClause0, @TraitClause2, @TraitClause3]), @2: &'_0 (Q)) -> &'_1 (V) where [@TraitClause0]: Sized, - [@TraitClause1]: Sized, - [@TraitClause2]: Sized, - [@TraitClause3]: Eq, - [@TraitClause4]: Hash, - [@TraitClause5]: Borrow, - [@TraitClause6]: Eq, - [@TraitClause7]: Hash, - [@TraitClause8]: BuildHasher, + [@TraitClause1]: MetaSized, + [@TraitClause2]: Sized, + [@TraitClause3]: Sized, + [@TraitClause4]: Eq, + [@TraitClause5]: Hash, + [@TraitClause6]: Borrow, + [@TraitClause7]: Eq, + [@TraitClause8]: Hash, + [@TraitClause9]: BuildHasher, -// Full name: std::collections::hash::map::{impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause1, @TraitClause2]} -impl<'_0, K, Q, V, S> Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause1, @TraitClause2] +// Full name: std::collections::hash::map::{impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause2, @TraitClause3]} +impl<'_0, K, Q, V, S> Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause2, @TraitClause3] where [@TraitClause0]: Sized, - [@TraitClause1]: Sized, - [@TraitClause2]: Sized, - [@TraitClause3]: Eq, - [@TraitClause4]: Hash, - [@TraitClause5]: Borrow, - [@TraitClause6]: Eq, - [@TraitClause7]: Hash, - [@TraitClause8]: BuildHasher, + [@TraitClause1]: MetaSized, + [@TraitClause2]: Sized, + [@TraitClause3]: Sized, + [@TraitClause4]: Eq, + [@TraitClause5]: Hash, + [@TraitClause6]: Borrow, + [@TraitClause7]: Eq, + [@TraitClause8]: Hash, + [@TraitClause9]: BuildHasher, { + parent_clause0 = MetaSized[@TraitClause0, @TraitClause2, @TraitClause3]> + parent_clause1 = MetaSized<&'_ (Q)> + parent_clause2 = @TraitClause2::parent_clause0 type Output = V - fn index<'_0> = {impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}::index<'_0, '_0_0, K, Q, V, S>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause4, @TraitClause5, @TraitClause6, @TraitClause7, @TraitClause8] + fn index<'_0> = {impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause2, @TraitClause3]}::index<'_0, '_0_0, K, Q, V, S>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause4, @TraitClause5, @TraitClause6, @TraitClause7, @TraitClause8, @TraitClause9] } // Full name: std::hash::random::RandomState @@ -206,6 +233,7 @@ pub fn {impl Hasher for DefaultHasher}::write<'_0, '_1>(@1: &'_0 mut (DefaultHas // Full name: std::hash::random::{impl Hasher for DefaultHasher} impl Hasher for DefaultHasher { + parent_clause0 = MetaSized fn finish<'_0> = {impl Hasher for DefaultHasher}::finish<'_0_0> fn write<'_0, '_1> = {impl Hasher for DefaultHasher}::write<'_0_0, '_0_1> } @@ -215,8 +243,9 @@ pub fn {impl BuildHasher for RandomState}::build_hasher<'_0>(@1: &'_0 (RandomSta // Full name: std::hash::random::{impl BuildHasher for RandomState} impl BuildHasher for RandomState { - parent_clause0 = Sized - parent_clause1 = {impl Hasher for DefaultHasher} + parent_clause0 = MetaSized + parent_clause1 = Sized + parent_clause2 = {impl Hasher for DefaultHasher} type Hasher = DefaultHasher fn build_hasher<'_0> = {impl BuildHasher for RandomState}::build_hasher<'_0_0> } @@ -259,7 +288,7 @@ pub fn get_or_insert<'_0>(@1: &'_0 mut (HashMap[Sized[Sized, Sized, Sized, {impl Eq for u32}, {impl Hash for u32}, {impl BuildHasher for RandomState}, {impl Borrow for T}, {impl Hash for u32}, {impl Eq for u32}](move (@3), move (@4)) + @2 := get<'_, '_, u32, u32, RandomState, u32>[Sized, Sized, Sized, {impl Eq for u32}, {impl Hash for u32}, {impl BuildHasher for RandomState}, MetaSized, {impl Borrow for T}[MetaSized], {impl Hash for u32}, {impl Eq for u32}](move (@3), move (@4)) storage_dead(@4) storage_dead(@3) match @2 { @@ -280,7 +309,7 @@ pub fn get_or_insert<'_0>(@1: &'_0 mut (HashMap[Sized for HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}::index<'_, '_, u32, u32, u32, RandomState>[Sized, Sized, Sized, {impl Eq for u32}, {impl Hash for u32}, {impl Borrow for T}, {impl Eq for u32}, {impl Hash for u32}, {impl BuildHasher for RandomState}](move (@12), move (@13)) + @11 := {impl Index<&'_0 (Q)> for HashMap[@TraitClause0, @TraitClause2, @TraitClause3]}::index<'_, '_, u32, u32, u32, RandomState>[Sized, MetaSized, Sized, Sized, {impl Eq for u32}, {impl Hash for u32}, {impl Borrow for T}[MetaSized], {impl Eq for u32}, {impl Hash for u32}, {impl BuildHasher for RandomState}](move (@12), move (@13)) storage_dead(@13) storage_dead(@12) @10 := &*(@11) diff --git a/charon/tests/ui/predicates-on-late-bound-vars.out b/charon/tests/ui/predicates-on-late-bound-vars.out index a4c4a4063..45f2e2786 100644 --- a/charon/tests/ui/predicates-on-late-bound-vars.out +++ b/charon/tests/ui/predicates-on-late-bound-vars.out @@ -1,8 +1,14 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::cell::RefCell #[lang_item("RefCell")] pub opaque type RefCell +where + [@TraitClause0]: MetaSized, // Full name: core::cell::BorrowError pub struct BorrowError {} @@ -10,9 +16,12 @@ pub struct BorrowError {} // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} -// Full name: core::cell::{RefCell}::new -pub fn new(@1: T) -> RefCell +// Full name: core::cell::{RefCell[@TraitClause0::parent_clause0]}::new +pub fn new(@1: T) -> RefCell[@TraitClause0::parent_clause0] where [@TraitClause0]: Sized, @@ -31,10 +40,13 @@ where #[lang_item("RefCellRef")] pub opaque type Ref<'b, T> where + [@TraitClause0]: MetaSized, T : 'b, -// Full name: core::cell::{RefCell}::try_borrow -pub fn try_borrow<'_0, T>(@1: &'_0 (RefCell)) -> Result, BorrowError>[Sized>, Sized] +// Full name: core::cell::{RefCell[@TraitClause0]}::try_borrow +pub fn try_borrow<'_0, T>(@1: &'_0 (RefCell[@TraitClause0])) -> Result[@TraitClause0], BorrowError>[Sized[@TraitClause0]>, Sized] +where + [@TraitClause0]: MetaSized, // Full name: core::clone::Clone #[lang_item("clone")] @@ -50,6 +62,13 @@ pub fn clone<'_0, Self>(@1: &'_0 (Self)) -> Self where [@TraitClause0]: Clone, +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::option::Option #[lang_item("Option")] pub enum Option @@ -94,9 +113,9 @@ where fn foo() { let @0: (); // return - let ref_b@1: RefCell; // local - let @2: Result, BorrowError>[Sized>, Sized]; // anonymous local - let @3: &'_ (RefCell); // anonymous local + let ref_b@1: RefCell[MetaSized]; // local + let @2: Result[MetaSized], BorrowError>[Sized[MetaSized]>, Sized]; // anonymous local + let @3: &'_ (RefCell[MetaSized]); // anonymous local storage_live(ref_b@1) ref_b@1 := new[Sized](const (false)) @@ -104,7 +123,7 @@ fn foo() storage_live(@3) // `try_borrow` has a type that includes predicates on late bound regions. @3 := &ref_b@1 - @2 := try_borrow<'_, bool>(move (@3)) + @2 := try_borrow<'_, bool>[MetaSized](move (@3)) storage_dead(@3) drop @2 storage_dead(@2) @@ -117,12 +136,13 @@ fn foo() // Full name: test_crate::Foo trait Foo { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type S } // Full name: test_crate::f -fn f() -> Option<@TraitClause3::S>[@TraitClause3::parent_clause0] +fn f() -> Option<@TraitClause3::S>[@TraitClause3::parent_clause1] where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -130,7 +150,7 @@ where [@TraitClause3]: Foo, @TraitClause2::S = @TraitClause3::S, { - let @0: Option<@TraitClause3::S>[@TraitClause3::parent_clause0]; // return + let @0: Option<@TraitClause3::S>[@TraitClause3::parent_clause1]; // return panic(core::panicking::panic) } diff --git a/charon/tests/ui/ptr-offset.out b/charon/tests/ui/ptr-offset.out index 9e9aeed25..2cd6e6716 100644 --- a/charon/tests/ui/ptr-offset.out +++ b/charon/tests/ui/ptr-offset.out @@ -1,15 +1,58 @@ # Final LLBC before serialization: +// Full name: core::fmt::Arguments +#[lang_item("format_arguments")] +pub opaque type Arguments<'a> +where + 'a : 'a, + +// Full name: core::fmt::rt::Count +#[lang_item("format_count")] +pub enum Count { + Is(u16), + Param(usize), + Implied, +} + +// Full name: core::fmt::rt::Placeholder +#[lang_item("format_placeholder")] +pub struct Placeholder { + position: usize, + flags: u32, + precision: Count, + width: Count, +} + +// Full name: core::fmt::rt::Argument +#[lang_item("format_argument")] +pub opaque type Argument<'a> + // Full name: core::intrinsics::cold_path pub fn cold_path() +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + +// Full name: core::option::Option +#[lang_item("Option")] +pub enum Option +where + [@TraitClause0]: Sized, +{ + None, + Some(T), +} -// Full name: core::panicking::panic_nounwind -#[lang_item("panic_nounwind")] -pub fn panic_nounwind(@1: &'static (Str)) -> ! +// Full name: core::panicking::panic_nounwind_fmt +pub fn panic_nounwind_fmt<'_0>(@1: Arguments<'_0>, @2: bool) -> ! // Full name: core::ptr::const_ptr::{*const T}::offset::precondition_check fn precondition_check(@1: *const (), @2: isize, @3: usize) @@ -20,85 +63,95 @@ fn precondition_check(@1: *const (), @2: isize, @3: usize) let size@3: usize; // arg #3 let @4: bool; // anonymous local let @5: !; // anonymous local - let rhs@6: isize; // local - let self@7: usize; // local - let @8: i64; // anonymous local - let b@9: bool; // local - let @10: (i64, bool); // anonymous local + let @6: Arguments<'_>; // anonymous local + let pieces@7: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @8: Array<&'_ (Str), 1 : usize>; // anonymous local + let rhs@9: isize; // local + let self@10: usize; // local let @11: i64; // anonymous local - let @12: i64; // anonymous local - let byte_offset@13: isize; // local - let @14: (); // anonymous local - let @15: usize; // anonymous local - let overflow@16: bool; // local - let @17: bool; // anonymous local - let @18: bool; // anonymous local - let @19: (u64, bool); // anonymous local - let @20: u64; // anonymous local - let @21: u64; // anonymous local + let b@12: bool; // local + let @13: (i64, bool); // anonymous local + let @14: i64; // anonymous local + let @15: i64; // anonymous local + let byte_offset@16: isize; // local + let @17: (); // anonymous local + let @18: usize; // anonymous local + let overflow@19: bool; // local + let @20: bool; // anonymous local + let @21: bool; // anonymous local + let @22: (u64, bool); // anonymous local + let @23: u64; // anonymous local + let @24: u64; // anonymous local + let @25: &'_ (Slice<&'_ (Str)>); // anonymous local + let @26: &'_ (Slice>); // anonymous local + let @27: &'_ (Array, 0 : usize>); // anonymous local + let @28: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@5) - storage_live(self@7) - storage_live(byte_offset@13) - storage_live(@14) - storage_live(@15) + storage_live(pieces@7) + storage_live(self@10) + storage_live(byte_offset@16) storage_live(@17) storage_live(@18) - storage_live(@19) storage_live(@20) storage_live(@21) + storage_live(@22) + storage_live(@23) + storage_live(@24) + storage_live(@27) + storage_live(@28) storage_live(@4) - storage_live(overflow@16) - storage_live(rhs@6) - rhs@6 := cast(copy (size@3)) - storage_live(b@9) - storage_live(@8) - storage_live(@10) + storage_live(overflow@19) + storage_live(rhs@9) + rhs@9 := cast(copy (size@3)) + storage_live(b@12) storage_live(@11) - @11 := cast(copy (count@2)) - storage_live(@12) - @12 := cast(copy (rhs@6)) - @10 := move (@11) checked.* move (@12) - storage_dead(@12) + storage_live(@13) + storage_live(@14) + @14 := cast(copy (count@2)) + storage_live(@15) + @15 := cast(copy (rhs@9)) + @13 := move (@14) checked.* move (@15) + storage_dead(@15) + storage_dead(@14) + @11 := copy ((@13).0) + b@12 := copy ((@13).1) + storage_dead(@13) + byte_offset@16 := cast(copy (@11)) storage_dead(@11) - @8 := copy ((@10).0) - b@9 := copy ((@10).1) - storage_dead(@10) - byte_offset@13 := cast(copy (@8)) - storage_dead(@8) - if copy (b@9) { - @14 := cold_path() - storage_dead(b@9) - storage_dead(rhs@6) - storage_dead(overflow@16) + if copy (b@12) { + @17 := cold_path() + storage_dead(b@12) + storage_dead(rhs@9) + storage_dead(overflow@19) } else { - storage_dead(b@9) - storage_dead(rhs@6) - storage_live(self@7) - self@7 := transmute<*const (), usize>(copy (this@1)) + storage_dead(b@12) + storage_dead(rhs@9) + storage_live(self@10) + self@10 := transmute<*const (), usize>(copy (this@1)) + storage_live(@21) storage_live(@18) - storage_live(@15) - @15 := cast(copy (byte_offset@13)) - storage_live(@19) + @18 := cast(copy (byte_offset@16)) + storage_live(@22) + storage_live(@23) + @23 := cast(copy (self@10)) + storage_live(@24) + @24 := cast(copy (@18)) + @22 := move (@23) checked.+ move (@24) + storage_dead(@24) + storage_dead(@23) + @21 := copy ((@22).1) + storage_dead(@22) + storage_dead(@18) storage_live(@20) - @20 := cast(copy (self@7)) - storage_live(@21) - @21 := cast(copy (@15)) - @19 := move (@20) checked.+ move (@21) - storage_dead(@21) + @20 := copy (byte_offset@16) < const (0 : isize) + overflow@19 := copy (@21) ^ move (@20) storage_dead(@20) - @18 := copy ((@19).1) - storage_dead(@19) - storage_dead(@15) - storage_live(@17) - @17 := copy (byte_offset@13) < const (0 : isize) - overflow@16 := copy (@18) ^ move (@17) - storage_dead(@17) - storage_dead(@18) - storage_dead(self@7) - @4 := ~(copy (overflow@16)) - storage_dead(overflow@16) + storage_dead(@21) + storage_dead(self@10) + @4 := ~(copy (overflow@19)) + storage_dead(overflow@19) if move (@4) { storage_dead(@4) @0 := () @@ -107,7 +160,20 @@ fn precondition_check(@1: *const (), @2: isize, @3: usize) else { } } - @5 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::offset requires the address calculation to not overflow\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@6) + storage_live(@8) + @8 := [const ("unsafe precondition(s) violated: ptr::offset requires the address calculation to not overflow\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@7 := &@8 + storage_live(@25) + @25 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@7)) + storage_live(@26) + @27 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @26 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@27)) + @28 := Option::None { } + @6 := Arguments { 0: move (@25), 1: move (@28), 2: move (@26) } + storage_dead(@26) + storage_dead(@25) + @5 := panic_nounwind_fmt<'_>(move (@6), const (false)) } // Full name: core::ptr::const_ptr::{*const T}::offset diff --git a/charon/tests/ui/quantified-clause.out b/charon/tests/ui/quantified-clause.out index 75baf3ce1..544f64298 100644 --- a/charon/tests/ui/quantified-clause.out +++ b/charon/tests/ui/quantified-clause.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -107,7 +114,8 @@ pub trait TrustedRandomAccessNoCoerce #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = next<'_0_0, Self>[Self] } @@ -146,11 +154,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = into_iter[Self] @@ -183,7 +192,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -199,24 +209,26 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } // Full name: core::iter::traits::iterator::Iterator::next #[lang_item("next")] -pub fn next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -224,12 +236,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -246,9 +269,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -257,14 +281,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -277,7 +302,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -285,9 +311,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -302,7 +329,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -315,12 +342,13 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } @@ -340,7 +368,7 @@ fn foo(@1: F) where [@TraitClause0]: Sized, [@TraitClause1]: for<'a> FnMut, - for<'a> @TraitClause1::parent_clause0::Output = (), + for<'a> @TraitClause1::parent_clause1::Output = (), { let @0: (); // return let _f@1: F; // arg #1 @@ -377,6 +405,9 @@ pub fn f<'a>(@1: &'a (())) -> Option<(&'a (u8))>[Sized<(&'a (u8))>] // Full name: test_crate::Trait pub trait Trait +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::{impl Trait for Result[@TraitClause0, @TraitClause1]} impl Trait for Result[@TraitClause0, @TraitClause1] @@ -385,7 +416,9 @@ where [@TraitClause1]: Sized, [@TraitClause2]: for<'a> IntoIterator<&'a (Result[@TraitClause0, @TraitClause1])>, [@TraitClause3]: for<'a> Copy<@TraitClause2::Item>, -{} +{ + parent_clause0 = MetaSized[@TraitClause0, @TraitClause1]> +} diff --git a/charon/tests/ui/raw-boxes.out b/charon/tests/ui/raw-boxes.out index 9fa00987d..162882b3a 100644 --- a/charon/tests/ui/raw-boxes.out +++ b/charon/tests/ui/raw-boxes.out @@ -80,9 +80,16 @@ pub struct Layout { align: Alignment, } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -94,20 +101,28 @@ where Some(T), } +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::clone::Clone #[lang_item("clone")] pub trait Clone { parent_clause0 : [@TraitClause0]: Sized fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] - fn clone_from<'_0, '_1> = clone_from<'_0_0, '_0_1, Self>[Self] + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = clone_from<'_0_0, '_0_1, Self>[Self, @TraitClause0_0] } // Full name: core::marker::Copy #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::intrinsics::ctpop @@ -133,6 +148,8 @@ pub fn {impl Clone for usize}::clone<'_0>(@1: &'_0 (usize)) -> usize } pub fn core::clone::impls::{impl Clone for usize}::clone_from<'_0, '_1>(@1: &'_0 mut (usize), @2: &'_1 (usize)) +where + [@TraitClause0]: Destruct, { let @0: (); // return let self@1: &'_ mut (usize); // arg #1 @@ -152,12 +169,13 @@ pub fn core::clone::impls::{impl Clone for usize}::clone_from<'_0, '_1>(@1: &'_0 impl Clone for usize { parent_clause0 = Sized fn clone<'_0> = {impl Clone for usize}::clone<'_0_0> - fn clone_from<'_0, '_1> = core::clone::impls::{impl Clone for usize}::clone_from<'_0_0, '_0_1> + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = core::clone::impls::{impl Clone for usize}::clone_from<'_0_0, '_0_1>[@TraitClause0_0] } // Full name: core::marker::{impl Copy for usize} impl Copy for usize { - parent_clause0 = {impl Clone for usize} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for usize} } // Full name: core::fmt::rt::Count @@ -241,30 +259,6 @@ where args: &'a (Slice>), } -// Full name: core::fmt::rt::{Arguments<'a>}::new_const -pub fn new_const<'a, const N : usize>(@1: &'a (Array<&'static (Str), const N : usize>)) -> Arguments<'a> -{ - let @0: Arguments<'_>; // return - let pieces@1: &'_ (Array<&'_ (Str), const N : usize>); // arg #1 - let @2: &'_ (Slice<&'_ (Str)>); // anonymous local - let @3: &'_ (Slice>); // anonymous local - let @4: &'_ (Array, 0 : usize>); // anonymous local - let @5: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local - - storage_live(@4) - storage_live(@5) - storage_live(@2) - @2 := @ArrayToSliceShared<'_, &'_ (Str), const N : usize>(copy (pieces@1)) - storage_live(@3) - @4 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, const N : usize> - @3 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@4)) - @5 := Option::None { } - @0 := Arguments { pieces: move (@2), fmt: move (@5), args: move (@3) } - storage_dead(@3) - storage_dead(@2) - return -} - // Full name: core::panicking::panic_nounwind_fmt::compiletime fn compiletime<'_0>(@1: Arguments<'_0>, @2: bool) -> ! { @@ -296,54 +290,52 @@ pub fn panic_nounwind_fmt<'_0>(@1: Arguments<'_0>, @2: bool) -> ! @0 := compiletime<'_>(move ((@3).0), move ((@3).1)) } -// Full name: core::panicking::panic_nounwind -#[lang_item("panic_nounwind")] -pub fn panic_nounwind(@1: &'static (Str)) -> ! -{ - let @0: !; // return - let expr@1: &'_ (Str); // arg #1 - let @2: !; // anonymous local - let @3: Arguments<'_>; // anonymous local - let @4: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @5: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @6: Array<&'_ (Str), 1 : usize>; // anonymous local - let @7: &'_ (Str); // anonymous local - - storage_live(@2) - storage_live(@3) - storage_live(@4) - storage_live(@5) - storage_live(@6) - storage_live(@7) - @7 := copy (expr@1) - @6 := [move (@7)] - storage_dead(@7) - @5 := &@6 - @4 := &*(@5) - @3 := new_const<'_, 1 : usize>(move (@4)) - storage_dead(@4) - @2 := panic_nounwind_fmt<'_>(move (@3), const (false)) -} - fn core::ptr::alignment::{Alignment}::new_unchecked::precondition_check(@1: usize) { let @0: (); // return let align@1: usize; // arg #1 let @2: !; // anonymous local - let @3: u32; // anonymous local + let @3: Arguments<'_>; // anonymous local + let pieces@4: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @5: Array<&'_ (Str), 1 : usize>; // anonymous local + let @6: u32; // anonymous local + let @7: &'_ (Slice<&'_ (Str)>); // anonymous local + let @8: &'_ (Slice>); // anonymous local + let @9: &'_ (Array, 0 : usize>); // anonymous local + let @10: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@2) storage_live(@3) - @3 := ctpop[Sized, {impl Copy for usize}](move (align@1)) - switch move (@3) { + storage_live(pieces@4) + storage_live(@5) + storage_live(@7) + storage_live(@8) + storage_live(@9) + storage_live(@10) + storage_live(@6) + @6 := ctpop[Sized, {impl Copy for usize}](move (align@1)) + switch move (@6) { 1 : u32 => { }, _ => { - storage_dead(@3) - @2 := panic_nounwind(const ("unsafe precondition(s) violated: Alignment::new_unchecked requires a power of two\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_dead(@6) + storage_live(@3) + storage_live(@5) + @5 := [const ("unsafe precondition(s) violated: Alignment::new_unchecked requires a power of two\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@4 := &@5 + storage_live(@7) + @7 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@4)) + storage_live(@8) + @9 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @8 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@9)) + @10 := Option::None { } + @3 := Arguments { pieces: move (@7), fmt: move (@10), args: move (@8) } + storage_dead(@8) + storage_dead(@7) + @2 := panic_nounwind_fmt<'_>(move (@3), const (false)) }, } - storage_dead(@3) + storage_dead(@6) @0 := () return } @@ -679,64 +671,13 @@ fn is_size_align_valid(@1: usize, @2: usize) -> bool return } -fn core::alloc::layout::{Layout}::from_size_align_unchecked::precondition_check(@1: usize, @2: usize) -{ - let @0: (); // return - let size@1: usize; // arg #1 - let align@2: usize; // arg #2 - let @3: bool; // anonymous local - let @4: !; // anonymous local - - storage_live(@4) - storage_live(@3) - @3 := is_size_align_valid(move (size@1), move (align@2)) - if move (@3) { - } - else { - @4 := panic_nounwind(const ("unsafe precondition(s) violated: Layout::from_size_align_unchecked requires that align is a power of 2 and the rounded-up allocation size does not exceed isize::MAX\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) - } - storage_dead(@3) - @0 := () - return -} - -pub fn core::alloc::layout::{Layout}::new() -> Layout -where - [@TraitClause0]: Sized, -{ - let @0: Layout; // return - let size@1: usize; // local - let align@2: usize; // local - let @3: bool; // anonymous local - let @4: (); // anonymous local - let @5: Alignment; // anonymous local - - storage_live(size@1) - storage_live(align@2) - storage_live(@4) - size@1 := size_of - align@2 := align_of - storage_live(@3) - @3 := ub_checks - if move (@3) { - @4 := core::alloc::layout::{Layout}::from_size_align_unchecked::precondition_check(copy (size@1), copy (align@2)) - } - else { - } - storage_dead(@3) - storage_live(@5) - @5 := transmute(copy (align@2)) - @0 := Layout { size: copy (size@1), align: move (@5) } - storage_dead(@5) - return -} - // Full name: core::alloc::AllocError pub struct AllocError {} // Full name: core::alloc::Allocator pub trait Allocator { + parent_clause0 : [@TraitClause0]: MetaSized fn allocate<'_0> = core::alloc::Allocator::allocate<'_0_0, Self>[Self] fn allocate_zeroed<'_0> = core::alloc::Allocator::allocate_zeroed<'_0_0, Self>[Self] fn deallocate<'_0> = core::alloc::Allocator::deallocate<'_0_0, Self>[Self] @@ -773,71 +714,81 @@ fn core::ptr::write_bytes::precondition_check(@1: *const (), @2: usize, @3: bool let zero_size@3: bool; // arg #3 let @4: bool; // anonymous local let @5: !; // anonymous local - let @6: bool; // anonymous local - let @7: Arguments<'_>; // anonymous local - let @8: usize; // anonymous local - let @9: usize; // anonymous local - let @10: usize; // anonymous local - let @11: u32; // anonymous local - let @12: &'_ (Slice<&'_ (Str)>); // anonymous local - let @13: &'_ (Slice>); // anonymous local - let @14: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @15: &'_ (Array, 0 : usize>); // anonymous local - let @16: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + let @6: Arguments<'_>; // anonymous local + let pieces@7: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @8: Array<&'_ (Str), 1 : usize>; // anonymous local + let @9: bool; // anonymous local + let @10: Arguments<'_>; // anonymous local + let @11: usize; // anonymous local + let @12: usize; // anonymous local + let @13: usize; // anonymous local + let @14: u32; // anonymous local + let @15: &'_ (Slice<&'_ (Str)>); // anonymous local + let @16: &'_ (Slice>); // anonymous local + let @17: &'_ (Slice<&'_ (Str)>); // anonymous local + let @18: &'_ (Slice>); // anonymous local + let @19: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local + let @20: &'_ (Array, 0 : usize>); // anonymous local + let @21: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + let @22: &'_ (Array, 0 : usize>); // anonymous local + let @23: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@5) - storage_live(@6) - storage_live(@7) - storage_live(@12) - storage_live(@13) - storage_live(@14) + storage_live(pieces@7) + storage_live(@9) + storage_live(@10) storage_live(@15) storage_live(@16) + storage_live(@19) + storage_live(@20) + storage_live(@21) + storage_live(@22) + storage_live(@23) storage_live(@4) - storage_live(@9) - storage_live(@11) - @11 := ctpop[Sized, {impl Copy for usize}](copy (align@2)) - switch move (@11) { + storage_live(@12) + storage_live(@14) + @14 := ctpop[Sized, {impl Copy for usize}](copy (align@2)) + switch move (@14) { 1 : u32 => { }, _ => { - storage_dead(@11) - storage_live(@7) - storage_live(@12) - @14 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> - @12 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@14)) - storage_live(@13) - @15 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> - @13 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@15)) - @16 := Option::None { } - @7 := Arguments { pieces: move (@12), fmt: move (@16), args: move (@13) } - storage_dead(@13) - storage_dead(@12) + storage_dead(@14) + storage_live(@10) + storage_live(@15) + @19 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> + @15 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@19)) + storage_live(@16) + @20 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @16 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@20)) + @21 := Option::None { } + @10 := Arguments { pieces: move (@15), fmt: move (@21), args: move (@16) } + storage_dead(@16) + storage_dead(@15) panic(core::panicking::panic_fmt) }, } - storage_dead(@11) - storage_live(@8) - @9 := transmute<*const (), usize>(copy (addr@1)) - storage_live(@10) - @10 := copy (align@2) wrapping.- const (1 : usize) - @8 := copy (@9) & move (@10) - storage_dead(@10) - switch move (@8) { + storage_dead(@14) + storage_live(@11) + @12 := transmute<*const (), usize>(copy (addr@1)) + storage_live(@13) + @13 := copy (align@2) wrapping.- const (1 : usize) + @11 := copy (@12) & move (@13) + storage_dead(@13) + switch move (@11) { 0 : usize => { - storage_dead(@8) + storage_dead(@11) if copy (zero_size@3) { - storage_dead(@9) + storage_dead(@12) storage_dead(@4) @0 := () return } else { - storage_live(@6) - @6 := copy (@9) == const (0 : usize) - @4 := ~(move (@6)) - storage_dead(@6) + storage_live(@9) + @9 := copy (@12) == const (0 : usize) + @4 := ~(move (@9)) storage_dead(@9) + storage_dead(@12) if move (@4) { storage_dead(@4) @0 := () @@ -848,11 +799,24 @@ fn core::ptr::write_bytes::precondition_check(@1: *const (), @2: usize, @3: bool } }, _ => { - storage_dead(@8) - storage_dead(@9) + storage_dead(@11) + storage_dead(@12) }, } - @5 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::write_bytes requires that the destination pointer is aligned and non-null\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@6) + storage_live(@8) + @8 := [const ("unsafe precondition(s) violated: ptr::write_bytes requires that the destination pointer is aligned and non-null\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@7 := &@8 + storage_live(@17) + @17 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@7)) + storage_live(@18) + @22 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @18 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@22)) + @23 := Option::None { } + @6 := Arguments { pieces: move (@17), fmt: move (@23), args: move (@18) } + storage_dead(@18) + storage_dead(@17) + @5 := panic_nounwind_fmt<'_>(move (@6), const (false)) } // Full name: core::intrinsics::write_bytes @@ -972,6 +936,59 @@ pub fn cold_path() return } +// Full name: core::fmt::rt::{Arguments<'a>}::new_const +pub fn new_const<'a, const N : usize>(@1: &'a (Array<&'static (Str), const N : usize>)) -> Arguments<'a> +{ + let @0: Arguments<'_>; // return + let pieces@1: &'_ (Array<&'_ (Str), const N : usize>); // arg #1 + let @2: &'_ (Slice<&'_ (Str)>); // anonymous local + let @3: &'_ (Slice>); // anonymous local + let @4: &'_ (Array, 0 : usize>); // anonymous local + let @5: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + + storage_live(@4) + storage_live(@5) + storage_live(@2) + @2 := @ArrayToSliceShared<'_, &'_ (Str), const N : usize>(copy (pieces@1)) + storage_live(@3) + @4 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, const N : usize> + @3 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@4)) + @5 := Option::None { } + @0 := Arguments { pieces: move (@2), fmt: move (@5), args: move (@3) } + storage_dead(@3) + storage_dead(@2) + return +} + +// Full name: core::panicking::panic_nounwind +#[lang_item("panic_nounwind")] +pub fn panic_nounwind(@1: &'static (Str)) -> ! +{ + let @0: !; // return + let expr@1: &'_ (Str); // arg #1 + let @2: !; // anonymous local + let @3: Arguments<'_>; // anonymous local + let @4: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local + let @5: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local + let @6: Array<&'_ (Str), 1 : usize>; // anonymous local + let @7: &'_ (Str); // anonymous local + + storage_live(@2) + storage_live(@3) + storage_live(@4) + storage_live(@5) + storage_live(@6) + storage_live(@7) + @7 := copy (expr@1) + @6 := [move (@7)] + storage_dead(@7) + @5 := &@6 + @4 := &*(@5) + @3 := new_const<'_, 1 : usize>(move (@4)) + storage_dead(@4) + @2 := panic_nounwind_fmt<'_>(move (@3), const (false)) +} + // Full name: core::ub_checks::maybe_is_nonoverlapping::runtime fn runtime(@1: *const (), @2: *const (), @3: usize, @4: usize) -> bool { @@ -1084,40 +1101,45 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () let ptr@12: *const (); // local let is_zst@13: bool; // local let @14: !; // anonymous local - let @15: bool; // anonymous local - let @16: Arguments<'_>; // anonymous local - let @17: usize; // anonymous local - let @18: usize; // anonymous local - let @19: usize; // anonymous local - let @20: u32; // anonymous local - let @21: &'_ (Slice<&'_ (Str)>); // anonymous local - let @22: &'_ (Slice>); // anonymous local - let @23: bool; // anonymous local - let @24: Arguments<'_>; // anonymous local - let @25: usize; // anonymous local - let @26: usize; // anonymous local - let @27: u32; // anonymous local - let @28: &'_ (Slice<&'_ (Str)>); // anonymous local - let @29: &'_ (Slice>); // anonymous local - let @30: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @31: Array<&'_ (Str), 1 : usize>; // anonymous local - let @32: &'_ (Array, 0 : usize>); // anonymous local - let @33: Array, 0 : usize>; // anonymous local - let @34: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + let @15: Arguments<'_>; // anonymous local + let pieces@16: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @17: Array<&'_ (Str), 1 : usize>; // anonymous local + let @18: bool; // anonymous local + let @19: Arguments<'_>; // anonymous local + let @20: usize; // anonymous local + let @21: usize; // anonymous local + let @22: usize; // anonymous local + let @23: u32; // anonymous local + let @24: &'_ (Slice<&'_ (Str)>); // anonymous local + let @25: &'_ (Slice>); // anonymous local + let @26: bool; // anonymous local + let @27: Arguments<'_>; // anonymous local + let @28: usize; // anonymous local + let @29: usize; // anonymous local + let @30: u32; // anonymous local + let @31: &'_ (Slice<&'_ (Str)>); // anonymous local + let @32: &'_ (Slice>); // anonymous local + let @33: &'_ (Slice<&'_ (Str)>); // anonymous local + let @34: &'_ (Slice>); // anonymous local let @35: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @36: &'_ (Array, 0 : usize>); // anonymous local - let @37: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + let @36: Array<&'_ (Str), 1 : usize>; // anonymous local + let @37: &'_ (Array, 0 : usize>); // anonymous local + let @38: Array, 0 : usize>; // anonymous local + let @39: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + let @40: &'_ (Array, 0 : usize>); // anonymous local + let @41: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local + let @42: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local + let @43: &'_ (Array, 0 : usize>); // anonymous local + let @44: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@11) storage_live(ptr@12) storage_live(is_zst@13) storage_live(@14) - storage_live(@15) - storage_live(@16) + storage_live(pieces@16) + storage_live(@18) storage_live(@19) - storage_live(@21) storage_live(@22) - storage_live(@23) storage_live(@24) storage_live(@25) storage_live(@26) @@ -1127,11 +1149,16 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () storage_live(@30) storage_live(@31) storage_live(@32) - storage_live(@33) - storage_live(@34) storage_live(@35) storage_live(@36) storage_live(@37) + storage_live(@38) + storage_live(@39) + storage_live(@40) + storage_live(@41) + storage_live(@42) + storage_live(@43) + storage_live(@44) storage_live(@6) storage_live(zero_size@7) switch copy (count@5) { @@ -1144,77 +1171,77 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () align@9 := copy (align@4) storage_live(is_zst@10) is_zst@10 := copy (zero_size@7) - storage_live(@18) - storage_live(@20) - @20 := ctpop[Sized, {impl Copy for usize}](copy (align@4)) - switch move (@20) { + storage_live(@21) + storage_live(@23) + @23 := ctpop[Sized, {impl Copy for usize}](copy (align@4)) + switch move (@23) { 1 : u32 => { }, _ => { - @31 := [const ("is_aligned_to: align is not a power-of-two")] - @30 := &@31 - @33 := [] - @32 := &@33 - storage_dead(@20) - storage_live(@16) - storage_live(@21) - @21 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@30)) - storage_live(@22) - @22 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@32)) - @34 := Option::None { } - @16 := Arguments { pieces: move (@21), fmt: move (@34), args: move (@22) } - storage_dead(@22) - storage_dead(@21) + @36 := [const ("is_aligned_to: align is not a power-of-two")] + @35 := &@36 + @38 := [] + @37 := &@38 + storage_dead(@23) + storage_live(@19) + storage_live(@24) + @24 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@35)) + storage_live(@25) + @25 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@37)) + @39 := Option::None { } + @19 := Arguments { pieces: move (@24), fmt: move (@39), args: move (@25) } + storage_dead(@25) + storage_dead(@24) panic(core::panicking::panic_fmt) }, } - storage_dead(@20) - storage_live(@17) - @18 := transmute<*const (), usize>(copy (src@1)) - @19 := copy (align@4) wrapping.- const (1 : usize) - @17 := copy (@18) & copy (@19) - switch move (@17) { + storage_dead(@23) + storage_live(@20) + @21 := transmute<*const (), usize>(copy (src@1)) + @22 := copy (align@4) wrapping.- const (1 : usize) + @20 := copy (@21) & copy (@22) + switch move (@20) { 0 : usize => { - storage_dead(@17) + storage_dead(@20) if copy (is_zst@10) { - storage_dead(@18) + storage_dead(@21) storage_dead(is_zst@10) storage_dead(align@9) storage_live(@11) ptr@12 := cast<*mut (), *const ()>(copy (dst@2)) storage_live(is_zst@13) is_zst@13 := copy (zero_size@7) - storage_live(@26) - storage_live(@27) - @27 := ctpop[Sized, {impl Copy for usize}](move (align@4)) - switch move (@27) { + storage_live(@29) + storage_live(@30) + @30 := ctpop[Sized, {impl Copy for usize}](move (align@4)) + switch move (@30) { 1 : u32 => { }, _ => { - storage_dead(@27) - storage_live(@24) - storage_live(@28) - @35 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> - @28 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@35)) - storage_live(@29) - @36 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> - @29 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@36)) - @37 := Option::None { } - @24 := Arguments { pieces: move (@28), fmt: move (@37), args: move (@29) } - storage_dead(@29) - storage_dead(@28) + storage_dead(@30) + storage_live(@27) + storage_live(@31) + @42 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> + @31 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@42)) + storage_live(@32) + @43 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @32 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@43)) + @44 := Option::None { } + @27 := Arguments { pieces: move (@31), fmt: move (@44), args: move (@32) } + storage_dead(@32) + storage_dead(@31) panic(core::panicking::panic_fmt) }, } - storage_dead(@27) - storage_live(@25) - @26 := transmute<*mut (), usize>(copy (dst@2)) - @25 := copy (@26) & copy (@19) - switch move (@25) { + storage_dead(@30) + storage_live(@28) + @29 := transmute<*mut (), usize>(copy (dst@2)) + @28 := copy (@29) & copy (@22) + switch move (@28) { 0 : usize => { - storage_dead(@25) + storage_dead(@28) if copy (is_zst@13) { - storage_dead(@26) + storage_dead(@29) storage_dead(is_zst@13) @6 := runtime(move (src@1), move (ptr@12), move (size@3), move (count@5)) storage_dead(@11) @@ -1226,15 +1253,28 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () return } else { - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } else { - storage_live(@23) - @23 := copy (@26) == const (0 : usize) - @11 := ~(move (@23)) - storage_dead(@23) + storage_live(@26) + @26 := copy (@29) == const (0 : usize) + @11 := ~(move (@26)) storage_dead(@26) + storage_dead(@29) if move (@11) { storage_dead(is_zst@13) @6 := runtime(move (src@1), move (ptr@12), move (size@3), move (count@5)) @@ -1247,7 +1287,20 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () return } else { - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } else { @@ -1255,27 +1308,53 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () storage_dead(@11) storage_dead(@8) storage_dead(zero_size@7) - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } }, _ => { - storage_dead(@25) - storage_dead(@26) + storage_dead(@28) + storage_dead(@29) storage_dead(is_zst@13) storage_dead(@11) storage_dead(@8) storage_dead(zero_size@7) - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) }, } } else { - storage_live(@15) - @15 := copy (@18) == const (0 : usize) - @8 := ~(move (@15)) - storage_dead(@15) + storage_live(@18) + @18 := copy (@21) == const (0 : usize) + @8 := ~(move (@18)) storage_dead(@18) + storage_dead(@21) if move (@8) { storage_dead(is_zst@10) storage_dead(align@9) @@ -1283,37 +1362,37 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () ptr@12 := cast<*mut (), *const ()>(copy (dst@2)) storage_live(is_zst@13) is_zst@13 := copy (zero_size@7) - storage_live(@26) - storage_live(@27) - @27 := ctpop[Sized, {impl Copy for usize}](move (align@4)) - switch move (@27) { + storage_live(@29) + storage_live(@30) + @30 := ctpop[Sized, {impl Copy for usize}](move (align@4)) + switch move (@30) { 1 : u32 => { }, _ => { - storage_dead(@27) - storage_live(@24) - storage_live(@28) - @35 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> - @28 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@35)) - storage_live(@29) - @36 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> - @29 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@36)) - @37 := Option::None { } - @24 := Arguments { pieces: move (@28), fmt: move (@37), args: move (@29) } - storage_dead(@29) - storage_dead(@28) + storage_dead(@30) + storage_live(@27) + storage_live(@31) + @42 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> + @31 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@42)) + storage_live(@32) + @43 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @32 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@43)) + @44 := Option::None { } + @27 := Arguments { pieces: move (@31), fmt: move (@44), args: move (@32) } + storage_dead(@32) + storage_dead(@31) panic(core::panicking::panic_fmt) }, } - storage_dead(@27) - storage_live(@25) - @26 := transmute<*mut (), usize>(copy (dst@2)) - @25 := copy (@26) & copy (@19) - switch move (@25) { + storage_dead(@30) + storage_live(@28) + @29 := transmute<*mut (), usize>(copy (dst@2)) + @28 := copy (@29) & copy (@22) + switch move (@28) { 0 : usize => { - storage_dead(@25) + storage_dead(@28) if copy (is_zst@13) { - storage_dead(@26) + storage_dead(@29) storage_dead(is_zst@13) @6 := runtime(move (src@1), move (ptr@12), move (size@3), move (count@5)) storage_dead(@11) @@ -1325,15 +1404,28 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () return } else { - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } else { - storage_live(@23) - @23 := copy (@26) == const (0 : usize) - @11 := ~(move (@23)) - storage_dead(@23) + storage_live(@26) + @26 := copy (@29) == const (0 : usize) + @11 := ~(move (@26)) storage_dead(@26) + storage_dead(@29) if move (@11) { storage_dead(is_zst@13) @6 := runtime(move (src@1), move (ptr@12), move (size@3), move (count@5)) @@ -1346,7 +1438,20 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () return } else { - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } else { @@ -1354,18 +1459,44 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () storage_dead(@11) storage_dead(@8) storage_dead(zero_size@7) - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } }, _ => { - storage_dead(@25) - storage_dead(@26) + storage_dead(@28) + storage_dead(@29) storage_dead(is_zst@13) storage_dead(@11) storage_dead(@8) storage_dead(zero_size@7) - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) }, } } @@ -1375,19 +1506,45 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () storage_dead(@11) storage_dead(@8) storage_dead(zero_size@7) - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } } }, _ => { - storage_dead(@17) - storage_dead(@18) + storage_dead(@20) + storage_dead(@21) storage_dead(is_zst@10) storage_dead(align@9) storage_dead(@11) storage_dead(@8) storage_dead(zero_size@7) - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) }, } }, @@ -1398,76 +1555,76 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () align@9 := copy (align@4) storage_live(is_zst@10) is_zst@10 := copy (zero_size@7) - storage_live(@18) - storage_live(@20) - @20 := ctpop[Sized, {impl Copy for usize}](copy (align@4)) - switch move (@20) { + storage_live(@21) + storage_live(@23) + @23 := ctpop[Sized, {impl Copy for usize}](copy (align@4)) + switch move (@23) { 1 : u32 => { }, _ => { - @31 := [const ("is_aligned_to: align is not a power-of-two")] - @30 := &@31 - @33 := [] - @32 := &@33 - storage_dead(@20) - storage_live(@16) - storage_live(@21) - @21 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@30)) - storage_live(@22) - @22 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@32)) - @34 := Option::None { } - @16 := Arguments { pieces: move (@21), fmt: move (@34), args: move (@22) } - storage_dead(@22) - storage_dead(@21) + @36 := [const ("is_aligned_to: align is not a power-of-two")] + @35 := &@36 + @38 := [] + @37 := &@38 + storage_dead(@23) + storage_live(@19) + storage_live(@24) + @24 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@35)) + storage_live(@25) + @25 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@37)) + @39 := Option::None { } + @19 := Arguments { pieces: move (@24), fmt: move (@39), args: move (@25) } + storage_dead(@25) + storage_dead(@24) panic(core::panicking::panic_fmt) }, } - storage_dead(@20) - storage_live(@17) - @18 := transmute<*const (), usize>(copy (src@1)) - @19 := copy (align@4) wrapping.- const (1 : usize) - @17 := copy (@18) & copy (@19) - switch move (@17) { + storage_dead(@23) + storage_live(@20) + @21 := transmute<*const (), usize>(copy (src@1)) + @22 := copy (align@4) wrapping.- const (1 : usize) + @20 := copy (@21) & copy (@22) + switch move (@20) { 0 : usize => { - storage_dead(@17) - storage_dead(@18) + storage_dead(@20) + storage_dead(@21) storage_dead(is_zst@10) storage_dead(align@9) storage_live(@11) ptr@12 := cast<*mut (), *const ()>(copy (dst@2)) storage_live(is_zst@13) is_zst@13 := copy (zero_size@7) - storage_live(@26) - storage_live(@27) - @27 := ctpop[Sized, {impl Copy for usize}](move (align@4)) - switch move (@27) { + storage_live(@29) + storage_live(@30) + @30 := ctpop[Sized, {impl Copy for usize}](move (align@4)) + switch move (@30) { 1 : u32 => { }, _ => { - storage_dead(@27) - storage_live(@24) - storage_live(@28) - @35 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> - @28 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@35)) - storage_live(@29) - @36 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> - @29 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@36)) - @37 := Option::None { } - @24 := Arguments { pieces: move (@28), fmt: move (@37), args: move (@29) } - storage_dead(@29) - storage_dead(@28) + storage_dead(@30) + storage_live(@27) + storage_live(@31) + @42 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> + @31 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@42)) + storage_live(@32) + @43 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @32 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@43)) + @44 := Option::None { } + @27 := Arguments { pieces: move (@31), fmt: move (@44), args: move (@32) } + storage_dead(@32) + storage_dead(@31) panic(core::panicking::panic_fmt) }, } - storage_dead(@27) - storage_live(@25) - @26 := transmute<*mut (), usize>(copy (dst@2)) - @25 := copy (@26) & copy (@19) - switch move (@25) { + storage_dead(@30) + storage_live(@28) + @29 := transmute<*mut (), usize>(copy (dst@2)) + @28 := copy (@29) & copy (@22) + switch move (@28) { 0 : usize => { - storage_dead(@25) + storage_dead(@28) if copy (is_zst@13) { - storage_dead(@26) + storage_dead(@29) storage_dead(is_zst@13) @6 := runtime(move (src@1), move (ptr@12), move (size@3), move (count@5)) storage_dead(@11) @@ -1482,11 +1639,11 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () } } else { - storage_live(@23) - @23 := copy (@26) == const (0 : usize) - @11 := ~(move (@23)) - storage_dead(@23) + storage_live(@26) + @26 := copy (@29) == const (0 : usize) + @11 := ~(move (@26)) storage_dead(@26) + storage_dead(@29) if move (@11) { storage_dead(is_zst@13) @6 := runtime(move (src@1), move (ptr@12), move (size@3), move (count@5)) @@ -1510,8 +1667,8 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () } }, _ => { - storage_dead(@25) - storage_dead(@26) + storage_dead(@28) + storage_dead(@29) storage_dead(is_zst@13) storage_dead(@11) storage_dead(@8) @@ -1520,8 +1677,8 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () } }, _ => { - storage_dead(@17) - storage_dead(@18) + storage_dead(@20) + storage_dead(@21) storage_dead(is_zst@10) storage_dead(align@9) storage_dead(@11) @@ -1529,7 +1686,20 @@ fn core::ptr::copy_nonoverlapping::precondition_check(@1: *const (), @2: *mut () storage_dead(zero_size@7) }, } - @14 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@15) + storage_live(@17) + @17 := [const ("unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@16 := &@17 + storage_live(@33) + @33 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@16)) + storage_live(@34) + @40 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @34 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@40)) + @41 := Option::None { } + @15 := Arguments { pieces: move (@33), fmt: move (@41), args: move (@34) } + storage_dead(@34) + storage_dead(@33) + @14 := panic_nounwind_fmt<'_>(move (@15), const (false)) } pub unsafe fn core::alloc::Allocator::grow<'_0, Self>(@1: &'_0 (Self), @2: NonNull, @3: Layout, @4: Layout) -> Result>, AllocError>[Sized>>, Sized] @@ -1836,6 +2006,7 @@ where pub fn clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) where [@TraitClause0]: Clone, + [@TraitClause1]: Destruct, { let @0: (); // return let self@1: &'_ mut (Self); // arg #1 @@ -1851,157 +2022,6 @@ where return } -// Full name: core::intrinsics::volatile_load -pub unsafe fn volatile_load(@1: *const T) -> T -where - [@TraitClause0]: Sized, -{ - let @0: T; // return - let src@1: *const T; // arg #1 - - undefined_behavior -} - -// Full name: core::mem::size_of -#[lang_item("mem_size_of")] -pub fn size_of() -> usize -where - [@TraitClause0]: Sized, -{ - let @0: usize; // return - - @0 := size_of - return -} - -// Full name: core::mem::SizedTypeProperties -pub trait SizedTypeProperties -{ - parent_clause0 : [@TraitClause0]: Sized - const IS_ZST : bool - const LAYOUT : Layout - const MAX_SLICE_LEN : usize -} - -pub fn core::mem::SizedTypeProperties::IS_ZST() -> bool -where - [@TraitClause0]: SizedTypeProperties, -{ - let @0: bool; // return - let @1: usize; // anonymous local - - storage_live(@1) - @1 := size_of[@TraitClause0::parent_clause0]() - @0 := move (@1) == const (0 : usize) - storage_dead(@1) - return -} - -pub const core::mem::SizedTypeProperties::IS_ZST: bool -where - [@TraitClause0]: SizedTypeProperties, - = core::mem::SizedTypeProperties::IS_ZST() - -pub fn core::mem::SizedTypeProperties::LAYOUT() -> Layout -where - [@TraitClause0]: SizedTypeProperties, -{ - let @0: Layout; // return - - @0 := core::alloc::layout::{Layout}::new[@TraitClause0::parent_clause0]() - return -} - -pub const core::mem::SizedTypeProperties::LAYOUT: Layout -where - [@TraitClause0]: SizedTypeProperties, - = core::mem::SizedTypeProperties::LAYOUT() - -pub fn core::num::{usize}::MAX() -> usize -{ - let @0: usize; // return - - @0 := ~(const (0 : usize)) - return -} - -pub const core::num::{usize}::MAX: usize = core::num::{usize}::MAX() - -pub fn core::num::{isize}::MAX() -> isize -{ - let @0: isize; // return - let @1: usize; // anonymous local - let @2: usize; // anonymous local - - storage_live(@2) - storage_live(@1) - @2 := core::num::{usize}::MAX - @1 := move (@2) >> const (1 : i32) - @0 := cast(move (@1)) - storage_dead(@1) - return -} - -pub const core::num::{isize}::MAX: isize = core::num::{isize}::MAX() - -pub fn core::mem::SizedTypeProperties::MAX_SLICE_LEN() -> usize -where - [@TraitClause0]: SizedTypeProperties, -{ - let @0: usize; // return - let @1: usize; // anonymous local - let n@2: usize; // local - let @3: usize; // anonymous local - let @4: usize; // anonymous local - let @5: usize; // anonymous local - let @6: isize; // anonymous local - - storage_live(n@2) - storage_live(@3) - storage_live(@4) - storage_live(@5) - storage_live(@6) - storage_live(@1) - @1 := size_of[@TraitClause0::parent_clause0]() - switch copy (@1) { - 0 : usize => { - @5 := core::num::{usize}::MAX - @0 := move (@5) - }, - _ => { - storage_live(n@2) - n@2 := copy (@1) - storage_live(@3) - @6 := core::num::{isize}::MAX - @3 := cast(move (@6)) - storage_live(@4) - @4 := copy (n@2) - @0 := move (@3) / move (@4) - storage_dead(@4) - storage_dead(@3) - storage_dead(n@2) - }, - } - storage_dead(@1) - return -} - -pub const core::mem::SizedTypeProperties::MAX_SLICE_LEN: usize -where - [@TraitClause0]: SizedTypeProperties, - = core::mem::SizedTypeProperties::MAX_SLICE_LEN() - -// Full name: core::mem::{impl SizedTypeProperties for T} -impl SizedTypeProperties for T -where - [@TraitClause0]: Sized, -{ - parent_clause0 = @TraitClause0 - const IS_ZST = core::mem::SizedTypeProperties::IS_ZST[{impl SizedTypeProperties for T}[@TraitClause0]] - const LAYOUT = core::mem::SizedTypeProperties::LAYOUT[{impl SizedTypeProperties for T}[@TraitClause0]] - const MAX_SLICE_LEN = core::mem::SizedTypeProperties::MAX_SLICE_LEN[{impl SizedTypeProperties for T}[@TraitClause0]] -} - // Full name: core::num::niche_types::NonZeroUsizeInner pub struct NonZeroUsizeInner { usize, @@ -2018,6 +2038,8 @@ pub fn {impl Clone for NonZeroUsizeInner}::clone<'_0>(@1: &'_0 (NonZeroUsizeInne } pub fn core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_0, '_1>(@1: &'_0 mut (NonZeroUsizeInner), @2: &'_1 (NonZeroUsizeInner)) +where + [@TraitClause0]: Destruct, { let @0: (); // return let self@1: &'_ mut (NonZeroUsizeInner); // arg #1 @@ -2037,16 +2059,20 @@ pub fn core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_ impl Clone for NonZeroUsizeInner { parent_clause0 = Sized fn clone<'_0> = {impl Clone for NonZeroUsizeInner}::clone<'_0_0> - fn clone_from<'_0, '_1> = core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_0_0, '_0_1> + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = core::num::niche_types::{impl Clone for NonZeroUsizeInner}::clone_from<'_0_0, '_0_1>[@TraitClause0_0] } // Full name: core::num::niche_types::{impl Copy for NonZeroUsizeInner} impl Copy for NonZeroUsizeInner { - parent_clause0 = {impl Clone for NonZeroUsizeInner} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for NonZeroUsizeInner} } // Full name: core::num::nonzero::private::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::num::nonzero::ZeroablePrimitive pub trait ZeroablePrimitive @@ -2060,7 +2086,9 @@ pub trait ZeroablePrimitive } // Full name: core::num::nonzero::{impl Sealed for usize} -impl Sealed for usize {} +impl Sealed for usize { + parent_clause0 = MetaSized +} // Full name: core::num::nonzero::{impl ZeroablePrimitive for usize} impl ZeroablePrimitive for usize { @@ -2094,112 +2122,45 @@ fn core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(@1: *mut let @0: (); // return let ptr@1: *mut (); // arg #1 let @2: !; // anonymous local - let @3: usize; // anonymous local + let @3: Arguments<'_>; // anonymous local + let pieces@4: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @5: Array<&'_ (Str), 1 : usize>; // anonymous local + let @6: usize; // anonymous local + let @7: &'_ (Slice<&'_ (Str)>); // anonymous local + let @8: &'_ (Slice>); // anonymous local + let @9: &'_ (Array, 0 : usize>); // anonymous local + let @10: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@2) - storage_live(@3) - @3 := transmute<*mut (), usize>(copy (ptr@1)) - switch move (@3) { + storage_live(pieces@4) + storage_live(@9) + storage_live(@10) + storage_live(@6) + @6 := transmute<*mut (), usize>(copy (ptr@1)) + switch move (@6) { 0 : usize => { }, _ => { - storage_dead(@3) + storage_dead(@6) @0 := () return }, } - storage_dead(@3) - @2 := panic_nounwind(const ("unsafe precondition(s) violated: NonNull::new_unchecked requires that the pointer is non-null\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) -} - -fn core::ptr::read_volatile::precondition_check(@1: *const (), @2: usize, @3: bool) -{ - let @0: (); // return - let addr@1: *const (); // arg #1 - let align@2: usize; // arg #2 - let is_zst@3: bool; // arg #3 - let @4: bool; // anonymous local - let @5: !; // anonymous local - let @6: bool; // anonymous local - let @7: Arguments<'_>; // anonymous local - let @8: usize; // anonymous local - let @9: usize; // anonymous local - let @10: usize; // anonymous local - let @11: u32; // anonymous local - let @12: &'_ (Slice<&'_ (Str)>); // anonymous local - let @13: &'_ (Slice>); // anonymous local - let @14: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @15: &'_ (Array, 0 : usize>); // anonymous local - let @16: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local - + storage_dead(@6) + storage_live(@3) storage_live(@5) - storage_live(@6) + @5 := [const ("unsafe precondition(s) violated: NonNull::new_unchecked requires that the pointer is non-null\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@4 := &@5 storage_live(@7) - storage_live(@12) - storage_live(@13) - storage_live(@14) - storage_live(@15) - storage_live(@16) - storage_live(@4) - storage_live(@9) - storage_live(@11) - @11 := ctpop[Sized, {impl Copy for usize}](copy (align@2)) - switch move (@11) { - 1 : u32 => { - }, - _ => { - storage_dead(@11) - storage_live(@7) - storage_live(@12) - @14 := core::ptr::const_ptr::{*const T}::is_aligned_to::{promoted_const}<()> - @12 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(move (@14)) - storage_live(@13) - @15 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> - @13 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@15)) - @16 := Option::None { } - @7 := Arguments { pieces: move (@12), fmt: move (@16), args: move (@13) } - storage_dead(@13) - storage_dead(@12) - panic(core::panicking::panic_fmt) - }, - } - storage_dead(@11) + @7 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@4)) storage_live(@8) - @9 := transmute<*const (), usize>(copy (addr@1)) - storage_live(@10) - @10 := copy (align@2) wrapping.- const (1 : usize) - @8 := copy (@9) & move (@10) - storage_dead(@10) - switch move (@8) { - 0 : usize => { - storage_dead(@8) - if copy (is_zst@3) { - storage_dead(@9) - storage_dead(@4) - @0 := () - return - } - else { - storage_live(@6) - @6 := copy (@9) == const (0 : usize) - @4 := ~(move (@6)) - storage_dead(@6) - storage_dead(@9) - if move (@4) { - storage_dead(@4) - @0 := () - return - } - else { - } - } - }, - _ => { - storage_dead(@8) - storage_dead(@9) - }, - } - @5 := panic_nounwind(const ("unsafe precondition(s) violated: ptr::read_volatile requires that the pointer argument is aligned and non-null\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + @9 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @8 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@9)) + @10 := Option::None { } + @3 := Arguments { pieces: move (@7), fmt: move (@10), args: move (@8) } + storage_dead(@8) + storage_dead(@7) + @2 := panic_nounwind_fmt<'_>(move (@3), const (false)) } fn core::hint::assert_unchecked::precondition_check(@1: bool) @@ -2207,577 +2168,111 @@ fn core::hint::assert_unchecked::precondition_check(@1: bool) let @0: (); // return let cond@1: bool; // arg #1 let @2: !; // anonymous local + let @3: Arguments<'_>; // anonymous local + let pieces@4: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @5: Array<&'_ (Str), 1 : usize>; // anonymous local + let @6: &'_ (Slice<&'_ (Str)>); // anonymous local + let @7: &'_ (Slice>); // anonymous local + let @8: &'_ (Array, 0 : usize>); // anonymous local + let @9: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@2) + storage_live(@3) + storage_live(pieces@4) + storage_live(@5) + storage_live(@6) + storage_live(@7) + storage_live(@8) + storage_live(@9) if copy (cond@1) { } else { - @2 := panic_nounwind(const ("unsafe precondition(s) violated: hint::assert_unchecked must never be called when the condition is false\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@3) + storage_live(@5) + @5 := [const ("unsafe precondition(s) violated: hint::assert_unchecked must never be called when the condition is false\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@4 := &@5 + storage_live(@6) + @6 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@4)) + storage_live(@7) + @8 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @7 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@8)) + @9 := Option::None { } + @3 := Arguments { pieces: move (@6), fmt: move (@9), args: move (@7) } + storage_dead(@7) + storage_dead(@6) + @2 := panic_nounwind_fmt<'_>(move (@3), const (false)) } @0 := () return } -// Full name: alloc::alloc::__rust_alloc -unsafe fn __rust_alloc(@1: usize, @2: usize) -> *mut u8 - -// Full name: alloc::alloc::__rust_dealloc -unsafe fn __rust_dealloc(@1: *mut u8, @2: usize, @3: usize) - -// Full name: alloc::alloc::__rust_realloc -unsafe fn __rust_realloc(@1: *mut u8, @2: usize, @3: usize, @4: usize) -> *mut u8 - -// Full name: alloc::alloc::__rust_alloc_zeroed -unsafe fn __rust_alloc_zeroed(@1: usize, @2: usize) -> *mut u8 - -fn alloc::alloc::__rust_no_alloc_shim_is_unstable() -> u8 - -static alloc::alloc::__rust_no_alloc_shim_is_unstable: u8 = alloc::alloc::__rust_no_alloc_shim_is_unstable() - -// Full name: alloc::alloc::Global -#[lang_item("global_alloc_ty")] -pub struct Global {} - -// Full name: alloc::alloc::alloc -pub unsafe fn alloc(@1: Layout) -> *mut u8 +fn core::alloc::layout::{Layout}::from_size_align_unchecked::precondition_check(@1: usize, @2: usize) { - let @0: *mut u8; // return - let layout@1: Layout; // arg #1 - let @2: u8; // anonymous local - let @3: usize; // anonymous local - let self@4: &'_ (Layout); // local - let @5: usize; // anonymous local - let self@6: &'_ (Layout); // local - let @7: (); // anonymous local - let @8: *const (); // anonymous local - let @9: bool; // anonymous local - let @10: Alignment; // anonymous local - let @11: AlignmentEnum; // anonymous local - let @12: u64; // anonymous local - let @13: bool; // anonymous local - let @14: bool; // anonymous local - let @15: bool; // anonymous local - let @16: *const u8; // anonymous local - let @17: *const u8; // anonymous local + let @0: (); // return + let size@1: usize; // arg #1 + let align@2: usize; // arg #2 + let @3: bool; // anonymous local + let @4: !; // anonymous local + let @5: Arguments<'_>; // anonymous local + let pieces@6: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @7: Array<&'_ (Str), 1 : usize>; // anonymous local + let @8: &'_ (Slice<&'_ (Str)>); // anonymous local + let @9: &'_ (Slice>); // anonymous local + let @10: &'_ (Array, 0 : usize>); // anonymous local + let @11: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local - storage_live(@7) - storage_live(@8) - storage_live(@16) - storage_live(@17) - storage_live(@2) - storage_live(@9) - @9 := ub_checks - if copy (@9) { - storage_live(@8) - @16 := &alloc::alloc::__rust_no_alloc_shim_is_unstable - @8 := cast<*const u8, *const ()>(move (@16)) - @7 := core::ptr::read_volatile::precondition_check(move (@8), const (1 : usize), const ({impl SizedTypeProperties for T}[Sized]::IS_ZST)) - storage_dead(@8) - } - else { - } - @17 := &alloc::alloc::__rust_no_alloc_shim_is_unstable - @2 := volatile_load[Sized](move (@17)) - storage_dead(@9) - storage_dead(@2) - storage_live(@3) - storage_live(self@4) - self@4 := &layout@1 - @3 := copy ((layout@1).size) - storage_dead(self@4) + storage_live(@4) storage_live(@5) - storage_live(self@6) - self@6 := &layout@1 - storage_live(@10) - @10 := copy ((layout@1).align) - storage_live(@12) - storage_live(@13) - storage_live(@14) - storage_live(@15) - storage_live(@11) - @11 := copy ((@10).0) - match @11 { - AlignmentEnum::_Align1Shl0 => { - @12 := const (1 : u64) - }, - AlignmentEnum::_Align1Shl1 => { - @12 := const (2 : u64) - }, - AlignmentEnum::_Align1Shl2 => { - @12 := const (4 : u64) - }, - AlignmentEnum::_Align1Shl3 => { - @12 := const (8 : u64) - }, - AlignmentEnum::_Align1Shl4 => { - @12 := const (16 : u64) - }, - AlignmentEnum::_Align1Shl5 => { - @12 := const (32 : u64) - }, - AlignmentEnum::_Align1Shl6 => { - @12 := const (64 : u64) - }, - AlignmentEnum::_Align1Shl7 => { - @12 := const (128 : u64) - }, - AlignmentEnum::_Align1Shl8 => { - @12 := const (256 : u64) - }, - AlignmentEnum::_Align1Shl9 => { - @12 := const (512 : u64) - }, - AlignmentEnum::_Align1Shl10 => { - @12 := const (1024 : u64) - }, - AlignmentEnum::_Align1Shl11 => { - @12 := const (2048 : u64) - }, - AlignmentEnum::_Align1Shl12 => { - @12 := const (4096 : u64) - }, - AlignmentEnum::_Align1Shl13 => { - @12 := const (8192 : u64) - }, - AlignmentEnum::_Align1Shl14 => { - @12 := const (16384 : u64) - }, - AlignmentEnum::_Align1Shl15 => { - @12 := const (32768 : u64) - }, - AlignmentEnum::_Align1Shl16 => { - @12 := const (65536 : u64) - }, - AlignmentEnum::_Align1Shl17 => { - @12 := const (131072 : u64) - }, - AlignmentEnum::_Align1Shl18 => { - @12 := const (262144 : u64) - }, - AlignmentEnum::_Align1Shl19 => { - @12 := const (524288 : u64) - }, - AlignmentEnum::_Align1Shl20 => { - @12 := const (1048576 : u64) - }, - AlignmentEnum::_Align1Shl21 => { - @12 := const (2097152 : u64) - }, - AlignmentEnum::_Align1Shl22 => { - @12 := const (4194304 : u64) - }, - AlignmentEnum::_Align1Shl23 => { - @12 := const (8388608 : u64) - }, - AlignmentEnum::_Align1Shl24 => { - @12 := const (16777216 : u64) - }, - AlignmentEnum::_Align1Shl25 => { - @12 := const (33554432 : u64) - }, - AlignmentEnum::_Align1Shl26 => { - @12 := const (67108864 : u64) - }, - AlignmentEnum::_Align1Shl27 => { - @12 := const (134217728 : u64) - }, - AlignmentEnum::_Align1Shl28 => { - @12 := const (268435456 : u64) - }, - AlignmentEnum::_Align1Shl29 => { - @12 := const (536870912 : u64) - }, - AlignmentEnum::_Align1Shl30 => { - @12 := const (1073741824 : u64) - }, - AlignmentEnum::_Align1Shl31 => { - @12 := const (2147483648 : u64) - }, - AlignmentEnum::_Align1Shl32 => { - @12 := const (4294967296 : u64) - }, - AlignmentEnum::_Align1Shl33 => { - @12 := const (8589934592 : u64) - }, - AlignmentEnum::_Align1Shl34 => { - @12 := const (17179869184 : u64) - }, - AlignmentEnum::_Align1Shl35 => { - @12 := const (34359738368 : u64) - }, - AlignmentEnum::_Align1Shl36 => { - @12 := const (68719476736 : u64) - }, - AlignmentEnum::_Align1Shl37 => { - @12 := const (137438953472 : u64) - }, - AlignmentEnum::_Align1Shl38 => { - @12 := const (274877906944 : u64) - }, - AlignmentEnum::_Align1Shl39 => { - @12 := const (549755813888 : u64) - }, - AlignmentEnum::_Align1Shl40 => { - @12 := const (1099511627776 : u64) - }, - AlignmentEnum::_Align1Shl41 => { - @12 := const (2199023255552 : u64) - }, - AlignmentEnum::_Align1Shl42 => { - @12 := const (4398046511104 : u64) - }, - AlignmentEnum::_Align1Shl43 => { - @12 := const (8796093022208 : u64) - }, - AlignmentEnum::_Align1Shl44 => { - @12 := const (17592186044416 : u64) - }, - AlignmentEnum::_Align1Shl45 => { - @12 := const (35184372088832 : u64) - }, - AlignmentEnum::_Align1Shl46 => { - @12 := const (70368744177664 : u64) - }, - AlignmentEnum::_Align1Shl47 => { - @12 := const (140737488355328 : u64) - }, - AlignmentEnum::_Align1Shl48 => { - @12 := const (281474976710656 : u64) - }, - AlignmentEnum::_Align1Shl49 => { - @12 := const (562949953421312 : u64) - }, - AlignmentEnum::_Align1Shl50 => { - @12 := const (1125899906842624 : u64) - }, - AlignmentEnum::_Align1Shl51 => { - @12 := const (2251799813685248 : u64) - }, - AlignmentEnum::_Align1Shl52 => { - @12 := const (4503599627370496 : u64) - }, - AlignmentEnum::_Align1Shl53 => { - @12 := const (9007199254740992 : u64) - }, - AlignmentEnum::_Align1Shl54 => { - @12 := const (18014398509481984 : u64) - }, - AlignmentEnum::_Align1Shl55 => { - @12 := const (36028797018963968 : u64) - }, - AlignmentEnum::_Align1Shl56 => { - @12 := const (72057594037927936 : u64) - }, - AlignmentEnum::_Align1Shl57 => { - @12 := const (144115188075855872 : u64) - }, - AlignmentEnum::_Align1Shl58 => { - @12 := const (288230376151711744 : u64) - }, - AlignmentEnum::_Align1Shl59 => { - @12 := const (576460752303423488 : u64) - }, - AlignmentEnum::_Align1Shl60 => { - @12 := const (1152921504606846976 : u64) - }, - AlignmentEnum::_Align1Shl61 => { - @12 := const (2305843009213693952 : u64) - }, - AlignmentEnum::_Align1Shl62 => { - @12 := const (4611686018427387904 : u64) - }, - AlignmentEnum::_Align1Shl63 => { - @12 := const (9223372036854775808 : u64) - }, - } - @13 := copy (@12) >= const (1 : u64) - @14 := copy (@12) <= const (9223372036854775808 : u64) - @15 := move (@13) & move (@14) - assert(move (@15) == true) - @5 := cast(copy (@12)) - storage_dead(@11) - storage_dead(@15) - storage_dead(@14) - storage_dead(@13) - storage_dead(@12) - storage_dead(@10) - storage_dead(self@6) - @0 := __rust_alloc(move (@3), move (@5)) - storage_dead(@5) - storage_dead(@3) - return -} - -// Full name: alloc::alloc::alloc_zeroed -pub unsafe fn alloc_zeroed(@1: Layout) -> *mut u8 -{ - let @0: *mut u8; // return - let layout@1: Layout; // arg #1 - let @2: u8; // anonymous local - let @3: usize; // anonymous local - let self@4: &'_ (Layout); // local - let @5: usize; // anonymous local - let self@6: &'_ (Layout); // local - let @7: (); // anonymous local - let @8: *const (); // anonymous local - let @9: bool; // anonymous local - let @10: Alignment; // anonymous local - let @11: AlignmentEnum; // anonymous local - let @12: u64; // anonymous local - let @13: bool; // anonymous local - let @14: bool; // anonymous local - let @15: bool; // anonymous local - let @16: *const u8; // anonymous local - let @17: *const u8; // anonymous local - + storage_live(pieces@6) storage_live(@7) storage_live(@8) - storage_live(@16) - storage_live(@17) - storage_live(@2) - storage_live(@9) - @9 := ub_checks - if copy (@9) { - storage_live(@8) - @16 := &alloc::alloc::__rust_no_alloc_shim_is_unstable - @8 := cast<*const u8, *const ()>(move (@16)) - @7 := core::ptr::read_volatile::precondition_check(move (@8), const (1 : usize), const ({impl SizedTypeProperties for T}[Sized]::IS_ZST)) - storage_dead(@8) - } - else { - } - @17 := &alloc::alloc::__rust_no_alloc_shim_is_unstable - @2 := volatile_load[Sized](move (@17)) - storage_dead(@9) - storage_dead(@2) - storage_live(@3) - storage_live(self@4) - self@4 := &layout@1 - @3 := copy ((layout@1).size) - storage_dead(self@4) - storage_live(@5) - storage_live(self@6) - self@6 := &layout@1 - storage_live(@10) - @10 := copy ((layout@1).align) - storage_live(@12) - storage_live(@13) - storage_live(@14) - storage_live(@15) - storage_live(@11) - @11 := copy ((@10).0) - match @11 { - AlignmentEnum::_Align1Shl0 => { - @12 := const (1 : u64) - }, - AlignmentEnum::_Align1Shl1 => { - @12 := const (2 : u64) - }, - AlignmentEnum::_Align1Shl2 => { - @12 := const (4 : u64) - }, - AlignmentEnum::_Align1Shl3 => { - @12 := const (8 : u64) - }, - AlignmentEnum::_Align1Shl4 => { - @12 := const (16 : u64) - }, - AlignmentEnum::_Align1Shl5 => { - @12 := const (32 : u64) - }, - AlignmentEnum::_Align1Shl6 => { - @12 := const (64 : u64) - }, - AlignmentEnum::_Align1Shl7 => { - @12 := const (128 : u64) - }, - AlignmentEnum::_Align1Shl8 => { - @12 := const (256 : u64) - }, - AlignmentEnum::_Align1Shl9 => { - @12 := const (512 : u64) - }, - AlignmentEnum::_Align1Shl10 => { - @12 := const (1024 : u64) - }, - AlignmentEnum::_Align1Shl11 => { - @12 := const (2048 : u64) - }, - AlignmentEnum::_Align1Shl12 => { - @12 := const (4096 : u64) - }, - AlignmentEnum::_Align1Shl13 => { - @12 := const (8192 : u64) - }, - AlignmentEnum::_Align1Shl14 => { - @12 := const (16384 : u64) - }, - AlignmentEnum::_Align1Shl15 => { - @12 := const (32768 : u64) - }, - AlignmentEnum::_Align1Shl16 => { - @12 := const (65536 : u64) - }, - AlignmentEnum::_Align1Shl17 => { - @12 := const (131072 : u64) - }, - AlignmentEnum::_Align1Shl18 => { - @12 := const (262144 : u64) - }, - AlignmentEnum::_Align1Shl19 => { - @12 := const (524288 : u64) - }, - AlignmentEnum::_Align1Shl20 => { - @12 := const (1048576 : u64) - }, - AlignmentEnum::_Align1Shl21 => { - @12 := const (2097152 : u64) - }, - AlignmentEnum::_Align1Shl22 => { - @12 := const (4194304 : u64) - }, - AlignmentEnum::_Align1Shl23 => { - @12 := const (8388608 : u64) - }, - AlignmentEnum::_Align1Shl24 => { - @12 := const (16777216 : u64) - }, - AlignmentEnum::_Align1Shl25 => { - @12 := const (33554432 : u64) - }, - AlignmentEnum::_Align1Shl26 => { - @12 := const (67108864 : u64) - }, - AlignmentEnum::_Align1Shl27 => { - @12 := const (134217728 : u64) - }, - AlignmentEnum::_Align1Shl28 => { - @12 := const (268435456 : u64) - }, - AlignmentEnum::_Align1Shl29 => { - @12 := const (536870912 : u64) - }, - AlignmentEnum::_Align1Shl30 => { - @12 := const (1073741824 : u64) - }, - AlignmentEnum::_Align1Shl31 => { - @12 := const (2147483648 : u64) - }, - AlignmentEnum::_Align1Shl32 => { - @12 := const (4294967296 : u64) - }, - AlignmentEnum::_Align1Shl33 => { - @12 := const (8589934592 : u64) - }, - AlignmentEnum::_Align1Shl34 => { - @12 := const (17179869184 : u64) - }, - AlignmentEnum::_Align1Shl35 => { - @12 := const (34359738368 : u64) - }, - AlignmentEnum::_Align1Shl36 => { - @12 := const (68719476736 : u64) - }, - AlignmentEnum::_Align1Shl37 => { - @12 := const (137438953472 : u64) - }, - AlignmentEnum::_Align1Shl38 => { - @12 := const (274877906944 : u64) - }, - AlignmentEnum::_Align1Shl39 => { - @12 := const (549755813888 : u64) - }, - AlignmentEnum::_Align1Shl40 => { - @12 := const (1099511627776 : u64) - }, - AlignmentEnum::_Align1Shl41 => { - @12 := const (2199023255552 : u64) - }, - AlignmentEnum::_Align1Shl42 => { - @12 := const (4398046511104 : u64) - }, - AlignmentEnum::_Align1Shl43 => { - @12 := const (8796093022208 : u64) - }, - AlignmentEnum::_Align1Shl44 => { - @12 := const (17592186044416 : u64) - }, - AlignmentEnum::_Align1Shl45 => { - @12 := const (35184372088832 : u64) - }, - AlignmentEnum::_Align1Shl46 => { - @12 := const (70368744177664 : u64) - }, - AlignmentEnum::_Align1Shl47 => { - @12 := const (140737488355328 : u64) - }, - AlignmentEnum::_Align1Shl48 => { - @12 := const (281474976710656 : u64) - }, - AlignmentEnum::_Align1Shl49 => { - @12 := const (562949953421312 : u64) - }, - AlignmentEnum::_Align1Shl50 => { - @12 := const (1125899906842624 : u64) - }, - AlignmentEnum::_Align1Shl51 => { - @12 := const (2251799813685248 : u64) - }, - AlignmentEnum::_Align1Shl52 => { - @12 := const (4503599627370496 : u64) - }, - AlignmentEnum::_Align1Shl53 => { - @12 := const (9007199254740992 : u64) - }, - AlignmentEnum::_Align1Shl54 => { - @12 := const (18014398509481984 : u64) - }, - AlignmentEnum::_Align1Shl55 => { - @12 := const (36028797018963968 : u64) - }, - AlignmentEnum::_Align1Shl56 => { - @12 := const (72057594037927936 : u64) - }, - AlignmentEnum::_Align1Shl57 => { - @12 := const (144115188075855872 : u64) - }, - AlignmentEnum::_Align1Shl58 => { - @12 := const (288230376151711744 : u64) - }, - AlignmentEnum::_Align1Shl59 => { - @12 := const (576460752303423488 : u64) - }, - AlignmentEnum::_Align1Shl60 => { - @12 := const (1152921504606846976 : u64) - }, - AlignmentEnum::_Align1Shl61 => { - @12 := const (2305843009213693952 : u64) - }, - AlignmentEnum::_Align1Shl62 => { - @12 := const (4611686018427387904 : u64) - }, - AlignmentEnum::_Align1Shl63 => { - @12 := const (9223372036854775808 : u64) - }, + storage_live(@9) + storage_live(@10) + storage_live(@11) + storage_live(@3) + @3 := is_size_align_valid(move (size@1), move (align@2)) + if move (@3) { + } + else { + storage_live(@5) + storage_live(@7) + @7 := [const ("unsafe precondition(s) violated: Layout::from_size_align_unchecked requires that align is a power of 2 and the rounded-up allocation size does not exceed isize::MAX\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@6 := &@7 + storage_live(@8) + @8 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@6)) + storage_live(@9) + @10 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @9 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@10)) + @11 := Option::None { } + @5 := Arguments { pieces: move (@8), fmt: move (@11), args: move (@9) } + storage_dead(@9) + storage_dead(@8) + @4 := panic_nounwind_fmt<'_>(move (@5), const (false)) } - @13 := copy (@12) >= const (1 : u64) - @14 := copy (@12) <= const (9223372036854775808 : u64) - @15 := move (@13) & move (@14) - assert(move (@15) == true) - @5 := cast(copy (@12)) - storage_dead(@11) - storage_dead(@15) - storage_dead(@14) - storage_dead(@13) - storage_dead(@12) - storage_dead(@10) - storage_dead(self@6) - @0 := __rust_alloc_zeroed(move (@3), move (@5)) - storage_dead(@5) storage_dead(@3) + @0 := () return } +// Full name: alloc::alloc::__rust_alloc +unsafe fn __rust_alloc(@1: usize, @2: usize) -> *mut u8 + +// Full name: alloc::alloc::__rust_dealloc +unsafe fn __rust_dealloc(@1: *mut u8, @2: usize, @3: usize) + +// Full name: alloc::alloc::__rust_realloc +unsafe fn __rust_realloc(@1: *mut u8, @2: usize, @3: usize, @4: usize) -> *mut u8 + +// Full name: alloc::alloc::__rust_alloc_zeroed +unsafe fn __rust_alloc_zeroed(@1: usize, @2: usize) -> *mut u8 + +// Full name: alloc::alloc::__rust_no_alloc_shim_is_unstable_v2 +unsafe fn __rust_no_alloc_shim_is_unstable_v2() + +// Full name: alloc::alloc::Global +#[lang_item("global_alloc_ty")] +pub struct Global {} + // Full name: alloc::alloc::{Global}::alloc_impl fn alloc_impl<'_0>(@1: &'_0 (Global), @2: Layout, @3: bool) -> Result>, AllocError>[Sized>>, Sized] { @@ -2791,71 +2286,115 @@ fn alloc_impl<'_0>(@1: &'_0 (Global), @2: Layout, @3: bool) -> Result; // local let self@8: &'_ (Layout); // local let raw_ptr@9: *mut u8; // local - let @10: ControlFlow[Sized, Sized], NonNull>[Sized[Sized, Sized]>, Sized>]; // anonymous local - let self@11: Result, AllocError>[Sized>, Sized]; // local - let self@12: Option>[Sized>]; // local - let ptr@13: *mut u8; // local - let ptr@14: NonNull; // local - let @15: NonNull>; // anonymous local - let @16: NonZero[Sized, {impl ZeroablePrimitive for usize}]; // anonymous local - let @17: Alignment; // anonymous local - let @18: *const u8; // anonymous local - let ptr@19: *mut Slice; // local - let data@20: *mut u8; // local - let @21: (); // anonymous local - let @22: *mut (); // anonymous local - let @23: *const Slice; // anonymous local - let @24: bool; // anonymous local - let @25: NonNull; // anonymous local - let @26: *const u8; // anonymous local - let @27: usize; // anonymous local - let @28: (); // anonymous local - let @29: *mut (); // anonymous local - let @30: bool; // anonymous local - let v@31: NonNull; // local - let v@32: NonNull; // local - let ptr@33: *mut Slice; // local - let data@34: *mut u8; // local - let @35: (); // anonymous local - let @36: *mut (); // anonymous local - let @37: *const Slice; // anonymous local - let @38: bool; // anonymous local - let @39: Option>[Sized>]; // anonymous local - let @40: AllocError; // anonymous local - let @41: Result, AllocError>[Sized>, Sized]; // anonymous local - let @42: AllocError; // anonymous local - let @43: Result>, AllocError>[Sized>>, Sized]; // anonymous local + let layout@10: Layout; // local + let layout@11: Layout; // local + let @12: ControlFlow[Sized, Sized], NonNull>[Sized[Sized, Sized]>, Sized>]; // anonymous local + let self@13: Result, AllocError>[Sized>, Sized]; // local + let self@14: Option>[Sized>]; // local + let ptr@15: *mut u8; // local + let ptr@16: NonNull; // local + let @17: NonNull>; // anonymous local + let @18: NonZero[Sized, {impl ZeroablePrimitive for usize}]; // anonymous local + let @19: Alignment; // anonymous local + let @20: *const u8; // anonymous local + let ptr@21: *mut Slice; // local + let data@22: *mut u8; // local + let @23: (); // anonymous local + let @24: *mut (); // anonymous local + let @25: *const Slice; // anonymous local + let @26: bool; // anonymous local + let @27: (); // anonymous local + let self@28: &'_ (Layout); // local + let @29: usize; // anonymous local + let self@30: &'_ (Layout); // local + let @31: Alignment; // anonymous local + let @32: AlignmentEnum; // anonymous local + let @33: u64; // anonymous local + let @34: bool; // anonymous local + let @35: bool; // anonymous local + let @36: bool; // anonymous local + let @37: (); // anonymous local + let self@38: &'_ (Layout); // local + let @39: usize; // anonymous local + let self@40: &'_ (Layout); // local + let @41: Alignment; // anonymous local + let @42: AlignmentEnum; // anonymous local + let @43: u64; // anonymous local + let @44: bool; // anonymous local + let @45: bool; // anonymous local + let @46: bool; // anonymous local + let @47: NonNull; // anonymous local + let @48: *const u8; // anonymous local + let @49: usize; // anonymous local + let @50: (); // anonymous local + let @51: *mut (); // anonymous local + let @52: bool; // anonymous local + let v@53: NonNull; // local + let v@54: NonNull; // local + let ptr@55: *mut Slice; // local + let data@56: *mut u8; // local + let @57: (); // anonymous local + let @58: *mut (); // anonymous local + let @59: *const Slice; // anonymous local + let @60: bool; // anonymous local + let @61: Option>[Sized>]; // anonymous local + let @62: AllocError; // anonymous local + let @63: Result, AllocError>[Sized>, Sized]; // anonymous local + let @64: AllocError; // anonymous local + let @65: Result>, AllocError>[Sized>>, Sized]; // anonymous local storage_live(size@4) storage_live(raw_ptr@9) - storage_live(@10) - storage_live(self@11) - storage_live(self@12) - storage_live(ptr@13) - storage_live(ptr@14) - storage_live(@15) - storage_live(@16) - storage_live(@21) - storage_live(@22) - storage_live(@25) - storage_live(@26) + storage_live(layout@10) + storage_live(layout@11) + storage_live(@12) + storage_live(self@13) + storage_live(self@14) + storage_live(ptr@15) + storage_live(ptr@16) + storage_live(@17) + storage_live(@18) + storage_live(@23) + storage_live(@24) storage_live(@27) - storage_live(@28) + storage_live(self@28) storage_live(@29) - storage_live(@30) - storage_live(v@31) - storage_live(v@32) - storage_live(ptr@33) - storage_live(data@34) + storage_live(self@30) + storage_live(@31) + storage_live(@32) + storage_live(@33) + storage_live(@34) storage_live(@35) storage_live(@36) storage_live(@37) - storage_live(@38) + storage_live(self@38) storage_live(@39) - storage_live(@40) + storage_live(self@40) storage_live(@41) storage_live(@42) storage_live(@43) + storage_live(@44) + storage_live(@45) + storage_live(@46) + storage_live(@47) + storage_live(@48) + storage_live(@49) + storage_live(@50) + storage_live(@51) + storage_live(@52) + storage_live(v@53) + storage_live(v@54) + storage_live(ptr@55) + storage_live(data@56) + storage_live(@57) + storage_live(@58) + storage_live(@59) + storage_live(@60) + storage_live(@61) + storage_live(@62) + storage_live(@63) + storage_live(@64) + storage_live(@65) storage_live(self@5) self@5 := &layout@2 size@4 := copy ((layout@2).size) @@ -2866,94 +2405,544 @@ fn alloc_impl<'_0>(@1: &'_0 (Global), @2: Layout, @3: bool) -> Result { storage_live(raw_ptr@9) if copy (zeroed@3) { - raw_ptr@9 := alloc_zeroed(copy (layout@2)) + storage_live(layout@10) + layout@10 := copy (layout@2) + @27 := __rust_no_alloc_shim_is_unstable_v2() + storage_live(self@28) + self@28 := &layout@10 + storage_dead(self@28) + storage_live(@29) + storage_live(self@30) + self@30 := &layout@10 + storage_live(@31) + @31 := copy ((layout@2).align) + storage_live(@33) + storage_live(@34) + storage_live(@35) + storage_live(@36) + storage_live(@32) + @32 := copy ((@31).0) + match @32 { + AlignmentEnum::_Align1Shl0 => { + @33 := const (1 : u64) + }, + AlignmentEnum::_Align1Shl1 => { + @33 := const (2 : u64) + }, + AlignmentEnum::_Align1Shl2 => { + @33 := const (4 : u64) + }, + AlignmentEnum::_Align1Shl3 => { + @33 := const (8 : u64) + }, + AlignmentEnum::_Align1Shl4 => { + @33 := const (16 : u64) + }, + AlignmentEnum::_Align1Shl5 => { + @33 := const (32 : u64) + }, + AlignmentEnum::_Align1Shl6 => { + @33 := const (64 : u64) + }, + AlignmentEnum::_Align1Shl7 => { + @33 := const (128 : u64) + }, + AlignmentEnum::_Align1Shl8 => { + @33 := const (256 : u64) + }, + AlignmentEnum::_Align1Shl9 => { + @33 := const (512 : u64) + }, + AlignmentEnum::_Align1Shl10 => { + @33 := const (1024 : u64) + }, + AlignmentEnum::_Align1Shl11 => { + @33 := const (2048 : u64) + }, + AlignmentEnum::_Align1Shl12 => { + @33 := const (4096 : u64) + }, + AlignmentEnum::_Align1Shl13 => { + @33 := const (8192 : u64) + }, + AlignmentEnum::_Align1Shl14 => { + @33 := const (16384 : u64) + }, + AlignmentEnum::_Align1Shl15 => { + @33 := const (32768 : u64) + }, + AlignmentEnum::_Align1Shl16 => { + @33 := const (65536 : u64) + }, + AlignmentEnum::_Align1Shl17 => { + @33 := const (131072 : u64) + }, + AlignmentEnum::_Align1Shl18 => { + @33 := const (262144 : u64) + }, + AlignmentEnum::_Align1Shl19 => { + @33 := const (524288 : u64) + }, + AlignmentEnum::_Align1Shl20 => { + @33 := const (1048576 : u64) + }, + AlignmentEnum::_Align1Shl21 => { + @33 := const (2097152 : u64) + }, + AlignmentEnum::_Align1Shl22 => { + @33 := const (4194304 : u64) + }, + AlignmentEnum::_Align1Shl23 => { + @33 := const (8388608 : u64) + }, + AlignmentEnum::_Align1Shl24 => { + @33 := const (16777216 : u64) + }, + AlignmentEnum::_Align1Shl25 => { + @33 := const (33554432 : u64) + }, + AlignmentEnum::_Align1Shl26 => { + @33 := const (67108864 : u64) + }, + AlignmentEnum::_Align1Shl27 => { + @33 := const (134217728 : u64) + }, + AlignmentEnum::_Align1Shl28 => { + @33 := const (268435456 : u64) + }, + AlignmentEnum::_Align1Shl29 => { + @33 := const (536870912 : u64) + }, + AlignmentEnum::_Align1Shl30 => { + @33 := const (1073741824 : u64) + }, + AlignmentEnum::_Align1Shl31 => { + @33 := const (2147483648 : u64) + }, + AlignmentEnum::_Align1Shl32 => { + @33 := const (4294967296 : u64) + }, + AlignmentEnum::_Align1Shl33 => { + @33 := const (8589934592 : u64) + }, + AlignmentEnum::_Align1Shl34 => { + @33 := const (17179869184 : u64) + }, + AlignmentEnum::_Align1Shl35 => { + @33 := const (34359738368 : u64) + }, + AlignmentEnum::_Align1Shl36 => { + @33 := const (68719476736 : u64) + }, + AlignmentEnum::_Align1Shl37 => { + @33 := const (137438953472 : u64) + }, + AlignmentEnum::_Align1Shl38 => { + @33 := const (274877906944 : u64) + }, + AlignmentEnum::_Align1Shl39 => { + @33 := const (549755813888 : u64) + }, + AlignmentEnum::_Align1Shl40 => { + @33 := const (1099511627776 : u64) + }, + AlignmentEnum::_Align1Shl41 => { + @33 := const (2199023255552 : u64) + }, + AlignmentEnum::_Align1Shl42 => { + @33 := const (4398046511104 : u64) + }, + AlignmentEnum::_Align1Shl43 => { + @33 := const (8796093022208 : u64) + }, + AlignmentEnum::_Align1Shl44 => { + @33 := const (17592186044416 : u64) + }, + AlignmentEnum::_Align1Shl45 => { + @33 := const (35184372088832 : u64) + }, + AlignmentEnum::_Align1Shl46 => { + @33 := const (70368744177664 : u64) + }, + AlignmentEnum::_Align1Shl47 => { + @33 := const (140737488355328 : u64) + }, + AlignmentEnum::_Align1Shl48 => { + @33 := const (281474976710656 : u64) + }, + AlignmentEnum::_Align1Shl49 => { + @33 := const (562949953421312 : u64) + }, + AlignmentEnum::_Align1Shl50 => { + @33 := const (1125899906842624 : u64) + }, + AlignmentEnum::_Align1Shl51 => { + @33 := const (2251799813685248 : u64) + }, + AlignmentEnum::_Align1Shl52 => { + @33 := const (4503599627370496 : u64) + }, + AlignmentEnum::_Align1Shl53 => { + @33 := const (9007199254740992 : u64) + }, + AlignmentEnum::_Align1Shl54 => { + @33 := const (18014398509481984 : u64) + }, + AlignmentEnum::_Align1Shl55 => { + @33 := const (36028797018963968 : u64) + }, + AlignmentEnum::_Align1Shl56 => { + @33 := const (72057594037927936 : u64) + }, + AlignmentEnum::_Align1Shl57 => { + @33 := const (144115188075855872 : u64) + }, + AlignmentEnum::_Align1Shl58 => { + @33 := const (288230376151711744 : u64) + }, + AlignmentEnum::_Align1Shl59 => { + @33 := const (576460752303423488 : u64) + }, + AlignmentEnum::_Align1Shl60 => { + @33 := const (1152921504606846976 : u64) + }, + AlignmentEnum::_Align1Shl61 => { + @33 := const (2305843009213693952 : u64) + }, + AlignmentEnum::_Align1Shl62 => { + @33 := const (4611686018427387904 : u64) + }, + AlignmentEnum::_Align1Shl63 => { + @33 := const (9223372036854775808 : u64) + }, + } + @34 := copy (@33) >= const (1 : u64) + @35 := copy (@33) <= const (9223372036854775808 : u64) + @36 := move (@34) & move (@35) + assert(move (@36) == true) + @29 := cast(copy (@33)) + storage_dead(@32) + storage_dead(@36) + storage_dead(@35) + storage_dead(@34) + storage_dead(@33) + storage_dead(@31) + storage_dead(self@30) + raw_ptr@9 := __rust_alloc_zeroed(copy (size@4), move (@29)) + storage_dead(@29) + storage_dead(layout@10) } else { - raw_ptr@9 := alloc(copy (layout@2)) + storage_live(layout@11) + layout@11 := copy (layout@2) + @37 := __rust_no_alloc_shim_is_unstable_v2() + storage_live(self@38) + self@38 := &layout@11 + storage_dead(self@38) + storage_live(@39) + storage_live(self@40) + self@40 := &layout@11 + storage_live(@41) + @41 := copy ((layout@2).align) + storage_live(@43) + storage_live(@44) + storage_live(@45) + storage_live(@46) + storage_live(@42) + @42 := copy ((@41).0) + match @42 { + AlignmentEnum::_Align1Shl0 => { + @43 := const (1 : u64) + }, + AlignmentEnum::_Align1Shl1 => { + @43 := const (2 : u64) + }, + AlignmentEnum::_Align1Shl2 => { + @43 := const (4 : u64) + }, + AlignmentEnum::_Align1Shl3 => { + @43 := const (8 : u64) + }, + AlignmentEnum::_Align1Shl4 => { + @43 := const (16 : u64) + }, + AlignmentEnum::_Align1Shl5 => { + @43 := const (32 : u64) + }, + AlignmentEnum::_Align1Shl6 => { + @43 := const (64 : u64) + }, + AlignmentEnum::_Align1Shl7 => { + @43 := const (128 : u64) + }, + AlignmentEnum::_Align1Shl8 => { + @43 := const (256 : u64) + }, + AlignmentEnum::_Align1Shl9 => { + @43 := const (512 : u64) + }, + AlignmentEnum::_Align1Shl10 => { + @43 := const (1024 : u64) + }, + AlignmentEnum::_Align1Shl11 => { + @43 := const (2048 : u64) + }, + AlignmentEnum::_Align1Shl12 => { + @43 := const (4096 : u64) + }, + AlignmentEnum::_Align1Shl13 => { + @43 := const (8192 : u64) + }, + AlignmentEnum::_Align1Shl14 => { + @43 := const (16384 : u64) + }, + AlignmentEnum::_Align1Shl15 => { + @43 := const (32768 : u64) + }, + AlignmentEnum::_Align1Shl16 => { + @43 := const (65536 : u64) + }, + AlignmentEnum::_Align1Shl17 => { + @43 := const (131072 : u64) + }, + AlignmentEnum::_Align1Shl18 => { + @43 := const (262144 : u64) + }, + AlignmentEnum::_Align1Shl19 => { + @43 := const (524288 : u64) + }, + AlignmentEnum::_Align1Shl20 => { + @43 := const (1048576 : u64) + }, + AlignmentEnum::_Align1Shl21 => { + @43 := const (2097152 : u64) + }, + AlignmentEnum::_Align1Shl22 => { + @43 := const (4194304 : u64) + }, + AlignmentEnum::_Align1Shl23 => { + @43 := const (8388608 : u64) + }, + AlignmentEnum::_Align1Shl24 => { + @43 := const (16777216 : u64) + }, + AlignmentEnum::_Align1Shl25 => { + @43 := const (33554432 : u64) + }, + AlignmentEnum::_Align1Shl26 => { + @43 := const (67108864 : u64) + }, + AlignmentEnum::_Align1Shl27 => { + @43 := const (134217728 : u64) + }, + AlignmentEnum::_Align1Shl28 => { + @43 := const (268435456 : u64) + }, + AlignmentEnum::_Align1Shl29 => { + @43 := const (536870912 : u64) + }, + AlignmentEnum::_Align1Shl30 => { + @43 := const (1073741824 : u64) + }, + AlignmentEnum::_Align1Shl31 => { + @43 := const (2147483648 : u64) + }, + AlignmentEnum::_Align1Shl32 => { + @43 := const (4294967296 : u64) + }, + AlignmentEnum::_Align1Shl33 => { + @43 := const (8589934592 : u64) + }, + AlignmentEnum::_Align1Shl34 => { + @43 := const (17179869184 : u64) + }, + AlignmentEnum::_Align1Shl35 => { + @43 := const (34359738368 : u64) + }, + AlignmentEnum::_Align1Shl36 => { + @43 := const (68719476736 : u64) + }, + AlignmentEnum::_Align1Shl37 => { + @43 := const (137438953472 : u64) + }, + AlignmentEnum::_Align1Shl38 => { + @43 := const (274877906944 : u64) + }, + AlignmentEnum::_Align1Shl39 => { + @43 := const (549755813888 : u64) + }, + AlignmentEnum::_Align1Shl40 => { + @43 := const (1099511627776 : u64) + }, + AlignmentEnum::_Align1Shl41 => { + @43 := const (2199023255552 : u64) + }, + AlignmentEnum::_Align1Shl42 => { + @43 := const (4398046511104 : u64) + }, + AlignmentEnum::_Align1Shl43 => { + @43 := const (8796093022208 : u64) + }, + AlignmentEnum::_Align1Shl44 => { + @43 := const (17592186044416 : u64) + }, + AlignmentEnum::_Align1Shl45 => { + @43 := const (35184372088832 : u64) + }, + AlignmentEnum::_Align1Shl46 => { + @43 := const (70368744177664 : u64) + }, + AlignmentEnum::_Align1Shl47 => { + @43 := const (140737488355328 : u64) + }, + AlignmentEnum::_Align1Shl48 => { + @43 := const (281474976710656 : u64) + }, + AlignmentEnum::_Align1Shl49 => { + @43 := const (562949953421312 : u64) + }, + AlignmentEnum::_Align1Shl50 => { + @43 := const (1125899906842624 : u64) + }, + AlignmentEnum::_Align1Shl51 => { + @43 := const (2251799813685248 : u64) + }, + AlignmentEnum::_Align1Shl52 => { + @43 := const (4503599627370496 : u64) + }, + AlignmentEnum::_Align1Shl53 => { + @43 := const (9007199254740992 : u64) + }, + AlignmentEnum::_Align1Shl54 => { + @43 := const (18014398509481984 : u64) + }, + AlignmentEnum::_Align1Shl55 => { + @43 := const (36028797018963968 : u64) + }, + AlignmentEnum::_Align1Shl56 => { + @43 := const (72057594037927936 : u64) + }, + AlignmentEnum::_Align1Shl57 => { + @43 := const (144115188075855872 : u64) + }, + AlignmentEnum::_Align1Shl58 => { + @43 := const (288230376151711744 : u64) + }, + AlignmentEnum::_Align1Shl59 => { + @43 := const (576460752303423488 : u64) + }, + AlignmentEnum::_Align1Shl60 => { + @43 := const (1152921504606846976 : u64) + }, + AlignmentEnum::_Align1Shl61 => { + @43 := const (2305843009213693952 : u64) + }, + AlignmentEnum::_Align1Shl62 => { + @43 := const (4611686018427387904 : u64) + }, + AlignmentEnum::_Align1Shl63 => { + @43 := const (9223372036854775808 : u64) + }, + } + @44 := copy (@43) >= const (1 : u64) + @45 := copy (@43) <= const (9223372036854775808 : u64) + @46 := move (@44) & move (@45) + assert(move (@46) == true) + @39 := cast(copy (@43)) + storage_dead(@42) + storage_dead(@46) + storage_dead(@45) + storage_dead(@44) + storage_dead(@43) + storage_dead(@41) + storage_dead(self@40) + raw_ptr@9 := __rust_alloc(copy (size@4), move (@39)) + storage_dead(@39) + storage_dead(layout@11) } - storage_live(@10) - storage_live(self@11) - storage_live(self@12) - ptr@13 := copy (raw_ptr@9) - @26 := cast<*mut u8, *const u8>(copy (ptr@13)) - storage_live(@27) - @27 := transmute<*mut u8, usize>(copy (ptr@13)) - switch move (@27) { + storage_live(@12) + storage_live(self@13) + storage_live(self@14) + ptr@15 := copy (raw_ptr@9) + @48 := cast<*mut u8, *const u8>(copy (ptr@15)) + storage_live(@49) + @49 := transmute<*mut u8, usize>(copy (ptr@15)) + switch move (@49) { 0 : usize => { }, _ => { - storage_dead(@27) - storage_live(@25) - storage_live(@30) - @30 := ub_checks - if copy (@30) { - storage_live(@29) - @29 := cast<*mut u8, *mut ()>(copy (ptr@13)) - @28 := core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(move (@29)) - storage_dead(@29) + storage_dead(@49) + storage_live(@47) + storage_live(@52) + @52 := ub_checks + if copy (@52) { + storage_live(@51) + @51 := cast<*mut u8, *mut ()>(copy (ptr@15)) + @50 := core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(move (@51)) + storage_dead(@51) } else { } - @25 := NonNull { pointer: copy (@26) } - storage_dead(@30) - self@12 := Option::Some { 0: move (@25) } - storage_dead(@25) - storage_live(v@31) - v@31 := move ((self@12 as variant Option::Some).0) - self@11 := Result::Ok { 0: copy (v@31) } - storage_dead(v@31) - storage_dead(self@12) - storage_live(v@32) - v@32 := move ((self@11 as variant Result::Ok).0) - @10 := ControlFlow::Continue { 0: copy (v@32) } - storage_dead(v@32) - storage_dead(self@11) - ptr@14 := copy ((@10 as variant ControlFlow::Continue).0) - storage_dead(@10) - storage_live(@15) - storage_live(ptr@33) - storage_live(data@34) - data@34 := transmute, *mut u8>(copy (ptr@14)) - ptr@33 := @PtrFromPartsMut<'_, Slice>(copy (data@34), copy (size@4)) - storage_dead(data@34) - storage_live(@37) - storage_live(@38) - @38 := ub_checks - if copy (@38) { - storage_live(@36) - @36 := transmute, *mut ()>(copy (ptr@14)) - @35 := core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(move (@36)) - storage_dead(@36) + @47 := NonNull { pointer: copy (@48) } + storage_dead(@52) + self@14 := Option::Some { 0: move (@47) } + storage_dead(@47) + storage_live(v@53) + v@53 := move ((self@14 as variant Option::Some).0) + self@13 := Result::Ok { 0: copy (v@53) } + storage_dead(v@53) + storage_dead(self@14) + storage_live(v@54) + v@54 := move ((self@13 as variant Result::Ok).0) + @12 := ControlFlow::Continue { 0: copy (v@54) } + storage_dead(v@54) + storage_dead(self@13) + ptr@16 := copy ((@12 as variant ControlFlow::Continue).0) + storage_dead(@12) + storage_live(@17) + storage_live(ptr@55) + storage_live(data@56) + data@56 := transmute, *mut u8>(copy (ptr@16)) + ptr@55 := @PtrFromPartsMut<'_, Slice>(copy (data@56), copy (size@4)) + storage_dead(data@56) + storage_live(@59) + storage_live(@60) + @60 := ub_checks + if copy (@60) { + storage_live(@58) + @58 := transmute, *mut ()>(copy (ptr@16)) + @57 := core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(move (@58)) + storage_dead(@58) } else { } - @37 := cast<*mut Slice, *const Slice>(copy (ptr@33)) - @15 := NonNull { pointer: copy (@37) } - storage_dead(@38) - storage_dead(@37) - storage_dead(ptr@33) - @0 := Result::Ok { 0: move (@15) } - storage_dead(@15) + @59 := cast<*mut Slice, *const Slice>(copy (ptr@55)) + @17 := NonNull { pointer: copy (@59) } + storage_dead(@60) + storage_dead(@59) + storage_dead(ptr@55) + @0 := Result::Ok { 0: move (@17) } + storage_dead(@17) storage_dead(raw_ptr@9) return }, } - storage_dead(@27) - @39 := Option::None { } - self@12 := move (@39) - storage_live(v@31) - @40 := AllocError { } - @41 := Result::Err { 0: move (@40) } - self@11 := move (@41) - storage_dead(v@31) - storage_dead(self@12) - storage_live(v@32) - storage_dead(v@32) - storage_dead(self@11) - @42 := AllocError { } - @43 := Result::Err { 0: move (@42) } - @0 := move (@43) - storage_dead(@10) + storage_dead(@49) + @61 := Option::None { } + self@14 := move (@61) + storage_live(v@53) + @62 := AllocError { } + @63 := Result::Err { 0: move (@62) } + self@13 := move (@63) + storage_dead(v@53) + storage_dead(self@14) + storage_live(v@54) + storage_dead(v@54) + storage_dead(self@13) + @64 := AllocError { } + @65 := Result::Err { 0: move (@64) } + @0 := move (@65) + storage_dead(@12) storage_dead(raw_ptr@9) return }, @@ -2962,36 +2951,36 @@ fn alloc_impl<'_0>(@1: &'_0 (Global), @2: Layout, @3: bool) -> Result[Sized, {impl ZeroablePrimitive for usize}]>(copy (@17)) - storage_dead(@17) - storage_live(@18) - @18 := transmute[Sized, {impl ZeroablePrimitive for usize}], *const u8>(copy (@16)) - data@7 := NonNull { pointer: copy (@18) } - storage_dead(@18) + storage_live(@19) + @19 := copy ((layout@2).align) + @18 := transmute[Sized, {impl ZeroablePrimitive for usize}]>(copy (@19)) + storage_dead(@19) + storage_live(@20) + @20 := transmute[Sized, {impl ZeroablePrimitive for usize}], *const u8>(copy (@18)) + data@7 := NonNull { pointer: copy (@20) } + storage_dead(@20) storage_dead(self@8) - storage_live(ptr@19) - storage_live(data@20) - data@20 := transmute[Sized, {impl ZeroablePrimitive for usize}], *mut u8>(copy (@16)) - ptr@19 := @PtrFromPartsMut<'_, Slice>(copy (data@20), const (0 : usize)) - storage_dead(data@20) - storage_live(@23) - storage_live(@24) - @24 := ub_checks - if copy (@24) { - storage_live(@22) - @22 := transmute[Sized, {impl ZeroablePrimitive for usize}], *mut ()>(copy (@16)) - @21 := core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(move (@22)) - storage_dead(@22) + storage_live(ptr@21) + storage_live(data@22) + data@22 := transmute[Sized, {impl ZeroablePrimitive for usize}], *mut u8>(copy (@18)) + ptr@21 := @PtrFromPartsMut<'_, Slice>(copy (data@22), const (0 : usize)) + storage_dead(data@22) + storage_live(@25) + storage_live(@26) + @26 := ub_checks + if copy (@26) { + storage_live(@24) + @24 := transmute[Sized, {impl ZeroablePrimitive for usize}], *mut ()>(copy (@18)) + @23 := core::ptr::non_null::{NonNull}::new_unchecked::precondition_check(move (@24)) + storage_dead(@24) } else { } - @23 := cast<*mut Slice, *const Slice>(copy (ptr@19)) - @6 := NonNull { pointer: copy (@23) } - storage_dead(@24) - storage_dead(@23) - storage_dead(ptr@19) + @25 := cast<*mut Slice, *const Slice>(copy (ptr@21)) + @6 := NonNull { pointer: copy (@25) } + storage_dead(@26) + storage_dead(@25) + storage_dead(ptr@21) storage_dead(data@7) @0 := Result::Ok { 0: move (@6) } storage_dead(@6) @@ -5662,6 +5651,7 @@ where // Full name: alloc::alloc::{impl Allocator for Global} impl Allocator for Global { + parent_clause0 = MetaSized fn allocate<'_0> = {impl Allocator for Global}::allocate<'_0_0> fn allocate_zeroed<'_0> = {impl Allocator for Global}::allocate_zeroed<'_0_0> fn deallocate<'_0> = {impl Allocator for Global}::deallocate<'_0_0> @@ -5775,19 +5765,20 @@ unsafe fn exchange_malloc(@1: usize, @2: usize) -> *mut u8 #[lang_item("owned_box")] pub struct Box where - [@TraitClause0]: Sized, - [@TraitClause1]: Allocator, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, + [@TraitClause2]: Allocator, { Unique, A, } #[lang_item("box_new")] -pub fn alloc::boxed::{Box[Sized, {impl Allocator for Global}]}::new(@1: T) -> Box[Sized, {impl Allocator for Global}] +pub fn alloc::boxed::{Box[@TraitClause0::parent_clause0, Sized, {impl Allocator for Global}]}::new(@1: T) -> Box[@TraitClause0::parent_clause0, Sized, {impl Allocator for Global}] where [@TraitClause0]: Sized, { - let @0: Box[Sized, {impl Allocator for Global}]; // return + let @0: Box[@TraitClause0::parent_clause0, Sized, {impl Allocator for Global}]; // return let x@1: T; // arg #1 let @2: usize; // anonymous local let @3: usize; // anonymous local @@ -5807,10 +5798,12 @@ where return } -// Full name: alloc::boxed::{Box[Sized, {impl Allocator for Global}]}::from_raw -pub unsafe fn from_raw(@1: *mut T) -> Box[Sized, {impl Allocator for Global}] +// Full name: alloc::boxed::{Box[@TraitClause0, Sized, {impl Allocator for Global}]}::from_raw +pub unsafe fn from_raw(@1: *mut T) -> Box[@TraitClause0, Sized, {impl Allocator for Global}] +where + [@TraitClause0]: MetaSized, { - let @0: Box[Sized, {impl Allocator for Global}]; // return + let @0: Box[@TraitClause0, Sized, {impl Allocator for Global}]; // return let raw@1: *mut T; // arg #1 let @2: Unique; // anonymous local let @3: NonNull; // anonymous local @@ -5851,14 +5844,15 @@ pub unsafe fn from_raw(@1: *mut T) -> Box[Sized, {impl All return } -// Full name: alloc::boxed::{Box[@TraitClause0, @TraitClause1]}::into_raw -pub fn into_raw(@1: Box[@TraitClause0, @TraitClause1]) -> *mut T +// Full name: alloc::boxed::{Box[@TraitClause0, @TraitClause1, @TraitClause2]}::into_raw +pub fn into_raw(@1: Box[@TraitClause0, @TraitClause1, @TraitClause2]) -> *mut T where - [@TraitClause0]: Sized, - [@TraitClause1]: Allocator, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, + [@TraitClause2]: Allocator, { let @0: *mut T; // return - let b@1: Box[@TraitClause0, @TraitClause1]; // arg #1 + let b@1: Box[@TraitClause0, @TraitClause1, @TraitClause2]; // arg #1 let @2: (*mut T, A); // anonymous local let @3: *mut T; // anonymous local let @4: A; // anonymous local @@ -5885,15 +5879,16 @@ where return } -// Full name: alloc::boxed::{Box[@TraitClause0, @TraitClause1]}::leak -pub fn leak<'a, T, A>(@1: Box[@TraitClause0, @TraitClause1]) -> &'a mut (T) +// Full name: alloc::boxed::{Box[@TraitClause0, @TraitClause1, @TraitClause2]}::leak +pub fn leak<'a, T, A>(@1: Box[@TraitClause0, @TraitClause1, @TraitClause2]) -> &'a mut (T) where - [@TraitClause0]: Sized, - [@TraitClause1]: Allocator, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, + [@TraitClause2]: Allocator, A : 'a, { let @0: &'_ mut (T); // return - let b@1: Box[@TraitClause0, @TraitClause1]; // arg #1 + let b@1: Box[@TraitClause0, @TraitClause1, @TraitClause2]; // arg #1 let @2: *mut T; // anonymous local let @3: (*mut T, A); // anonymous local let @4: *mut T; // anonymous local @@ -5930,34 +5925,34 @@ where unsafe fn foo() { let @0: (); // return - let b@1: Box[Sized, {impl Allocator for Global}]; // local + let b@1: Box[MetaSized, Sized, {impl Allocator for Global}]; // local let p@2: *mut i32; // local - let @3: Box[Sized, {impl Allocator for Global}]; // anonymous local + let @3: Box[MetaSized, Sized, {impl Allocator for Global}]; // anonymous local let @4: &'_ mut (i32); // anonymous local - let @5: Box[Sized, {impl Allocator for Global}]; // anonymous local - let b@6: Box[Sized, {impl Allocator for Global}]; // local + let @5: Box[MetaSized, Sized, {impl Allocator for Global}]; // anonymous local + let b@6: Box[MetaSized, Sized, {impl Allocator for Global}]; // local let @7: *mut i32; // anonymous local let i@8: i32; // local let @9: *const i32; // anonymous local storage_live(@9) storage_live(b@1) - b@1 := alloc::boxed::{Box[Sized, {impl Allocator for Global}]}::new[Sized](const (42 : i32)) + b@1 := alloc::boxed::{Box[@TraitClause0::parent_clause0, Sized, {impl Allocator for Global}]}::new[Sized](const (42 : i32)) storage_live(p@2) storage_live(@3) @3 := move (b@1) - p@2 := into_raw[Sized, {impl Allocator for Global}](move (@3)) + p@2 := into_raw[MetaSized, Sized, {impl Allocator for Global}](move (@3)) storage_dead(@3) storage_live(@4) storage_live(@5) - @5 := alloc::boxed::{Box[Sized, {impl Allocator for Global}]}::new[Sized](const (42 : i32)) - @4 := leak<'_, i32, Global>[Sized, {impl Allocator for Global}](move (@5)) + @5 := alloc::boxed::{Box[@TraitClause0::parent_clause0, Sized, {impl Allocator for Global}]}::new[Sized](const (42 : i32)) + @4 := leak<'_, i32, Global>[MetaSized, Sized, {impl Allocator for Global}](move (@5)) storage_dead(@5) storage_dead(@4) storage_live(b@6) storage_live(@7) @7 := copy (p@2) - b@6 := from_raw(move (@7)) + b@6 := from_raw[MetaSized](move (@7)) storage_dead(@7) storage_live(i@8) @9 := transmute, *const i32>(copy (((b@6).0).pointer)) diff --git a/charon/tests/ui/region-inference-vars.out b/charon/tests/ui/region-inference-vars.out index 7310be62c..46e974566 100644 --- a/charon/tests/ui/region-inference-vars.out +++ b/charon/tests/ui/region-inference-vars.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] @@ -18,13 +25,14 @@ where // Full name: test_crate::MyTryFrom pub trait MyTryFrom { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized type Error fn from<[@TraitClause0]: Sized> = test_crate::MyTryFrom::from[Self, @TraitClause0_0] } -pub fn test_crate::MyTryFrom::from(@1: T) -> Result[@TraitClause1, @TraitClause0::parent_clause1] +pub fn test_crate::MyTryFrom::from(@1: T) -> Result[@TraitClause1, @TraitClause0::parent_clause2] where [@TraitClause0]: MyTryFrom, [@TraitClause1]: Sized, @@ -45,8 +53,9 @@ pub fn {impl MyTryFrom<&'_0 (bool)> for bool}::from<'_0>(@1: &'_0 (bool)) -> Res // Full name: test_crate::{impl MyTryFrom<&'_0 (bool)> for bool} impl<'_0> MyTryFrom<&'_0 (bool)> for bool { - parent_clause0 = Sized<&'_ (bool)> - parent_clause1 = Sized<()> + parent_clause0 = MetaSized + parent_clause1 = Sized<&'_ (bool)> + parent_clause2 = Sized<()> type Error = () fn from = {impl MyTryFrom<&'_0 (bool)> for bool}::from<'_0> } diff --git a/charon/tests/ui/regressions/closure-inside-impl-with-bound-with-assoc-ty.out b/charon/tests/ui/regressions/closure-inside-impl-with-bound-with-assoc-ty.out index 3fea25d14..b4750b9ee 100644 --- a/charon/tests/ui/regressions/closure-inside-impl-with-bound-with-assoc-ty.out +++ b/charon/tests/ui/regressions/closure-inside-impl-with-bound-with-assoc-ty.out @@ -1,50 +1,63 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized fn call_once = core::ops::function::FnOnce::call_once[Self] } // Full name: core::ops::function::FnMut #[lang_item("fn_mut")] -pub trait FnMut +pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args, Self_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args, Self_Clause1_Output>[Self] } // Full name: core::ops::function::Fn #[lang_item("r#fn")] -pub trait Fn +pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause1_Clause1_Output>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause0_Clause0_Output +pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause1_Clause1_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause1_Clause1_Output where - [@TraitClause0]: Fn, + [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Clause0_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause0_Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Clause0_Clause1_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause1_Output where - [@TraitClause0]: FnMut, + [@TraitClause0]: FnMut, pub fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Clause0_Output where @@ -53,7 +66,8 @@ where // Full name: test_crate::PrimeField pub trait PrimeField { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::SqrtTables @@ -149,9 +163,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: PrimeField, { - parent_clause0 = Sized<(())> - parent_clause1 = Tuple<(())> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<(())> + parent_clause1 = Sized<(())> + parent_clause2 = Tuple<(())> + parent_clause3 = Sized<()> fn call_once = {impl FnOnce<(()), ()> for closure[@TraitClause0, @TraitClause1]}::call_once[@TraitClause0, @TraitClause1] } @@ -161,9 +176,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: PrimeField, { - parent_clause0 = {impl FnOnce<(()), ()> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(())> - parent_clause2 = Tuple<(())> + parent_clause0 = MetaSized<(())> + parent_clause1 = {impl FnOnce<(()), ()> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(())> + parent_clause3 = Tuple<(())> fn call_mut<'_0> = {impl FnMut<(()), ()> for closure[@TraitClause0, @TraitClause1]}::call_mut<'_0_0, F, Clause1_Repr>[@TraitClause0, @TraitClause1] } @@ -173,9 +189,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: PrimeField, { - parent_clause0 = {impl FnMut<(()), ()> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(())> - parent_clause2 = Tuple<(())> + parent_clause0 = MetaSized<(())> + parent_clause1 = {impl FnMut<(()), ()> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(())> + parent_clause3 = Tuple<(())> fn call<'_0> = {impl Fn<(()), ()> for closure[@TraitClause0, @TraitClause1]}::call<'_0_0, F, Clause1_Repr>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/rename_attribute.out b/charon/tests/ui/rename_attribute.out index 86391f298..c8bcaa2de 100644 --- a/charon/tests/ui/rename_attribute.out +++ b/charon/tests/ui/rename_attribute.out @@ -1,12 +1,20 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::BoolTrait pub trait BoolTrait { + parent_clause0 : [@TraitClause0]: MetaSized fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self>[Self] fn ret_true<'_0> = ret_true<'_0_0, Self>[Self] } @@ -48,6 +56,7 @@ pub fn test_crate::{impl BoolTrait for bool}::ret_true<'_0>(@1: &'_0 (bool)) -> // Full name: test_crate::{impl BoolTrait for bool} impl BoolTrait for bool { + parent_clause0 = MetaSized fn get_bool<'_0> = {impl BoolTrait for bool}::get_bool<'_0_0> fn ret_true<'_0> = test_crate::{impl BoolTrait for bool}::ret_true<'_0_0> } diff --git a/charon/tests/ui/result-unwrap.out b/charon/tests/ui/result-unwrap.out index 081fb78b2..f440bf491 100644 --- a/charon/tests/ui/result-unwrap.out +++ b/charon/tests/ui/result-unwrap.out @@ -40,9 +40,16 @@ where buf: &'a mut (dyn (exists(TODO))), } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] diff --git a/charon/tests/ui/rust-name-matcher-tests.out b/charon/tests/ui/rust-name-matcher-tests.out index 6d8e7343b..9d1b628a0 100644 --- a/charon/tests/ui/rust-name-matcher-tests.out +++ b/charon/tests/ui/rust-name-matcher-tests.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -31,7 +38,8 @@ fn bar() // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn method> = test_crate::Trait::method[Self, @TraitClause0_0] } @@ -40,8 +48,8 @@ where [@TraitClause0]: Trait, [@TraitClause1]: Sized, -// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]}::method -fn {impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]}::method() +// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]}::method +fn {impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]}::method() where [@TraitClause0]: Sized, [@TraitClause1]: Sized, @@ -53,13 +61,14 @@ where return } -// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]} -impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized] +// Full name: test_crate::{impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]} +impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized] where [@TraitClause0]: Sized, { - parent_clause0 = Sized[@TraitClause0]> - fn method> = {impl Trait[@TraitClause0]> for alloc::boxed::Box[Sized]}::method[@TraitClause0, @TraitClause0_0] + parent_clause0 = MetaSized[@TraitClause0::parent_clause0, Sized]> + parent_clause1 = Sized[@TraitClause0]> + fn method> = {impl Trait[@TraitClause0]> for alloc::boxed::Box[@TraitClause0::parent_clause0, Sized]}::method[@TraitClause0, @TraitClause0_0] } // Full name: test_crate::{impl Trait for Slice}::method @@ -80,7 +89,8 @@ impl Trait for Slice where [@TraitClause0]: Sized, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause0 fn method> = {impl Trait for Slice}::method[@TraitClause0, @TraitClause0_0] } @@ -102,7 +112,8 @@ impl<'_0, T> Trait for &'_0 (Slice) where [@TraitClause0]: Sized, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized<&'_ (Slice)> + parent_clause1 = @TraitClause0 fn method> = {impl Trait for &'_0 (Slice)}::method<'_0, T, U>[@TraitClause0, @TraitClause0_0] } diff --git a/charon/tests/ui/rvalues.out b/charon/tests/ui/rvalues.out index 24f6f565e..c9206b90a 100644 --- a/charon/tests/ui/rvalues.out +++ b/charon/tests/ui/rvalues.out @@ -1,12 +1,22 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::mem::size_of #[lang_item("mem_size_of")] @@ -15,6 +25,7 @@ where [@TraitClause0]: Sized, // Full name: core::mem::align_of +#[lang_item("mem_align_of")] pub fn align_of() -> usize where [@TraitClause0]: Sized, @@ -31,9 +42,10 @@ pub const core::f64::{f64}::MIN: f64 = core::f64::{f64}::MIN() #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -42,9 +54,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -52,17 +65,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -356,26 +370,29 @@ fn fn_casts() // Full name: test_crate::fn_casts::{impl FnOnce<(u8)> for closure} impl FnOnce<(u8)> for closure { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized<()> type Output = () fn call_once = {impl FnOnce<(u8)> for closure}::call_once } // Full name: test_crate::fn_casts::{impl FnMut<(u8)> for closure} impl FnMut<(u8)> for closure { - parent_clause0 = {impl FnOnce<(u8)> for closure} - parent_clause1 = Sized<(u8)> - parent_clause2 = Tuple<(u8)> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = {impl FnOnce<(u8)> for closure} + parent_clause2 = Sized<(u8)> + parent_clause3 = Tuple<(u8)> fn call_mut<'_0> = {impl FnMut<(u8)> for closure}::call_mut<'_0_0> } // Full name: test_crate::fn_casts::{impl Fn<(u8)> for closure} impl Fn<(u8)> for closure { - parent_clause0 = {impl FnMut<(u8)> for closure} - parent_clause1 = Sized<(u8)> - parent_clause2 = Tuple<(u8)> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = {impl FnMut<(u8)> for closure} + parent_clause2 = Sized<(u8)> + parent_clause3 = Tuple<(u8)> fn call<'_0> = {impl Fn<(u8)> for closure}::call<'_0_0> } @@ -383,12 +400,12 @@ impl Fn<(u8)> for closure { fn boxes() { let @0: (); // return - let @1: alloc::boxed::Box[Sized]; // anonymous local - let @2: alloc::boxed::Box[Sized]; // anonymous local + let @1: alloc::boxed::Box[MetaSized, Sized]; // anonymous local + let @2: alloc::boxed::Box[MetaSized, Sized]; // anonymous local storage_live(@1) storage_live(@2) - @2 := @BoxNew[Sized](const (42 : i32)) + @2 := @BoxNew[MetaSized, Sized](const (42 : i32)) @1 := move (@2) drop @2 storage_dead(@2) diff --git a/charon/tests/ui/scopes.out b/charon/tests/ui/scopes.out index adb3bfe8e..1ab176df5 100644 --- a/charon/tests/ui/scopes.out +++ b/charon/tests/ui/scopes.out @@ -1,8 +1,13 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: test_crate::Trait trait Trait<'a, Self> { + parent_clause0 : [@TraitClause0]: MetaSized fn method<'b> = test_crate::Trait::method<'a, 'b, Self>[Self] } @@ -15,6 +20,7 @@ fn {impl Trait<'a> for &'a (())}::method<'a, 'b>(@1: &'b (&'a (()))) -> &'b (()) // Full name: test_crate::{impl Trait<'a> for &'a (())} impl<'a> Trait<'a> for &'a (()) { + parent_clause0 = MetaSized<&'_ (())> fn method<'b> = {impl Trait<'a> for &'a (())}::method<'a, 'b> } diff --git a/charon/tests/ui/send_bound.out b/charon/tests/ui/send_bound.out index 93715f8e2..a2d2e48c4 100644 --- a/charon/tests/ui/send_bound.out +++ b/charon/tests/ui/send_bound.out @@ -4,9 +4,16 @@ #[lang_item("Send")] pub trait Send +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::foo fn foo(@1: M) diff --git a/charon/tests/ui/simple-cmp.out b/charon/tests/ui/simple-cmp.out index ab58b139f..80859cbf0 100644 --- a/charon/tests/ui/simple-cmp.out +++ b/charon/tests/ui/simple-cmp.out @@ -27,9 +27,16 @@ pub enum Ordering { Greater, } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] diff --git a/charon/tests/ui/simple/additions.out b/charon/tests/ui/simple/additions.out index 48be7f63a..a719e64b8 100644 --- a/charon/tests/ui/simple/additions.out +++ b/charon/tests/ui/simple/additions.out @@ -1,8 +1,22 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -10,7 +24,7 @@ pub trait Clone { parent_clause0 : [@TraitClause0]: Sized fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] - fn clone_from<'_0, '_1> = clone_from<'_0_0, '_0_1, Self>[Self] + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = clone_from<'_0_0, '_0_1, Self>[Self, @TraitClause0_0] } #[lang_item("clone_fn")] @@ -22,6 +36,7 @@ where pub fn clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) where [@TraitClause0]: Clone, + [@TraitClause1]: Destruct, { let @0: (); // return let self@1: &'_ mut (Self); // arg #1 @@ -48,6 +63,8 @@ pub fn {impl Clone for u8}::clone<'_0>(@1: &'_0 (u8)) -> u8 } pub fn core::clone::impls::{impl Clone for u8}::clone_from<'_0, '_1>(@1: &'_0 mut (u8), @2: &'_1 (u8)) +where + [@TraitClause0]: Destruct, { let @0: (); // return let self@1: &'_ mut (u8); // arg #1 @@ -67,14 +84,15 @@ pub fn core::clone::impls::{impl Clone for u8}::clone_from<'_0, '_1>(@1: &'_0 mu impl Clone for u8 { parent_clause0 = Sized fn clone<'_0> = {impl Clone for u8}::clone<'_0_0> - fn clone_from<'_0, '_1> = core::clone::impls::{impl Clone for u8}::clone_from<'_0_0, '_0_1> + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = core::clone::impls::{impl Clone for u8}::clone_from<'_0_0, '_0_1>[@TraitClause0_0] } // Full name: core::marker::Copy #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } pub fn core::intrinsics::saturating_add(@1: T, @2: T) -> T @@ -91,7 +109,8 @@ where // Full name: core::marker::{impl Copy for u8} impl Copy for u8 { - parent_clause0 = {impl Clone for u8} + parent_clause0 = MetaSized + parent_clause1 = {impl Clone for u8} } pub fn core::num::{u8}::saturating_add(@1: u8, @2: u8) -> u8 diff --git a/charon/tests/ui/simple/assoc-constraint-on-assoc-ty-nested.out b/charon/tests/ui/simple/assoc-constraint-on-assoc-ty-nested.out index 7a03d3b7e..c5d9af41f 100644 --- a/charon/tests/ui/simple/assoc-constraint-on-assoc-ty-nested.out +++ b/charon/tests/ui/simple/assoc-constraint-on-assoc-ty-nested.out @@ -1,35 +1,45 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::IntoIterator trait IntoIterator { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Trait + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Trait } // Full name: test_crate::IntoIntoIterator -trait IntoIntoIterator +trait IntoIntoIterator { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: IntoIterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: IntoIterator } // Full name: test_crate::foo -fn foo() +fn foo() where [@TraitClause0]: Sized, - [@TraitClause1]: IntoIntoIterator, - [@TraitClause2]: Trait, + [@TraitClause1]: IntoIntoIterator, + [@TraitClause2]: Trait, { let @0: (); // return diff --git a/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.2.out b/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.2.out index d9e85b7ef..1d03dc721 100644 --- a/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.2.out +++ b/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.2.out @@ -1,20 +1,29 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::IntoIterator trait IntoIterator { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Trait + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Trait } // Full name: test_crate::foo diff --git a/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.out b/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.out index 949528094..39f3b6e22 100644 --- a/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.out +++ b/charon/tests/ui/simple/assoc-constraint-on-assoc-ty.out @@ -1,13 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::takes_trait @@ -28,8 +36,9 @@ where // Full name: test_crate::IntoIterator trait IntoIterator { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Trait + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Trait } // Full name: test_crate::collect @@ -44,7 +53,7 @@ where storage_live(@2) @2 := move (it@1) - @0 := takes_trait[@TraitClause1::parent_clause0, @TraitClause1::parent_clause1](move (@2)) + @0 := takes_trait[@TraitClause1::parent_clause1, @TraitClause1::parent_clause2](move (@2)) storage_dead(@2) drop it@1 @0 := () diff --git a/charon/tests/ui/simple/assoc-ty-via-supertrait-and-bounds.out b/charon/tests/ui/simple/assoc-ty-via-supertrait-and-bounds.out index 6827660aa..d4ad1f49b 100644 --- a/charon/tests/ui/simple/assoc-ty-via-supertrait-and-bounds.out +++ b/charon/tests/ui/simple/assoc-ty-via-supertrait-and-bounds.out @@ -1,29 +1,40 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::HasOutput pub trait HasOutput { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::{impl HasOutput<()> for ()} impl HasOutput<()> for () { - parent_clause0 = Sized<()> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> } // Full name: test_crate::HasOutput2 -pub trait HasOutput2 +pub trait HasOutput2 { - parent_clause0 : [@TraitClause0]: HasOutput + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: HasOutput } // Full name: test_crate::{impl HasOutput2<()> for ()} impl HasOutput2<()> for () { - parent_clause0 = {impl HasOutput<()> for ()} + parent_clause0 = MetaSized<()> + parent_clause1 = {impl HasOutput<()> for ()} } // Full name: test_crate::Wrapper @@ -40,23 +51,25 @@ where [@TraitClause0]: Sized, [@TraitClause1]: HasOutput, { - parent_clause0 = @TraitClause1::parent_clause0 + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = @TraitClause1::parent_clause1 } -// Full name: test_crate::{impl HasOutput2 for Wrapper[@TraitClause0]} -impl HasOutput2 for Wrapper[@TraitClause0] +// Full name: test_crate::{impl HasOutput2 for Wrapper[@TraitClause0]} +impl HasOutput2 for Wrapper[@TraitClause0] where [@TraitClause0]: Sized, - [@TraitClause1]: HasOutput2, + [@TraitClause1]: HasOutput2, { - parent_clause0 = {impl HasOutput for Wrapper[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause0] + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = {impl HasOutput for Wrapper[@TraitClause0]}[@TraitClause0, @TraitClause1::parent_clause1] } // Full name: test_crate::take -fn take() +fn take() where [@TraitClause0]: Sized, - [@TraitClause1]: HasOutput2, + [@TraitClause1]: HasOutput2, { let @0: (); // return @@ -70,7 +83,7 @@ fn main() { let @0: (); // return - @0 := take[Sized<()>], ()>[Sized[Sized<()>]>, {impl HasOutput2 for Wrapper[@TraitClause0]}<(), ()>[Sized<()>, {impl HasOutput2<()> for ()}]]() + @0 := take[Sized<()>], ()>[Sized[Sized<()>]>, {impl HasOutput2 for Wrapper[@TraitClause0]}<(), ()>[Sized<()>, {impl HasOutput2<()> for ()}]]() @0 := () return } diff --git a/charon/tests/ui/simple/assoc-type-with-fn-bound.out b/charon/tests/ui/simple/assoc-type-with-fn-bound.out index 76f075c0b..aac4bf12b 100644 --- a/charon/tests/ui/simple/assoc-type-with-fn-bound.out +++ b/charon/tests/ui/simple/assoc-type-with-fn-bound.out @@ -1,51 +1,64 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized fn call_once = call_once[Self] } // Full name: core::ops::function::FnMut #[lang_item("fn_mut")] -pub trait FnMut +pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call_mut<'_0> = call_mut<'_0_0, Self, Args, Self_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call_mut<'_0> = call_mut<'_0_0, Self, Args, Self_Clause1_Output>[Self] } // Full name: core::ops::function::Fn #[lang_item("r#fn")] -pub trait Fn +pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause1_Clause1_Output>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause0_Clause0_Output +pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause1_Clause1_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause1_Clause1_Output where - [@TraitClause0]: Fn, + [@TraitClause0]: Fn, // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args, Clause0_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause0_Output +pub fn call_mut<'_0, Self, Args, Clause0_Clause1_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause1_Output where - [@TraitClause0]: FnMut, + [@TraitClause0]: FnMut, // Full name: core::ops::function::FnOnce::call_once pub fn call_once(@1: Self, @2: Args) -> Clause0_Output @@ -55,8 +68,9 @@ where // Full name: test_crate::Trait pub trait Trait { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Fn + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Fn fn call<'_0> = test_crate::Trait::call<'_0_0, Self, Self_Foo>[Self] } @@ -92,8 +106,9 @@ where [@TraitClause0]: Fn, [@TraitClause1]: Sized, { - parent_clause0 = @TraitClause1 - parent_clause1 = @TraitClause0 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1 + parent_clause2 = @TraitClause0 fn call<'_0> = {impl Trait for F}::call<'_0_0, F>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/simple/box-into-inner.out b/charon/tests/ui/simple/box-into-inner.out index 457dc37e9..c40cfdebb 100644 --- a/charon/tests/ui/simple/box-into-inner.out +++ b/charon/tests/ui/simple/box-into-inner.out @@ -1,13 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::drop::Drop #[lang_item("drop")] pub trait Drop { + parent_clause0 : [@TraitClause0]: MetaSized fn drop<'_0> = core::ops::drop::Drop::drop<'_0_0, Self>[Self] } @@ -27,17 +35,20 @@ pub opaque type Unique #[lang_item("global_alloc_ty")] pub struct Global {} -// Full name: alloc::boxed::{impl Drop for alloc::boxed::Box[@TraitClause0]}::drop -pub fn {impl Drop for alloc::boxed::Box[@TraitClause0]}::drop<'_0, T, A>(@1: &'_0 mut (alloc::boxed::Box[@TraitClause0])) +// Full name: alloc::boxed::{impl Drop for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::drop +pub fn {impl Drop for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::drop<'_0, T, A>(@1: &'_0 mut (alloc::boxed::Box[@TraitClause0, @TraitClause1])) where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, -// Full name: alloc::boxed::{impl Drop for alloc::boxed::Box[@TraitClause0]} -impl Drop for alloc::boxed::Box[@TraitClause0] +// Full name: alloc::boxed::{impl Drop for alloc::boxed::Box[@TraitClause0, @TraitClause1]} +impl Drop for alloc::boxed::Box[@TraitClause0, @TraitClause1] where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, { - fn drop<'_0> = {impl Drop for alloc::boxed::Box[@TraitClause0]}::drop<'_0_0, T, A>[@TraitClause0] + parent_clause0 = MetaSized[@TraitClause0, @TraitClause1]> + fn drop<'_0> = {impl Drop for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::drop<'_0_0, T, A>[@TraitClause0, @TraitClause1] } // Full name: alloc::string::String @@ -45,12 +56,12 @@ where pub opaque type String // Full name: test_crate::into_inner -fn into_inner(@1: alloc::boxed::Box[Sized]) +fn into_inner(@1: alloc::boxed::Box[MetaSized, Sized]) { let @0: (); // return - let b@1: alloc::boxed::Box[Sized]; // arg #1 + let b@1: alloc::boxed::Box[MetaSized, Sized]; // arg #1 let _x@2: String; // local - let @3: &'_ mut (alloc::boxed::Box[Sized]); // anonymous local + let @3: &'_ mut (alloc::boxed::Box[MetaSized, Sized]); // anonymous local let @4: (); // anonymous local let @5: *const String; // anonymous local let @6: *const String; // anonymous local @@ -89,7 +100,7 @@ fn into_inner(@1: alloc::boxed::Box[Sized]) storage_dead(_x@2) @5 := transmute, *const String>(copy ((*(b@1)).0)) @3 := &mut b@1 - @4 := {impl Drop for alloc::boxed::Box[@TraitClause0]}::drop<'_, String, Global>[Sized](move (@3)) + @4 := {impl Drop for alloc::boxed::Box[@TraitClause0, @TraitClause1]}::drop<'_, String, Global>[MetaSized, Sized](move (@3)) @0 := () return } diff --git a/charon/tests/ui/simple/box-new.out b/charon/tests/ui/simple/box-new.out index 90028b217..68175585e 100644 --- a/charon/tests/ui/simple/box-new.out +++ b/charon/tests/ui/simple/box-new.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: alloc::alloc::Global #[lang_item("global_alloc_ty")] @@ -12,7 +19,7 @@ pub struct Global {} fn main() { let @0: (); // return - let @1: alloc::boxed::Box[Sized]; // anonymous local + let @1: alloc::boxed::Box[MetaSized, Sized]; // anonymous local storage_live(@1) @1 := @BoxNew[Sized](const (42 : i32)) diff --git a/charon/tests/ui/simple/call-foreign-defaulted-method.out b/charon/tests/ui/simple/call-foreign-defaulted-method.out index 0eb6b28f8..559f4f7ae 100644 --- a/charon/tests/ui/simple/call-foreign-defaulted-method.out +++ b/charon/tests/ui/simple/call-foreign-defaulted-method.out @@ -1,5 +1,9 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + pub fn test_crate::foo::{impl Trait for ()}::defaulted<'_0>(@1: &'_0 (())) { let @0: (); // return @@ -35,6 +39,7 @@ fn main() // Full name: test_crate::foo::Trait pub trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized fn defaulted<'_0> = defaulted<'_0_0, Self>[Self] } @@ -53,6 +58,7 @@ where // Full name: test_crate::foo::{impl Trait for ()} impl Trait for () { + parent_clause0 = MetaSized<()> fn defaulted<'_0> = test_crate::foo::{impl Trait for ()}::defaulted<'_0_0> } diff --git a/charon/tests/ui/simple/call-inherent-method-with-trait-bound.out b/charon/tests/ui/simple/call-inherent-method-with-trait-bound.out index 0c71254fe..b3810ef43 100644 --- a/charon/tests/ui/simple/call-inherent-method-with-trait-bound.out +++ b/charon/tests/ui/simple/call-inherent-method-with-trait-bound.out @@ -1,18 +1,27 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait pub trait Trait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::{impl Trait<()> for ()} impl Trait<()> for () { - parent_clause0 = Sized<()> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> } // Full name: test_crate::HashMap diff --git a/charon/tests/ui/simple/call-method-via-supertrait-bound.out b/charon/tests/ui/simple/call-method-via-supertrait-bound.out index e9991eef0..2cd8978e7 100644 --- a/charon/tests/ui/simple/call-method-via-supertrait-bound.out +++ b/charon/tests/ui/simple/call-method-via-supertrait-bound.out @@ -1,21 +1,33 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::OtherTrait trait OtherTrait +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::ImpliesOtherTrait trait ImpliesOtherTrait { - parent_clause0 : [@TraitClause0]: OtherTrait + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: OtherTrait } // Full name: test_crate::HasMethod trait HasMethod { + parent_clause0 : [@TraitClause0]: MetaSized fn method<'_0> = test_crate::HasMethod::method<'_0_0, Self>[Self] } @@ -43,6 +55,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: OtherTrait, { + parent_clause0 = @TraitClause0::parent_clause0 fn method<'_0> = {impl HasMethod for T}::method<'_0_0, T>[@TraitClause0, @TraitClause1] } @@ -60,7 +73,7 @@ where storage_live(@2) storage_live(@3) @3 := &x@1 - @2 := {impl HasMethod for T}::method<'_, T>[@TraitClause0, @TraitClause1::parent_clause0](move (@3)) + @2 := {impl HasMethod for T}::method<'_, T>[@TraitClause0, @TraitClause1::parent_clause1](move (@3)) storage_dead(@3) storage_dead(@2) @0 := () diff --git a/charon/tests/ui/simple/closure-capture-ref-by-move.out b/charon/tests/ui/simple/closure-capture-ref-by-move.out index aad088f71..9571a036f 100644 --- a/charon/tests/ui/simple/closure-capture-ref-by-move.out +++ b/charon/tests/ui/simple/closure-capture-ref-by-move.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,13 +34,14 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -110,18 +122,20 @@ fn {impl FnOnce<()> for closure<'_0>}::call_once<'_0>(@1: closure<'_0>, @2: ()) // Full name: test_crate::foo::{impl FnOnce<()> for closure<'_0>} impl<'_0> FnOnce<()> for closure<'_0> { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized<()> type Output = () fn call_once = {impl FnOnce<()> for closure<'_0>}::call_once<'_0> } // Full name: test_crate::foo::{impl FnMut<()> for closure<'_0>} impl<'_0> FnMut<()> for closure<'_0> { - parent_clause0 = {impl FnOnce<()> for closure<'_0>}<'_0> - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnOnce<()> for closure<'_0>}<'_0> + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call_mut<'_0> = {impl FnMut<()> for closure<'_0>}::call_mut<'_0, '_0_0> } diff --git a/charon/tests/ui/simple/closure-fn.out b/charon/tests/ui/simple/closure-fn.out index 9ef644257..add5d715e 100644 --- a/charon/tests/ui/simple/closure-fn.out +++ b/charon/tests/ui/simple/closure-fn.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,17 +45,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -56,7 +69,7 @@ fn apply_to<'_0, impl Fn(u8, u8) -> u8>(@1: &'_0 (impl Fn(u8, u8) -> u8)) -> u8 where [@TraitClause0]: Sized u8>, [@TraitClause1]: Fn u8, (u8, u8)>, - @TraitClause1::parent_clause0::parent_clause0::Output = u8, + @TraitClause1::parent_clause1::parent_clause1::Output = u8, { let @0: u8; // return let f@1: &'_ (impl Fn(u8, u8) -> u8); // arg #1 @@ -78,7 +91,7 @@ fn apply_to_mut<'_0, impl FnMut(u8, u8) -> u8>(@1: &'_0 mut (impl FnMut(u8, u8) where [@TraitClause0]: Sized u8>, [@TraitClause1]: FnMut u8, (u8, u8)>, - @TraitClause1::parent_clause0::Output = u8, + @TraitClause1::parent_clause1::Output = u8, { let @0: u8; // return let f@1: &'_ mut (impl FnMut(u8, u8) -> u8); // arg #1 @@ -205,26 +218,29 @@ fn {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}::call_once<'_0, '_1>(@1: closur // Full name: test_crate::main::{impl FnOnce<(u8, u8)> for closure<'_0, '_1>} impl<'_0, '_1> FnOnce<(u8, u8)> for closure<'_0, '_1> { - parent_clause0 = Sized<(u8, u8)> - parent_clause1 = Tuple<(u8, u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8, u8)> + parent_clause1 = Sized<(u8, u8)> + parent_clause2 = Tuple<(u8, u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}::call_once<'_0, '_1> } // Full name: test_crate::main::{impl FnMut<(u8, u8)> for closure<'_0, '_1>} impl<'_0, '_1> FnMut<(u8, u8)> for closure<'_0, '_1> { - parent_clause0 = {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> - parent_clause1 = Sized<(u8, u8)> - parent_clause2 = Tuple<(u8, u8)> + parent_clause0 = MetaSized<(u8, u8)> + parent_clause1 = {impl FnOnce<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> + parent_clause2 = Sized<(u8, u8)> + parent_clause3 = Tuple<(u8, u8)> fn call_mut<'_0> = {impl FnMut<(u8, u8)> for closure<'_0, '_1>}::call_mut<'_0, '_1, '_0_0> } // Full name: test_crate::main::{impl Fn<(u8, u8)> for closure<'_0, '_1>} impl<'_0, '_1> Fn<(u8, u8)> for closure<'_0, '_1> { - parent_clause0 = {impl FnMut<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> - parent_clause1 = Sized<(u8, u8)> - parent_clause2 = Tuple<(u8, u8)> + parent_clause0 = MetaSized<(u8, u8)> + parent_clause1 = {impl FnMut<(u8, u8)> for closure<'_0, '_1>}<'_0, '_1> + parent_clause2 = Sized<(u8, u8)> + parent_clause3 = Tuple<(u8, u8)> fn call<'_0> = {impl Fn<(u8, u8)> for closure<'_0, '_1>}::call<'_0, '_1, '_0_0> } diff --git a/charon/tests/ui/simple/closure-fnmut.out b/charon/tests/ui/simple/closure-fnmut.out index 02d8651aa..9c455db44 100644 --- a/charon/tests/ui/simple/closure-fnmut.out +++ b/charon/tests/ui/simple/closure-fnmut.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,13 +34,14 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -42,7 +54,7 @@ fn apply_to_zero_mut u8>(@1: impl FnMut(u8) -> u8) -> u8 where [@TraitClause0]: Sized u8>, [@TraitClause1]: FnMut u8, (u8)>, - @TraitClause1::parent_clause0::Output = u8, + @TraitClause1::parent_clause1::Output = u8, { let @0: u8; // return let f@1: impl FnMut(u8) -> u8; // arg #1 @@ -111,18 +123,20 @@ fn {impl FnOnce<(u8)> for closure<'_0>}::call_once<'_0>(@1: closure<'_0>, @2: (u // Full name: test_crate::main::{impl FnOnce<(u8)> for closure<'_0>} impl<'_0> FnOnce<(u8)> for closure<'_0> { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8)> for closure<'_0>}::call_once<'_0> } // Full name: test_crate::main::{impl FnMut<(u8)> for closure<'_0>} impl<'_0> FnMut<(u8)> for closure<'_0> { - parent_clause0 = {impl FnOnce<(u8)> for closure<'_0>}<'_0> - parent_clause1 = Sized<(u8)> - parent_clause2 = Tuple<(u8)> + parent_clause0 = MetaSized<(u8)> + parent_clause1 = {impl FnOnce<(u8)> for closure<'_0>}<'_0> + parent_clause2 = Sized<(u8)> + parent_clause3 = Tuple<(u8)> fn call_mut<'_0> = {impl FnMut<(u8)> for closure<'_0>}::call_mut<'_0, '_0_0> } diff --git a/charon/tests/ui/simple/closure-fnonce.out b/charon/tests/ui/simple/closure-fnonce.out index 009b3f122..b3eb1c2f2 100644 --- a/charon/tests/ui/simple/closure-fnonce.out +++ b/charon/tests/ui/simple/closure-fnonce.out @@ -1,12 +1,22 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::mem::drop #[lang_item("mem_drop")] @@ -18,9 +28,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -91,9 +102,10 @@ fn {impl FnOnce<(u8)> for closure}::call_once(@1: closure, @2: (u8)) -> u8 // Full name: test_crate::main::{impl FnOnce<(u8)> for closure} impl FnOnce<(u8)> for closure { - parent_clause0 = Sized<(u8)> - parent_clause1 = Tuple<(u8)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u8)> + parent_clause1 = Sized<(u8)> + parent_clause2 = Tuple<(u8)> + parent_clause3 = Sized type Output = u8 fn call_once = {impl FnOnce<(u8)> for closure}::call_once } diff --git a/charon/tests/ui/simple/closure-inside-impl.out b/charon/tests/ui/simple/closure-inside-impl.out index a09cec026..56bebf929 100644 --- a/charon/tests/ui/simple/closure-inside-impl.out +++ b/charon/tests/ui/simple/closure-inside-impl.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,17 +45,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -144,9 +157,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, { - parent_clause0 = Sized<(())> - parent_clause1 = Tuple<(())> - parent_clause2 = Sized<()> + parent_clause0 = MetaSized<(())> + parent_clause1 = Sized<(())> + parent_clause2 = Tuple<(())> + parent_clause3 = Sized<()> type Output = () fn call_once = {impl FnOnce<(())> for closure[@TraitClause0, @TraitClause1]}::call_once[@TraitClause0, @TraitClause1] } @@ -157,9 +171,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, { - parent_clause0 = {impl FnOnce<(())> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(())> - parent_clause2 = Tuple<(())> + parent_clause0 = MetaSized<(())> + parent_clause1 = {impl FnOnce<(())> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(())> + parent_clause3 = Tuple<(())> fn call_mut<'_0> = {impl FnMut<(())> for closure[@TraitClause0, @TraitClause1]}::call_mut<'_0_0, F, T>[@TraitClause0, @TraitClause1] } @@ -169,9 +184,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, { - parent_clause0 = {impl FnMut<(())> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(())> - parent_clause2 = Tuple<(())> + parent_clause0 = MetaSized<(())> + parent_clause1 = {impl FnMut<(())> for closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(())> + parent_clause3 = Tuple<(())> fn call<'_0> = {impl Fn<(())> for closure[@TraitClause0, @TraitClause1]}::call<'_0_0, F, T>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/simple/fewer-clauses-in-method-impl.2.out b/charon/tests/ui/simple/fewer-clauses-in-method-impl.2.out index b21e6241e..1e5d3b859 100644 --- a/charon/tests/ui/simple/fewer-clauses-in-method-impl.2.out +++ b/charon/tests/ui/simple/fewer-clauses-in-method-impl.2.out @@ -1,6 +1,6 @@ error: Mismatched method generics: params: - supplied: [@TraitDecl1<()>] + supplied: [@TraitDecl2<()>] --> tests/ui/simple/fewer-clauses-in-method-impl.2.rs:14:5 | 14 | <() as Trait>::method() diff --git a/charon/tests/ui/simple/fewer-clauses-in-method-impl.out b/charon/tests/ui/simple/fewer-clauses-in-method-impl.out index c790b8faa..1608d2445 100644 --- a/charon/tests/ui/simple/fewer-clauses-in-method-impl.out +++ b/charon/tests/ui/simple/fewer-clauses-in-method-impl.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -22,12 +29,21 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: test_crate::Trait trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized fn method, [@TraitClause1]: Copy> = test_crate::Trait::method[Self, @TraitClause0_0, @TraitClause0_1] } @@ -52,6 +68,7 @@ where // Full name: test_crate::{impl Trait for ()} impl Trait for () { + parent_clause0 = MetaSized<()> fn method, [@TraitClause1]: Clone> = {impl Trait for ()}::method[@TraitClause0_0, @TraitClause0_1] } diff --git a/charon/tests/ui/simple/gat-default.out b/charon/tests/ui/simple/gat-default.out index ab12890ed..8b347988d 100644 --- a/charon/tests/ui/simple/gat-default.out +++ b/charon/tests/ui/simple/gat-default.out @@ -1,5 +1,5 @@ -thread 'rustc' panicked at /rustc/283db70ace62a0ae704a624e43b68c2ee44b87a6/compiler/rustc_type_ir/src/binder.rs:745:9: +thread 'rustc' panicked at /rustc-dev/35f6036521777bdc0dcea1f980be4c192962a168/compiler/rustc_type_ir/src/binder.rs:764:9: type parameter `U/#1` (U/#1/1) out of range when instantiating, args=[()] note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace error: Hax panicked when translating `test_crate::{impl#0}`. @@ -21,7 +21,7 @@ error: Item `test_crate::Collection` caused errors; ignoring. | ^^^^^^^^^^^^^^^^ -thread 'rustc' panicked at /rustc/283db70ace62a0ae704a624e43b68c2ee44b87a6/compiler/rustc_type_ir/src/binder.rs:745:9: +thread 'rustc' panicked at /rustc-dev/35f6036521777bdc0dcea1f980be4c192962a168/compiler/rustc_type_ir/src/binder.rs:764:9: type parameter `U/#1` (U/#1/1) out of range when instantiating, args=[()] error: Hax panicked when translating `test_crate::{impl#0}`. --> tests/ui/simple/gat-default.rs:9:1 diff --git a/charon/tests/ui/simple/generic-impl-with-defaulted-method-with-clause-with-assoc-ty.out b/charon/tests/ui/simple/generic-impl-with-defaulted-method-with-clause-with-assoc-ty.out index 013e10e58..4d24e6820 100644 --- a/charon/tests/ui/simple/generic-impl-with-defaulted-method-with-clause-with-assoc-ty.out +++ b/charon/tests/ui/simple/generic-impl-with-defaulted-method-with-clause-with-assoc-ty.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -17,12 +24,14 @@ where // Full name: test_crate::HasType trait HasType { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::HasMethod trait HasMethod { + parent_clause0 : [@TraitClause0]: MetaSized fn method> = method[Self, @TraitClause0_0] } @@ -56,6 +65,7 @@ impl HasMethod for Option[@TraitClause0] where [@TraitClause0]: Sized, { + parent_clause0 = MetaSized[@TraitClause0]> fn method[@TraitClause0], Clause0_Type>> = test_crate::{impl HasMethod for Option[@TraitClause0]}::method[@TraitClause0, @TraitClause0_0] } diff --git a/charon/tests/ui/simple/generic-impl-with-defaulted-method.out b/charon/tests/ui/simple/generic-impl-with-defaulted-method.out index c2a1b6e5f..aea0752d8 100644 --- a/charon/tests/ui/simple/generic-impl-with-defaulted-method.out +++ b/charon/tests/ui/simple/generic-impl-with-defaulted-method.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -17,6 +24,7 @@ where // Full name: test_crate::BoolTrait pub trait BoolTrait { + parent_clause0 : [@TraitClause0]: MetaSized fn foo<'_0> = foo<'_0_0, Self>[Self] } @@ -50,6 +58,7 @@ impl BoolTrait for Option[@TraitClause0] where [@TraitClause0]: Sized, { + parent_clause0 = MetaSized[@TraitClause0]> fn foo<'_0> = test_crate::{impl BoolTrait for Option[@TraitClause0]}::foo<'_0_0, T>[@TraitClause0] } diff --git a/charon/tests/ui/simple/generic-impl-with-method.out b/charon/tests/ui/simple/generic-impl-with-method.out index 6f2bafab1..56555c556 100644 --- a/charon/tests/ui/simple/generic-impl-with-method.out +++ b/charon/tests/ui/simple/generic-impl-with-method.out @@ -1,12 +1,20 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait pub trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized fn method<'_0> = test_crate::Trait::method<'_0_0, Self>[Self] } @@ -32,6 +40,7 @@ impl Trait for T where [@TraitClause0]: Sized, { + parent_clause0 = @TraitClause0::parent_clause0 fn method<'_0> = {impl Trait for T}::method<'_0_0, T>[@TraitClause0] } diff --git a/charon/tests/ui/simple/mem-discriminant-from-derive.out b/charon/tests/ui/simple/mem-discriminant-from-derive.out index 1245a8060..0a6a9abb9 100644 --- a/charon/tests/ui/simple/mem-discriminant-from-derive.out +++ b/charon/tests/ui/simple/mem-discriminant-from-derive.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -93,6 +100,7 @@ where // Full name: core::hash::Hasher pub trait Hasher { + parent_clause0 : [@TraitClause0]: MetaSized fn finish<'_0> = finish<'_0_0, Self>[Self] fn write<'_0, '_1> = write<'_0_0, '_0_1, Self>[Self] } @@ -125,7 +133,8 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::marker::Send @@ -144,16 +153,17 @@ pub trait Unpin #[lang_item("discriminant_kind")] pub trait DiscriminantKind { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Clone - parent_clause2 : [@TraitClause2]: Copy - parent_clause3 : [@TraitClause3]: Debug - parent_clause4 : [@TraitClause4]: Eq - parent_clause5 : [@TraitClause5]: PartialEq - parent_clause6 : [@TraitClause6]: Hash - parent_clause7 : [@TraitClause7]: Send - parent_clause8 : [@TraitClause8]: Sync - parent_clause9 : [@TraitClause9]: Unpin + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Clone + parent_clause3 : [@TraitClause3]: Copy + parent_clause4 : [@TraitClause4]: Debug + parent_clause5 : [@TraitClause5]: Eq + parent_clause6 : [@TraitClause6]: PartialEq + parent_clause7 : [@TraitClause7]: Hash + parent_clause8 : [@TraitClause8]: Send + parent_clause9 : [@TraitClause9]: Sync + parent_clause10 : [@TraitClause10]: Unpin type Discriminant } @@ -165,6 +175,16 @@ where // Full name: core::marker::StructuralPartialEq #[lang_item("structural_peq")] pub trait StructuralPartialEq +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Enum enum Enum { @@ -173,7 +193,9 @@ enum Enum { } // Full name: test_crate::{impl StructuralPartialEq for Enum} -impl StructuralPartialEq for Enum {} +impl StructuralPartialEq for Enum { + parent_clause0 = MetaSized +} // Full name: test_crate::{impl PartialEq for Enum}::eq pub fn {impl PartialEq for Enum}::eq<'_0, '_1>(@1: &'_0 (Enum), @2: &'_1 (Enum)) -> bool diff --git a/charon/tests/ui/simple/method-with-assoc-type-constraint.out b/charon/tests/ui/simple/method-with-assoc-type-constraint.out index 93944c2f4..af3bf1b14 100644 --- a/charon/tests/ui/simple/method-with-assoc-type-constraint.out +++ b/charon/tests/ui/simple/method-with-assoc-type-constraint.out @@ -1,13 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::IntoIterator pub trait IntoIterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::FromIterator diff --git a/charon/tests/ui/simple/multiple-promoteds.out b/charon/tests/ui/simple/multiple-promoteds.out index 17548c7a8..5e96f38f8 100644 --- a/charon/tests/ui/simple/multiple-promoteds.out +++ b/charon/tests/ui/simple/multiple-promoteds.out @@ -1,15 +1,23 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::arith::Add #[lang_item("add")] pub trait Add { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized type Output fn add = core::ops::arith::Add::add[Self] } @@ -19,8 +27,9 @@ pub fn {impl Add<&'_0 (u32)> for &'_1 (u32)}::add<'_0, '_1>(@1: &'_1 (u32), @2: // Full name: core::ops::arith::{impl Add<&'_0 (u32)> for &'_1 (u32)} impl<'_0, '_1> Add<&'_0 (u32)> for &'_1 (u32) { - parent_clause0 = Sized<&'_ (u32)> - parent_clause1 = Sized + parent_clause0 = MetaSized<&'_ (u32)> + parent_clause1 = Sized<&'_ (u32)> + parent_clause2 = Sized type Output = u32 fn add = {impl Add<&'_0 (u32)> for &'_1 (u32)}::add<'_0, '_1> } @@ -35,8 +44,9 @@ pub fn {impl Add for u32}::add(@1: u32, @2: u32) -> u32 // Full name: core::ops::arith::{impl Add for u32} impl Add for u32 { - parent_clause0 = Sized + parent_clause0 = MetaSized parent_clause1 = Sized + parent_clause2 = Sized type Output = u32 fn add = {impl Add for u32}::add } diff --git a/charon/tests/ui/simple/nested-closure-trait-ref.out b/charon/tests/ui/simple/nested-closure-trait-ref.out index 88c9d8cfc..446e7951f 100644 --- a/charon/tests/ui/simple/nested-closure-trait-ref.out +++ b/charon/tests/ui/simple/nested-closure-trait-ref.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -18,17 +25,28 @@ pub fn clone<'_0, Self>(@1: &'_0 (Self)) -> Self where [@TraitClause0]: Clone, +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -37,9 +55,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -47,17 +66,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -126,9 +146,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized[@TraitClause0, @TraitClause1]> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized[@TraitClause0, @TraitClause1]> type Output = test_crate::foo::closure::closure[@TraitClause0, @TraitClause1] fn call_once = {impl FnOnce<()> for test_crate::foo::closure[@TraitClause0, @TraitClause1]}::call_once[@TraitClause0, @TraitClause1] } @@ -192,9 +213,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized type Output = T fn call_once = {impl FnOnce<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}::call_once[@TraitClause0, @TraitClause1] } @@ -205,9 +227,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnOnce<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnOnce<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call_mut<'_0> = {impl FnMut<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}::call_mut<'_0_0, T>[@TraitClause0, @TraitClause1] } @@ -217,9 +240,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnMut<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnMut<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call<'_0> = {impl Fn<()> for test_crate::foo::closure::closure[@TraitClause0, @TraitClause1]}::call<'_0_0, T>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/simple/nested-closure.out b/charon/tests/ui/simple/nested-closure.out index 08b281b99..b6fa26d88 100644 --- a/charon/tests/ui/simple/nested-closure.out +++ b/charon/tests/ui/simple/nested-closure.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -18,17 +25,28 @@ pub fn clone<'_0, Self>(@1: &'_0 (Self)) -> Self where [@TraitClause0]: Clone, +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -37,9 +55,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -47,17 +66,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -276,9 +296,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized<()> - parent_clause1 = Tuple<()> - parent_clause2 = Sized[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_, T>[@TraitClause0, @TraitClause1]> + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = Tuple<()> + parent_clause3 = Sized[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_, T>[@TraitClause0, @TraitClause1]> type Output = test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_, T>[@TraitClause0, @TraitClause1] fn call_once = {impl FnOnce<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call_once<'a, '_1, T>[@TraitClause0, @TraitClause1] } @@ -289,9 +310,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnOnce<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnOnce<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call_mut<'_0> = {impl FnMut<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call_mut<'a, '_1, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -301,9 +323,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnMut<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<()> - parent_clause2 = Tuple<()> + parent_clause0 = MetaSized<()> + parent_clause1 = {impl FnMut<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<()> + parent_clause3 = Tuple<()> fn call<'_0> = {impl Fn<()> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call<'a, '_1, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -348,9 +371,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized<(&'_ (u32))> - parent_clause1 = Tuple<(&'_ (u32))> - parent_clause2 = Sized[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_, T>[@TraitClause0, @TraitClause1]> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = Sized<(&'_ (u32))> + parent_clause2 = Tuple<(&'_ (u32))> + parent_clause3 = Sized[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_, T>[@TraitClause0, @TraitClause1]> type Output = test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_, T>[@TraitClause0, @TraitClause1] fn call_once = {impl FnOnce<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call_once<'a, '_1, '_2, T>[@TraitClause0, @TraitClause1] } @@ -361,9 +385,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnOnce<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(&'_ (u32))> - parent_clause2 = Tuple<(&'_ (u32))> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = {impl FnOnce<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(&'_ (u32))> + parent_clause3 = Tuple<(&'_ (u32))> fn call_mut<'_0> = {impl FnMut<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call_mut<'a, '_1, '_2, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -373,9 +398,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnMut<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(&'_ (u32))> - parent_clause2 = Tuple<(&'_ (u32))> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = {impl FnMut<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(&'_ (u32))> + parent_clause3 = Tuple<(&'_ (u32))> fn call<'_0> = {impl Fn<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call<'a, '_1, '_2, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -420,9 +446,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized<(&'_ (u32))> - parent_clause1 = Tuple<(&'_ (u32))> - parent_clause2 = Sized + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = Sized<(&'_ (u32))> + parent_clause2 = Tuple<(&'_ (u32))> + parent_clause3 = Sized type Output = T fn call_once = {impl FnOnce<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call_once<'a, '_1, '_2, T>[@TraitClause0, @TraitClause1] } @@ -433,9 +460,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnOnce<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(&'_ (u32))> - parent_clause2 = Tuple<(&'_ (u32))> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = {impl FnOnce<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(&'_ (u32))> + parent_clause3 = Tuple<(&'_ (u32))> fn call_mut<'_0> = {impl FnMut<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call_mut<'a, '_1, '_2, '_0_0, T>[@TraitClause0, @TraitClause1] } @@ -445,9 +473,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = {impl FnMut<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] - parent_clause1 = Sized<(&'_ (u32))> - parent_clause2 = Tuple<(&'_ (u32))> + parent_clause0 = MetaSized<(&'_ (u32))> + parent_clause1 = {impl FnMut<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}<'_, '_1, '_2, T>[@TraitClause0, @TraitClause1] + parent_clause2 = Sized<(&'_ (u32))> + parent_clause3 = Tuple<(&'_ (u32))> fn call<'_0> = {impl Fn<(&'_ (u32))> for test_crate::{Foo<'a, T>[@TraitClause0]}::test_nested_closures::closure::closure::closure<'_, '_1, T>[@TraitClause0, @TraitClause1]}::call<'a, '_1, '_2, '_0_0, T>[@TraitClause0, @TraitClause1] } diff --git a/charon/tests/ui/simple/opaque-trait-with-clause-in-method.out b/charon/tests/ui/simple/opaque-trait-with-clause-in-method.out index cc090080b..369a68641 100644 --- a/charon/tests/ui/simple/opaque-trait-with-clause-in-method.out +++ b/charon/tests/ui/simple/opaque-trait-with-clause-in-method.out @@ -1,14 +1,27 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::opaque::Product pub trait Product +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::opaque::Iterator pub trait Iterator +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::foo fn foo() diff --git a/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out b/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out index 01b5768e2..b6e5967cf 100644 --- a/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out +++ b/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out @@ -1,51 +1,64 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized fn call_once = call_once[Self] } // Full name: core::ops::function::FnMut #[lang_item("fn_mut")] -pub trait FnMut +pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call_mut<'_0> = call_mut<'_0_0, Self, Args, Self_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call_mut<'_0> = call_mut<'_0_0, Self, Args, Self_Clause1_Output>[Self] } // Full name: core::ops::function::Fn #[lang_item("r#fn")] -pub trait Fn +pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output>[Self] + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause1_Clause1_Output>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause0_Clause0_Output +pub fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause1_Clause1_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause1_Clause1_Output where - [@TraitClause0]: Fn, + [@TraitClause0]: Fn, // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args, Clause0_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause0_Output +pub fn call_mut<'_0, Self, Args, Clause0_Clause1_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause1_Output where - [@TraitClause0]: FnMut, + [@TraitClause0]: FnMut, // Full name: core::ops::function::FnOnce::call_once pub fn call_once(@1: Self, @2: Args) -> Clause0_Output diff --git a/charon/tests/ui/simple/pointee_metadata.out b/charon/tests/ui/simple/pointee_metadata.out index 48affe20e..933e73bff 100644 --- a/charon/tests/ui/simple/pointee_metadata.out +++ b/charon/tests/ui/simple/pointee_metadata.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -120,6 +127,7 @@ where // Full name: core::hash::Hasher pub trait Hasher { + parent_clause0 : [@TraitClause0]: MetaSized fn finish<'_0> = finish<'_0_0, Self>[Self] fn write<'_0, '_1> = write<'_0_0, '_0_1, Self>[Self] } @@ -156,7 +164,8 @@ pub trait Send #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::marker::Sync @@ -171,6 +180,13 @@ pub trait Freeze #[lang_item("unpin")] pub trait Unpin +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::ptr::metadata::Pointee #[lang_item("pointee_trait")] pub trait Pointee diff --git a/charon/tests/ui/simple/promoted-closure-no-warns.out b/charon/tests/ui/simple/promoted-closure-no-warns.out index ba272bf5a..b958409f7 100644 --- a/charon/tests/ui/simple/promoted-closure-no-warns.out +++ b/charon/tests/ui/simple/promoted-closure-no-warns.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,17 +45,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -125,26 +138,29 @@ fn {impl FnOnce<(u32)> for closure}::call_once(@1: closure, @2: (u32)) -> u32 // Full name: test_crate::foo::{impl FnOnce<(u32)> for closure} impl FnOnce<(u32)> for closure { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized type Output = u32 fn call_once = {impl FnOnce<(u32)> for closure}::call_once } // Full name: test_crate::foo::{impl FnMut<(u32)> for closure} impl FnMut<(u32)> for closure { - parent_clause0 = {impl FnOnce<(u32)> for closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnOnce<(u32)> for closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call_mut<'_0> = {impl FnMut<(u32)> for closure}::call_mut<'_0_0> } // Full name: test_crate::foo::{impl Fn<(u32)> for closure} impl Fn<(u32)> for closure { - parent_clause0 = {impl FnMut<(u32)> for closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnMut<(u32)> for closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call<'_0> = {impl Fn<(u32)> for closure}::call<'_0_0> } diff --git a/charon/tests/ui/simple/promoted-closure.out b/charon/tests/ui/simple/promoted-closure.out index ba272bf5a..b958409f7 100644 --- a/charon/tests/ui/simple/promoted-closure.out +++ b/charon/tests/ui/simple/promoted-closure.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,17 +45,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -125,26 +138,29 @@ fn {impl FnOnce<(u32)> for closure}::call_once(@1: closure, @2: (u32)) -> u32 // Full name: test_crate::foo::{impl FnOnce<(u32)> for closure} impl FnOnce<(u32)> for closure { - parent_clause0 = Sized<(u32)> - parent_clause1 = Tuple<(u32)> - parent_clause2 = Sized + parent_clause0 = MetaSized<(u32)> + parent_clause1 = Sized<(u32)> + parent_clause2 = Tuple<(u32)> + parent_clause3 = Sized type Output = u32 fn call_once = {impl FnOnce<(u32)> for closure}::call_once } // Full name: test_crate::foo::{impl FnMut<(u32)> for closure} impl FnMut<(u32)> for closure { - parent_clause0 = {impl FnOnce<(u32)> for closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnOnce<(u32)> for closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call_mut<'_0> = {impl FnMut<(u32)> for closure}::call_mut<'_0_0> } // Full name: test_crate::foo::{impl Fn<(u32)> for closure} impl Fn<(u32)> for closure { - parent_clause0 = {impl FnMut<(u32)> for closure} - parent_clause1 = Sized<(u32)> - parent_clause2 = Tuple<(u32)> + parent_clause0 = MetaSized<(u32)> + parent_clause1 = {impl FnMut<(u32)> for closure} + parent_clause2 = Sized<(u32)> + parent_clause3 = Tuple<(u32)> fn call<'_0> = {impl Fn<(u32)> for closure}::call<'_0_0> } diff --git a/charon/tests/ui/simple/promoted-in-generic-fn.out b/charon/tests/ui/simple/promoted-in-generic-fn.out index c2f5559db..f4919db4b 100644 --- a/charon/tests/ui/simple/promoted-in-generic-fn.out +++ b/charon/tests/ui/simple/promoted-in-generic-fn.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::mem::size_of #[lang_item("mem_size_of")] diff --git a/charon/tests/ui/simple/promoted-inside-impl.out b/charon/tests/ui/simple/promoted-inside-impl.out index 39e164305..e5b62ea96 100644 --- a/charon/tests/ui/simple/promoted-inside-impl.out +++ b/charon/tests/ui/simple/promoted-inside-impl.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Foo pub struct Foo diff --git a/charon/tests/ui/simple/ptr-from-raw-parts.out b/charon/tests/ui/simple/ptr-from-raw-parts.out index 0d3bebbe2..6335d07b8 100644 --- a/charon/tests/ui/simple/ptr-from-raw-parts.out +++ b/charon/tests/ui/simple/ptr-from-raw-parts.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ptr::metadata::from_raw_parts pub fn from_raw_parts(@1: *const impl Thin, @2: Pointee::Metadata) -> *const T diff --git a/charon/tests/ui/simple/ptr_metadata.out b/charon/tests/ui/simple/ptr_metadata.out index 0dae7e838..e3e3979eb 100644 --- a/charon/tests/ui/simple/ptr_metadata.out +++ b/charon/tests/ui/simple/ptr_metadata.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -120,6 +127,7 @@ where // Full name: core::hash::Hasher pub trait Hasher { + parent_clause0 : [@TraitClause0]: MetaSized fn finish<'_0> = finish<'_0_0, Self>[Self] fn write<'_0, '_1> = write<'_0_0, '_0_1, Self>[Self] } @@ -156,7 +164,8 @@ pub trait Send #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::marker::Sync @@ -171,6 +180,13 @@ pub trait Freeze #[lang_item("unpin")] pub trait Unpin +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::ptr::metadata::Pointee #[lang_item("pointee_trait")] pub trait Pointee diff --git a/charon/tests/ui/simple/quantified-trait-type-constraint.out b/charon/tests/ui/simple/quantified-trait-type-constraint.out index ae8b976c3..1a8156324 100644 --- a/charon/tests/ui/simple/quantified-trait-type-constraint.out +++ b/charon/tests/ui/simple/quantified-trait-type-constraint.out @@ -1,13 +1,21 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait<'a, Self, Self_Type> { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::foo diff --git a/charon/tests/ui/simple/slice_index_range.out b/charon/tests/ui/simple/slice_index_range.out index b2d2894e9..8aee706a7 100644 --- a/charon/tests/ui/simple/slice_index_range.out +++ b/charon/tests/ui/simple/slice_index_range.out @@ -20,9 +20,16 @@ where buf: &'a mut (dyn (exists(TODO))), } +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::option::Option #[lang_item("Option")] @@ -150,6 +157,9 @@ pub const core::num::{usize}::MAX: usize = core::num::{usize}::MAX() #[lang_item("index")] pub trait Index { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized + parent_clause2 : [@TraitClause2]: MetaSized type Output fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } @@ -232,43 +242,20 @@ pub fn panic_nounwind_fmt<'_0>(@1: Arguments<'_0>, @2: bool) -> ! @0 := compiletime<'_>(move ((@3).0), move ((@3).1)) } -// Full name: core::panicking::panic_nounwind -#[lang_item("panic_nounwind")] -pub fn panic_nounwind(@1: &'static (Str)) -> ! -{ - let @0: !; // return - let expr@1: &'_ (Str); // arg #1 - let @2: !; // anonymous local - let @3: Arguments<'_>; // anonymous local - let @4: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @5: &'_ (Array<&'_ (Str), 1 : usize>); // anonymous local - let @6: Array<&'_ (Str), 1 : usize>; // anonymous local - let @7: &'_ (Str); // anonymous local - - storage_live(@2) - storage_live(@3) - storage_live(@4) - storage_live(@5) - storage_live(@6) - storage_live(@7) - @7 := copy (expr@1) - @6 := [move (@7)] - storage_dead(@7) - @5 := &@6 - @4 := &*(@5) - @3 := new_const<'_, 1 : usize>(move (@4)) - storage_dead(@4) - @2 := panic_nounwind_fmt<'_>(move (@3), const (false)) -} - // Full name: core::slice::index::private_slice_index::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::slice::index::SliceIndex #[lang_item("SliceIndex")] pub trait SliceIndex { - parent_clause0 : [@TraitClause0]: Sealed + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sealed + parent_clause2 : [@TraitClause2]: MetaSized + parent_clause3 : [@TraitClause3]: MetaSized type Output fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T>[Self] fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T>[Self] @@ -304,6 +291,9 @@ where [@TraitClause1]: Sized, [@TraitClause2]: SliceIndex>, { + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause2::parent_clause3 type Output = @TraitClause2::Output fn index<'_0> = {impl Index for Slice}::index<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } @@ -368,10 +358,14 @@ fn slice_end_index_overflow_fail() -> ! } // Full name: core::slice::index::private_slice_index::{impl Sealed for Range[Sized]} -impl Sealed for Range[Sized] {} +impl Sealed for Range[Sized] { + parent_clause0 = MetaSized[Sized]> +} // Full name: core::slice::index::private_slice_index::{impl Sealed for RangeInclusive[Sized]} -impl Sealed for RangeInclusive[Sized] {} +impl Sealed for RangeInclusive[Sized] { + parent_clause0 = MetaSized[Sized]> +} pub fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> Option<&'_0 (@TraitClause0::Output)>[Sized<&'_0 (@TraitClause0::Output)>] where @@ -456,10 +450,10 @@ where @11 := &raw const *(slice@2) storage_live(@14) storage_live(@15) - @15 := cast<*const Slice, *const T>(copy (@11)) - @14 := copy (@15) offset copy (rhs@5) + @14 := cast<*const Slice, *const T>(copy (@11)) + @15 := copy (@14) offset copy (rhs@5) + @10 := @PtrFromPartsShared<'_, Slice>(copy (@15), copy (new_len@6)) storage_dead(@15) - @10 := @PtrFromPartsShared<'_, Slice>(copy (@14), copy (new_len@6)) storage_dead(@14) storage_dead(@11) @9 := &*(@10) @@ -541,10 +535,10 @@ where ptr@11 := &raw mut *(slice@2) storage_live(@14) storage_live(@15) - @15 := cast<*mut Slice, *mut T>(copy (ptr@11)) - @14 := copy (@15) offset copy (rhs@5) + @14 := cast<*mut Slice, *mut T>(copy (ptr@11)) + @15 := copy (@14) offset copy (rhs@5) + @10 := @PtrFromPartsMut<'_, Slice>(copy (@15), copy (new_len@6)) storage_dead(@15) - @10 := @PtrFromPartsMut<'_, Slice>(copy (@14), copy (new_len@6)) storage_dead(@14) storage_dead(ptr@11) @9 := &mut *(@10) @@ -573,9 +567,19 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked::pr let @4: bool; // anonymous local let @5: bool; // anonymous local let @6: !; // anonymous local + let @7: Arguments<'_>; // anonymous local + let pieces@8: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @9: Array<&'_ (Str), 1 : usize>; // anonymous local + let @10: &'_ (Slice<&'_ (Str)>); // anonymous local + let @11: &'_ (Slice>); // anonymous local + let @12: &'_ (Array, 0 : usize>); // anonymous local + let @13: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@5) storage_live(@6) + storage_live(pieces@8) + storage_live(@12) + storage_live(@13) storage_live(@4) @4 := copy (end@2) >= copy (start@1) if move (@4) { @@ -592,7 +596,20 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked::pr } else { } - @6 := panic_nounwind(const ("unsafe precondition(s) violated: slice::get_unchecked requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@7) + storage_live(@9) + @9 := [const ("unsafe precondition(s) violated: slice::get_unchecked requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@8 := &@9 + storage_live(@10) + @10 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@8)) + storage_live(@11) + @12 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @11 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@12)) + @13 := Option::None { } + @7 := Arguments { pieces: move (@10), fmt: move (@13), args: move (@11) } + storage_dead(@11) + storage_dead(@10) + @6 := panic_nounwind_fmt<'_>(move (@7), const (false)) } // Full name: core::slice::index::{impl SliceIndex> for Range[Sized]}::get_unchecked @@ -644,10 +661,10 @@ where storage_dead(@9) storage_live(@11) storage_live(@12) - @12 := cast<*const Slice, *const T>(copy (slice@2)) - @11 := copy (@12) offset copy (offset@10) + @11 := cast<*const Slice, *const T>(copy (slice@2)) + @12 := copy (@11) offset copy (offset@10) + @0 := @PtrFromPartsShared<'_, Slice>(copy (@12), copy (new_len@8)) storage_dead(@12) - @0 := @PtrFromPartsShared<'_, Slice>(copy (@11), copy (new_len@8)) storage_dead(@11) return } @@ -662,9 +679,19 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked_mut let @4: bool; // anonymous local let @5: bool; // anonymous local let @6: !; // anonymous local + let @7: Arguments<'_>; // anonymous local + let pieces@8: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @9: Array<&'_ (Str), 1 : usize>; // anonymous local + let @10: &'_ (Slice<&'_ (Str)>); // anonymous local + let @11: &'_ (Slice>); // anonymous local + let @12: &'_ (Array, 0 : usize>); // anonymous local + let @13: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@5) storage_live(@6) + storage_live(pieces@8) + storage_live(@12) + storage_live(@13) storage_live(@4) @4 := copy (end@2) >= copy (start@1) if move (@4) { @@ -681,7 +708,20 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked_mut } else { } - @6 := panic_nounwind(const ("unsafe precondition(s) violated: slice::get_unchecked_mut requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@7) + storage_live(@9) + @9 := [const ("unsafe precondition(s) violated: slice::get_unchecked_mut requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@8 := &@9 + storage_live(@10) + @10 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@8)) + storage_live(@11) + @12 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @11 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@12)) + @13 := Option::None { } + @7 := Arguments { pieces: move (@10), fmt: move (@13), args: move (@11) } + storage_dead(@11) + storage_dead(@10) + @6 := panic_nounwind_fmt<'_>(move (@7), const (false)) } // Full name: core::slice::index::{impl SliceIndex> for Range[Sized]}::get_unchecked_mut @@ -733,10 +773,10 @@ where storage_dead(@9) storage_live(@11) storage_live(@12) - @12 := cast<*mut Slice, *mut T>(copy (slice@2)) - @11 := copy (@12) offset copy (offset@10) + @11 := cast<*mut Slice, *mut T>(copy (slice@2)) + @12 := copy (@11) offset copy (offset@10) + @0 := @PtrFromPartsMut<'_, Slice>(copy (@12), copy (new_len@8)) storage_dead(@12) - @0 := @PtrFromPartsMut<'_, Slice>(copy (@11), copy (new_len@8)) storage_dead(@11) return } @@ -803,10 +843,10 @@ where @12 := &raw const *(slice@2) storage_live(@15) storage_live(@16) - @16 := cast<*const Slice, *const T>(copy (@12)) - @15 := copy (@16) offset copy (rhs@7) + @15 := cast<*const Slice, *const T>(copy (@12)) + @16 := copy (@15) offset copy (rhs@7) + @11 := @PtrFromPartsShared<'_, Slice>(copy (@16), copy (new_len@4)) storage_dead(@16) - @11 := @PtrFromPartsShared<'_, Slice>(copy (@15), copy (new_len@4)) storage_dead(@15) storage_dead(@12) @0 := &*(@11) @@ -882,10 +922,10 @@ where ptr@12 := &raw mut *(slice@2) storage_live(@15) storage_live(@16) - @16 := cast<*mut Slice, *mut T>(copy (ptr@12)) - @15 := copy (@16) offset copy (rhs@7) + @15 := cast<*mut Slice, *mut T>(copy (ptr@12)) + @16 := copy (@15) offset copy (rhs@7) + @11 := @PtrFromPartsMut<'_, Slice>(copy (@16), copy (new_len@4)) storage_dead(@16) - @11 := @PtrFromPartsMut<'_, Slice>(copy (@15), copy (new_len@4)) storage_dead(@15) storage_dead(ptr@12) @0 := &mut *(@11) @@ -904,7 +944,10 @@ impl SliceIndex> for Range[Sized] where [@TraitClause0]: Sized, { - parent_clause0 = {impl Sealed for Range[Sized]} + parent_clause0 = MetaSized[Sized]> + parent_clause1 = {impl Sealed for Range[Sized]} + parent_clause2 = MetaSized> + parent_clause3 = MetaSized> type Output = Slice fn get<'_0> = {impl SliceIndex> for Range[Sized]}::get<'_0_0, T>[@TraitClause0] fn get_mut<'_0> = {impl SliceIndex> for Range[Sized]}::get_mut<'_0_0, T>[@TraitClause0] @@ -1011,10 +1054,10 @@ where @13 := &raw const *(slice@2) storage_live(@16) storage_live(@17) - @17 := cast<*const Slice, *const T>(copy (@13)) - @16 := copy (@17) offset copy (self@8) + @16 := cast<*const Slice, *const T>(copy (@13)) + @17 := copy (@16) offset copy (self@8) + @12 := @PtrFromPartsShared<'_, Slice>(copy (@17), copy (new_len@15)) storage_dead(@17) - @12 := @PtrFromPartsShared<'_, Slice>(copy (@16), copy (new_len@15)) storage_dead(@16) storage_dead(@13) @11 := &*(@12) @@ -1131,10 +1174,10 @@ where ptr@13 := &raw mut *(slice@2) storage_live(@16) storage_live(@17) - @17 := cast<*mut Slice, *mut T>(copy (ptr@13)) - @16 := copy (@17) offset copy (self@8) + @16 := cast<*mut Slice, *mut T>(copy (ptr@13)) + @17 := copy (@16) offset copy (self@8) + @12 := @PtrFromPartsMut<'_, Slice>(copy (@17), copy (new_len@15)) storage_dead(@17) - @12 := @PtrFromPartsMut<'_, Slice>(copy (@16), copy (new_len@15)) storage_dead(@16) storage_dead(ptr@13) @11 := &mut *(@12) @@ -1211,10 +1254,10 @@ where new_len@9 := copy (exclusive_end@3) wrapping.- copy (self@5) storage_live(@10) storage_live(@11) - @11 := cast<*const Slice, *const T>(copy (slice@2)) - @10 := copy (@11) offset copy (self@5) + @10 := cast<*const Slice, *const T>(copy (slice@2)) + @11 := copy (@10) offset copy (self@5) + @0 := @PtrFromPartsShared<'_, Slice>(copy (@11), copy (new_len@9)) storage_dead(@11) - @0 := @PtrFromPartsShared<'_, Slice>(copy (@10), copy (new_len@9)) storage_dead(@10) storage_dead(new_len@9) return @@ -1277,10 +1320,10 @@ where new_len@9 := copy (exclusive_end@3) wrapping.- copy (self@5) storage_live(@10) storage_live(@11) - @11 := cast<*mut Slice, *mut T>(copy (slice@2)) - @10 := copy (@11) offset copy (self@5) + @10 := cast<*mut Slice, *mut T>(copy (slice@2)) + @11 := copy (@10) offset copy (self@5) + @0 := @PtrFromPartsMut<'_, Slice>(copy (@11), copy (new_len@9)) storage_dead(@11) - @0 := @PtrFromPartsMut<'_, Slice>(copy (@10), copy (new_len@9)) storage_dead(@10) storage_dead(new_len@9) return @@ -1425,7 +1468,10 @@ impl SliceIndex> for RangeInclusive[Sized] where [@TraitClause0]: Sized, { - parent_clause0 = {impl Sealed for RangeInclusive[Sized]} + parent_clause0 = MetaSized[Sized]> + parent_clause1 = {impl Sealed for RangeInclusive[Sized]} + parent_clause2 = MetaSized> + parent_clause3 = MetaSized> type Output = Slice fn get<'_0> = {impl SliceIndex> for RangeInclusive[Sized]}::get<'_0_0, T>[@TraitClause0] fn get_mut<'_0> = {impl SliceIndex> for RangeInclusive[Sized]}::get_mut<'_0_0, T>[@TraitClause0] diff --git a/charon/tests/ui/simple/supertrait-impl-with-assoc-type-constraint.out b/charon/tests/ui/simple/supertrait-impl-with-assoc-type-constraint.out index 900bef801..4599e7375 100644 --- a/charon/tests/ui/simple/supertrait-impl-with-assoc-type-constraint.out +++ b/charon/tests/ui/simple/supertrait-impl-with-assoc-type-constraint.out @@ -1,23 +1,35 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::HasAssoc trait HasAssoc { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Assoc } // Full name: test_crate::SuperTrait trait SuperTrait +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: SuperTrait + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: SuperTrait } // Full name: test_crate::{impl SuperTrait for T} @@ -26,7 +38,9 @@ where [@TraitClause0]: HasAssoc, [@TraitClause1]: Sized, @TraitClause0::Assoc = (), -{} +{ + parent_clause0 = @TraitClause0::parent_clause0 +} // Full name: test_crate::{impl Trait for T} impl Trait for T @@ -35,7 +49,8 @@ where [@TraitClause1]: Sized, @TraitClause0::Assoc = (), { - parent_clause0 = {impl SuperTrait for T}[@TraitClause0, @TraitClause1] + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = {impl SuperTrait for T}[@TraitClause0, @TraitClause1] } // Full name: test_crate::main diff --git a/charon/tests/ui/simple/trait-alias.out b/charon/tests/ui/simple/trait-alias.out index ea7197f4b..d5d671287 100644 --- a/charon/tests/ui/simple/trait-alias.out +++ b/charon/tests/ui/simple/trait-alias.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -17,6 +24,13 @@ pub fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self where [@TraitClause0]: Clone, +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::option::Option #[lang_item("Option")] pub enum Option @@ -30,8 +44,9 @@ where // Full name: test_crate::Trait trait Trait { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized } // Full name: test_crate::Struct @@ -58,28 +73,32 @@ impl Trait for Struct where [@TraitClause0]: Sized, { - parent_clause0 = @TraitClause0 - parent_clause1 = Sized + parent_clause0 = MetaSized + parent_clause1 = @TraitClause0 + parent_clause2 = Sized } // Full name: test_crate::Alias trait Alias { - parent_clause0 : [@TraitClause0]: Trait[Self::parent_clause2], u32> - parent_clause1 : [@TraitClause1]: Clone - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Trait[Self::parent_clause3], u32> + parent_clause2 : [@TraitClause2]: Clone + parent_clause3 : [@TraitClause3]: Sized } // Full name: test_crate::Alias::{impl Alias for Self} impl Alias for Self where - [@TraitClause0]: Trait[@TraitClause2], u32>, - [@TraitClause1]: Clone, - [@TraitClause2]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Trait[@TraitClause3], u32>, + [@TraitClause2]: Clone, + [@TraitClause3]: Sized, { parent_clause0 = @TraitClause0 parent_clause1 = @TraitClause1 parent_clause2 = @TraitClause2 + parent_clause3 = @TraitClause3 } // Full name: test_crate::takes_alias @@ -96,7 +115,7 @@ where storage_live(@2) storage_live(@3) @3 := &x@1 - @2 := @TraitClause1::parent_clause1::clone<'_>(move (@3)) + @2 := @TraitClause1::parent_clause2::clone<'_>(move (@3)) storage_dead(@3) drop @2 storage_dead(@2) @@ -116,7 +135,7 @@ fn use_alias() storage_live(@1) storage_live(@2) @2 := Struct { } - @1 := takes_alias[Sized, {impl Alias for Self}[{impl Trait for Struct}[Sized<()>]>[Sized[Sized<()>]>], {impl Clone for Struct}, Sized<()>]](move (@2)) + @1 := takes_alias[Sized, {impl Alias for Self}[MetaSized, {impl Trait for Struct}[Sized<()>]>[Sized[Sized<()>]>], {impl Clone for Struct}, Sized<()>]](move (@2)) storage_dead(@2) storage_dead(@1) @0 := () diff --git a/charon/tests/ui/simple/trait-default-const-cross-crate.out b/charon/tests/ui/simple/trait-default-const-cross-crate.out index 15345af6d..23a48fa2f 100644 --- a/charon/tests/ui/simple/trait-default-const-cross-crate.out +++ b/charon/tests/ui/simple/trait-default-const-cross-crate.out @@ -1,12 +1,20 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: trait_default_const::Trait trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized const FOO : usize } @@ -30,6 +38,7 @@ impl Trait for T where [@TraitClause0]: Sized, { + parent_clause0 = @TraitClause0::parent_clause0 const FOO = trait_default_const::Trait::FOO[{impl Trait for T}[@TraitClause0]] } diff --git a/charon/tests/ui/simple/trait-default-const.out b/charon/tests/ui/simple/trait-default-const.out index 5d0e2ccdf..8caf13249 100644 --- a/charon/tests/ui/simple/trait-default-const.out +++ b/charon/tests/ui/simple/trait-default-const.out @@ -1,12 +1,20 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::Trait trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized const FOO : usize } @@ -30,6 +38,7 @@ impl Trait for T where [@TraitClause0]: Sized, { + parent_clause0 = @TraitClause0::parent_clause0 const FOO = test_crate::Trait::FOO[{impl Trait for T}[@TraitClause0]] } diff --git a/charon/tests/ui/simple/vec-push.out b/charon/tests/ui/simple/vec-push.out index 743a34a53..089230d17 100644 --- a/charon/tests/ui/simple/vec-push.out +++ b/charon/tests/ui/simple/vec-push.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::num::niche_types::UsizeNoHighBit pub opaque type UsizeNoHighBit diff --git a/charon/tests/ui/simple/vec-with-capacity.out b/charon/tests/ui/simple/vec-with-capacity.out index 614fd3c15..8337847b6 100644 --- a/charon/tests/ui/simple/vec-with-capacity.out +++ b/charon/tests/ui/simple/vec-with-capacity.out @@ -4,9 +4,16 @@ #[lang_item("alloc_layout")] pub opaque type Layout +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::PhantomData #[lang_item("phantom_data")] diff --git a/charon/tests/ui/skip-borrowck.out b/charon/tests/ui/skip-borrowck.out index 7b5983a87..f52054885 100644 --- a/charon/tests/ui/skip-borrowck.out +++ b/charon/tests/ui/skip-borrowck.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::choose fn choose<'a, T>(@1: bool, @2: &'a mut (T), @3: &'a mut (T)) -> &'a mut (T) diff --git a/charon/tests/ui/slice-index-range.out b/charon/tests/ui/slice-index-range.out index b240c596a..664b99831 100644 --- a/charon/tests/ui/slice-index-range.out +++ b/charon/tests/ui/slice-index-range.out @@ -1,9 +1,16 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::ops::index::Index #[lang_item("index")] pub trait Index { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized + parent_clause2 : [@TraitClause2]: MetaSized type Output fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } @@ -11,6 +18,9 @@ pub trait Index // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::array::{impl Index for Array}::index pub fn {impl Index for Array}::index<'_0, T, I, const N : usize>(@1: &'_0 (Array), @2: I) -> &'_0 (@TraitClause2::Output) @@ -26,10 +36,40 @@ where [@TraitClause1]: Sized, [@TraitClause2]: Index, I>, { + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause2::parent_clause2 type Output = @TraitClause2::Output fn index<'_0> = {impl Index for Array}::index<'_0_0, T, I, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] } +// Full name: core::fmt::Arguments +#[lang_item("format_arguments")] +pub opaque type Arguments<'a> +where + 'a : 'a, + +// Full name: core::fmt::rt::Count +#[lang_item("format_count")] +pub enum Count { + Is(u16), + Param(usize), + Implied, +} + +// Full name: core::fmt::rt::Placeholder +#[lang_item("format_placeholder")] +pub struct Placeholder { + position: usize, + flags: u32, + precision: Count, + width: Count, +} + +// Full name: core::fmt::rt::Argument +#[lang_item("format_argument")] +pub opaque type Argument<'a> + fn core::slice::index::slice_end_index_len_fail::do_panic::runtime(@1: usize, @2: usize) -> ! fn core::slice::index::slice_index_order_fail::do_panic::runtime(@1: usize, @2: usize) -> ! @@ -76,18 +116,23 @@ fn core::slice::index::slice_index_order_fail::do_panic(@1: usize, @2: usize) -> @0 := core::slice::index::slice_index_order_fail::do_panic::runtime(move (index@1), move (end@2)) } -// Full name: core::panicking::panic_nounwind -#[lang_item("panic_nounwind")] -pub fn panic_nounwind(@1: &'static (Str)) -> ! +// Full name: core::panicking::panic_nounwind_fmt +pub fn panic_nounwind_fmt<'_0>(@1: Arguments<'_0>, @2: bool) -> ! // Full name: core::slice::index::private_slice_index::Sealed pub trait Sealed +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::slice::index::SliceIndex #[lang_item("SliceIndex")] pub trait SliceIndex { - parent_clause0 : [@TraitClause0]: Sealed + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sealed + parent_clause2 : [@TraitClause2]: MetaSized + parent_clause3 : [@TraitClause3]: MetaSized type Output fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T>[Self] fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T>[Self] @@ -123,6 +168,9 @@ where [@TraitClause1]: Sized, [@TraitClause2]: SliceIndex>, { + parent_clause0 = MetaSized> + parent_clause1 = @TraitClause1::parent_clause0 + parent_clause2 = @TraitClause2::parent_clause3 type Output = @TraitClause2::Output fn index<'_0> = {impl Index for Slice}::index<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } @@ -160,7 +208,9 @@ fn slice_index_order_fail(@1: usize, @2: usize) -> ! } // Full name: core::slice::index::private_slice_index::{impl Sealed for Range[Sized]} -impl Sealed for Range[Sized] {} +impl Sealed for Range[Sized] { + parent_clause0 = MetaSized[Sized]> +} pub fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> Option<&'_0 (@TraitClause0::Output)>[Sized<&'_0 (@TraitClause0::Output)>] where @@ -245,10 +295,10 @@ where @11 := &raw const *(slice@2) storage_live(@14) storage_live(@15) - @15 := cast<*const Slice, *const T>(copy (@11)) - @14 := copy (@15) offset copy (rhs@5) + @14 := cast<*const Slice, *const T>(copy (@11)) + @15 := copy (@14) offset copy (rhs@5) + @10 := @PtrFromPartsShared<'_, Slice>(copy (@15), copy (new_len@6)) storage_dead(@15) - @10 := @PtrFromPartsShared<'_, Slice>(copy (@14), copy (new_len@6)) storage_dead(@14) storage_dead(@11) @9 := &*(@10) @@ -330,10 +380,10 @@ where ptr@11 := &raw mut *(slice@2) storage_live(@14) storage_live(@15) - @15 := cast<*mut Slice, *mut T>(copy (ptr@11)) - @14 := copy (@15) offset copy (rhs@5) + @14 := cast<*mut Slice, *mut T>(copy (ptr@11)) + @15 := copy (@14) offset copy (rhs@5) + @10 := @PtrFromPartsMut<'_, Slice>(copy (@15), copy (new_len@6)) storage_dead(@15) - @10 := @PtrFromPartsMut<'_, Slice>(copy (@14), copy (new_len@6)) storage_dead(@14) storage_dead(ptr@11) @9 := &mut *(@10) @@ -362,9 +412,19 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked::pr let @4: bool; // anonymous local let @5: bool; // anonymous local let @6: !; // anonymous local + let @7: Arguments<'_>; // anonymous local + let pieces@8: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @9: Array<&'_ (Str), 1 : usize>; // anonymous local + let @10: &'_ (Slice<&'_ (Str)>); // anonymous local + let @11: &'_ (Slice>); // anonymous local + let @12: &'_ (Array, 0 : usize>); // anonymous local + let @13: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@5) storage_live(@6) + storage_live(pieces@8) + storage_live(@12) + storage_live(@13) storage_live(@4) @4 := copy (end@2) >= copy (start@1) if move (@4) { @@ -381,7 +441,20 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked::pr } else { } - @6 := panic_nounwind(const ("unsafe precondition(s) violated: slice::get_unchecked requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@7) + storage_live(@9) + @9 := [const ("unsafe precondition(s) violated: slice::get_unchecked requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@8 := &@9 + storage_live(@10) + @10 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@8)) + storage_live(@11) + @12 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @11 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@12)) + @13 := Option::None { } + @7 := Arguments { 0: move (@10), 1: move (@13), 2: move (@11) } + storage_dead(@11) + storage_dead(@10) + @6 := panic_nounwind_fmt<'_>(move (@7), const (false)) } // Full name: core::slice::index::{impl SliceIndex> for Range[Sized]}::get_unchecked @@ -433,10 +506,10 @@ where storage_dead(@9) storage_live(@11) storage_live(@12) - @12 := cast<*const Slice, *const T>(copy (slice@2)) - @11 := copy (@12) offset copy (offset@10) + @11 := cast<*const Slice, *const T>(copy (slice@2)) + @12 := copy (@11) offset copy (offset@10) + @0 := @PtrFromPartsShared<'_, Slice>(copy (@12), copy (new_len@8)) storage_dead(@12) - @0 := @PtrFromPartsShared<'_, Slice>(copy (@11), copy (new_len@8)) storage_dead(@11) return } @@ -451,9 +524,19 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked_mut let @4: bool; // anonymous local let @5: bool; // anonymous local let @6: !; // anonymous local + let @7: Arguments<'_>; // anonymous local + let pieces@8: &'_ (Array<&'_ (Str), 1 : usize>); // local + let @9: Array<&'_ (Str), 1 : usize>; // anonymous local + let @10: &'_ (Slice<&'_ (Str)>); // anonymous local + let @11: &'_ (Slice>); // anonymous local + let @12: &'_ (Array, 0 : usize>); // anonymous local + let @13: Option<&'_ (Slice)>[Sized<&'_ (Slice)>]; // anonymous local storage_live(@5) storage_live(@6) + storage_live(pieces@8) + storage_live(@12) + storage_live(@13) storage_live(@4) @4 := copy (end@2) >= copy (start@1) if move (@4) { @@ -470,7 +553,20 @@ fn {impl SliceIndex> for Range[Sized]}::get_unchecked_mut } else { } - @6 := panic_nounwind(const ("unsafe precondition(s) violated: slice::get_unchecked_mut requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")) + storage_live(@7) + storage_live(@9) + @9 := [const ("unsafe precondition(s) violated: slice::get_unchecked_mut requires that the range is within the slice\n\nThis indicates a bug in the program. This Undefined Behavior check is optional, and cannot be relied on for safety.")] + pieces@8 := &@9 + storage_live(@10) + @10 := @ArrayToSliceShared<'_, &'_ (Str), 1 : usize>(copy (pieces@8)) + storage_live(@11) + @12 := core::fmt::rt::{Arguments<'a>}::new_const::{promoted_const}<'_, 1 : usize> + @11 := @ArrayToSliceShared<'_, Argument<'_>, 0 : usize>(move (@12)) + @13 := Option::None { } + @7 := Arguments { 0: move (@10), 1: move (@13), 2: move (@11) } + storage_dead(@11) + storage_dead(@10) + @6 := panic_nounwind_fmt<'_>(move (@7), const (false)) } // Full name: core::slice::index::{impl SliceIndex> for Range[Sized]}::get_unchecked_mut @@ -522,10 +618,10 @@ where storage_dead(@9) storage_live(@11) storage_live(@12) - @12 := cast<*mut Slice, *mut T>(copy (slice@2)) - @11 := copy (@12) offset copy (offset@10) + @11 := cast<*mut Slice, *mut T>(copy (slice@2)) + @12 := copy (@11) offset copy (offset@10) + @0 := @PtrFromPartsMut<'_, Slice>(copy (@12), copy (new_len@8)) storage_dead(@12) - @0 := @PtrFromPartsMut<'_, Slice>(copy (@11), copy (new_len@8)) storage_dead(@11) return } @@ -592,10 +688,10 @@ where @12 := &raw const *(slice@2) storage_live(@15) storage_live(@16) - @16 := cast<*const Slice, *const T>(copy (@12)) - @15 := copy (@16) offset copy (rhs@7) + @15 := cast<*const Slice, *const T>(copy (@12)) + @16 := copy (@15) offset copy (rhs@7) + @11 := @PtrFromPartsShared<'_, Slice>(copy (@16), copy (new_len@4)) storage_dead(@16) - @11 := @PtrFromPartsShared<'_, Slice>(copy (@15), copy (new_len@4)) storage_dead(@15) storage_dead(@12) @0 := &*(@11) @@ -671,10 +767,10 @@ where ptr@12 := &raw mut *(slice@2) storage_live(@15) storage_live(@16) - @16 := cast<*mut Slice, *mut T>(copy (ptr@12)) - @15 := copy (@16) offset copy (rhs@7) + @15 := cast<*mut Slice, *mut T>(copy (ptr@12)) + @16 := copy (@15) offset copy (rhs@7) + @11 := @PtrFromPartsMut<'_, Slice>(copy (@16), copy (new_len@4)) storage_dead(@16) - @11 := @PtrFromPartsMut<'_, Slice>(copy (@15), copy (new_len@4)) storage_dead(@15) storage_dead(ptr@12) @0 := &mut *(@11) @@ -693,7 +789,10 @@ impl SliceIndex> for Range[Sized] where [@TraitClause0]: Sized, { - parent_clause0 = {impl Sealed for Range[Sized]} + parent_clause0 = MetaSized[Sized]> + parent_clause1 = {impl Sealed for Range[Sized]} + parent_clause2 = MetaSized> + parent_clause3 = MetaSized> type Output = Slice fn get<'_0> = {impl SliceIndex> for Range[Sized]}::get<'_0_0, T>[@TraitClause0] fn get_mut<'_0> = {impl SliceIndex> for Range[Sized]}::get_mut<'_0_0, T>[@TraitClause0] diff --git a/charon/tests/ui/start_from.out b/charon/tests/ui/start_from.out index 2dd4be64b..df4ebd6ff 100644 --- a/charon/tests/ui/start_from.out +++ b/charon/tests/ui/start_from.out @@ -1,8 +1,22 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -10,7 +24,7 @@ pub trait Clone { parent_clause0 : [@TraitClause0]: Sized fn clone<'_0> = clone<'_0_0, Self>[Self] - fn clone_from<'_0, '_1> = clone_from<'_0_0, '_0_1, Self>[Self] + fn clone_from<'_0, '_1, [@TraitClause0]: Destruct> = clone_from<'_0_0, '_0_1, Self>[Self, @TraitClause0_0] } // Full name: core::clone::Clone::clone @@ -23,6 +37,7 @@ where pub fn clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) where [@TraitClause0]: Clone, + [@TraitClause1]: Destruct, // Full name: core::iter::sources::once::Once #[lang_item("IterOnce")] diff --git a/charon/tests/ui/start_from_errors.out b/charon/tests/ui/start_from_errors.out index 2d30d0b3f..57eea3822 100644 --- a/charon/tests/ui/start_from_errors.out +++ b/charon/tests/ui/start_from_errors.out @@ -5,6 +5,6 @@ error: path module2 does not correspond to any item error: path std::iter:once does not correspond to any item error: Cannot register item `core::ops::deref::Deref::Target` with kind `AssocTy` - --> /rustc/library/core/src/ops/deref.rs:143:5 + --> /rustc/library/core/src/ops/deref.rs:145:5 ERROR Charon failed to translate this code (4 errors) diff --git a/charon/tests/ui/string-literal.out b/charon/tests/ui/string-literal.out index b1477fd6f..84975d6e4 100644 --- a/charon/tests/ui/string-literal.out +++ b/charon/tests/ui/string-literal.out @@ -9,9 +9,16 @@ pub opaque type Formatter<'a> where 'a : 'a, +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] @@ -51,6 +58,7 @@ pub opaque type String #[lang_item("ToString")] pub trait ToString { + parent_clause0 : [@TraitClause0]: MetaSized fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self>[Self] } @@ -62,14 +70,17 @@ where // Full name: alloc::string::{impl ToString for T}::to_string pub fn {impl ToString for T}::to_string<'_0, T>(@1: &'_0 (T)) -> String where - [@TraitClause0]: Display, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Display, // Full name: alloc::string::{impl ToString for T} impl ToString for T where - [@TraitClause0]: Display, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Display, { - fn to_string<'_0> = {impl ToString for T}::to_string<'_0_0, T>[@TraitClause0] + parent_clause0 = @TraitClause0 + fn to_string<'_0> = {impl ToString for T}::to_string<'_0_0, T>[@TraitClause0, @TraitClause1] } fn test_crate::FOO() -> &'static (Str) @@ -119,7 +130,7 @@ fn main() storage_live(@3) @3 := const ("Hello") @2 := &*(@3) - _s@1 := {impl ToString for T}::to_string<'_, Str>[{impl Display for Str}](move (@2)) + _s@1 := {impl ToString for T}::to_string<'_, Str>[MetaSized, {impl Display for Str}](move (@2)) storage_dead(@2) storage_dead(@3) @0 := () diff --git a/charon/tests/ui/traits.out b/charon/tests/ui/traits.out index 3859828ae..e6d489756 100644 --- a/charon/tests/ui/traits.out +++ b/charon/tests/ui/traits.out @@ -1,20 +1,31 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::function::FnOnce #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = core::ops::function::FnOnce::call_once[Self] } @@ -23,9 +34,10 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } @@ -33,17 +45,18 @@ pub trait FnMut #[lang_item("r#fn")] pub trait Fn { - parent_clause0 : [@TraitClause0]: FnMut - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnMut + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } -pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: Fn, -pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -79,6 +92,7 @@ pub opaque type String // Full name: test_crate::BoolTrait pub trait BoolTrait { + parent_clause0 : [@TraitClause0]: MetaSized fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self>[Self] fn ret_true<'_0> = ret_true<'_0_0, Self>[Self] } @@ -120,6 +134,7 @@ pub fn test_crate::{impl BoolTrait for bool}::ret_true<'_0>(@1: &'_0 (bool)) -> // Full name: test_crate::{impl BoolTrait for bool} impl BoolTrait for bool { + parent_clause0 = MetaSized fn get_bool<'_0> = {impl BoolTrait for bool}::get_bool<'_0_0> fn ret_true<'_0> = test_crate::{impl BoolTrait for bool}::ret_true<'_0_0> } @@ -189,6 +204,7 @@ impl BoolTrait for Option[@TraitClause0] where [@TraitClause0]: Sized, { + parent_clause0 = MetaSized[@TraitClause0]> fn get_bool<'_0> = {impl BoolTrait for Option[@TraitClause0]}::get_bool<'_0_0, T>[@TraitClause0] fn ret_true<'_0> = test_crate::{impl BoolTrait for Option[@TraitClause0]}::ret_true<'_0_0, T>[@TraitClause0] } @@ -246,6 +262,7 @@ where // Full name: test_crate::ToU64 pub trait ToU64 { + parent_clause0 : [@TraitClause0]: MetaSized fn to_u64 = test_crate::ToU64::to_u64[Self] } @@ -265,6 +282,7 @@ pub fn {impl ToU64 for u64}::to_u64(@1: u64) -> u64 // Full name: test_crate::{impl ToU64 for u64} impl ToU64 for u64 { + parent_clause0 = MetaSized fn to_u64 = {impl ToU64 for u64}::to_u64 } @@ -307,6 +325,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: ToU64, { + parent_clause0 = MetaSized<(A, A)> fn to_u64 = {impl ToU64 for (A, A)}::to_u64[@TraitClause0, @TraitClause1] } @@ -391,6 +410,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: ToU64, { + parent_clause0 = MetaSized[@TraitClause0]> fn to_u64 = {impl ToU64 for Wrapper[@TraitClause0]}::to_u64[@TraitClause0, @TraitClause1] } @@ -429,7 +449,8 @@ where // Full name: test_crate::ToType pub trait ToType { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn to_type = test_crate::ToType::to_type[Self] } @@ -453,13 +474,15 @@ pub fn {impl ToType for u64}::to_type(@1: u64) -> bool // Full name: test_crate::{impl ToType for u64} impl ToType for u64 { - parent_clause0 = Sized + parent_clause0 = MetaSized + parent_clause1 = Sized fn to_type = {impl ToType for u64}::to_type } // Full name: test_crate::OfType pub trait OfType { + parent_clause0 : [@TraitClause0]: MetaSized fn of_type, [@TraitClause1]: ToType, [@TraitClause2]: Sized> = test_crate::OfType::of_type[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } @@ -493,9 +516,10 @@ where // Full name: test_crate::OfTypeBis pub trait OfTypeBis { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: ToType - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: ToType + parent_clause3 : [@TraitClause3]: Sized fn of_type<[@TraitClause0]: Sized> = test_crate::OfTypeBis::of_type[Self, @TraitClause0_0] } @@ -604,6 +628,7 @@ where // Full name: test_crate::{TestType[@TraitClause0]}::test::TestTrait trait TestTrait { + parent_clause0 : [@TraitClause0]: MetaSized fn test<'_0> = test_crate::{TestType[@TraitClause0]}::test::TestTrait::test<'_0_0, Self>[Self] } @@ -613,6 +638,7 @@ where // Full name: test_crate::{TestType[@TraitClause0]}::test::{impl TestTrait for TestType1} impl TestTrait for TestType1 { + parent_clause0 = MetaSized fn test<'_0> = {impl TestTrait for TestType1}::test<'_0_0> } @@ -644,16 +670,18 @@ where [@TraitClause0]: Sized, [@TraitClause1]: ToType, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized + parent_clause1 = @TraitClause0 fn to_type = {impl ToType for BoolWrapper}::to_type[@TraitClause0, @TraitClause1] } // Full name: test_crate::WithConstTy pub trait WithConstTy { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: ToU64 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: ToU64 const LEN1 : usize const LEN2 : usize type V @@ -706,9 +734,10 @@ pub fn {impl WithConstTy<32 : usize> for bool}::f<'_0, '_1>(@1: &'_0 mut (u64), // Full name: test_crate::{impl WithConstTy<32 : usize> for bool} impl WithConstTy<32 : usize> for bool { - parent_clause0 = Sized - parent_clause1 = Sized - parent_clause2 = {impl ToU64 for u64} + parent_clause0 = MetaSized + parent_clause1 = Sized + parent_clause2 = Sized + parent_clause3 = {impl ToU64 for u64} const LEN1 = {impl WithConstTy<32 : usize> for bool}::LEN1 const LEN2 = test_crate::WithConstTy::LEN2[{impl WithConstTy<32 : usize> for bool}] type V = u8 @@ -755,7 +784,7 @@ where storage_live(@2) @2 := move (x@1) - @0 := @TraitClause1::parent_clause2::to_u64(move (@2)) + @0 := @TraitClause1::parent_clause3::to_u64(move (@2)) storage_dead(@2) drop x@1 return @@ -793,7 +822,8 @@ where // Full name: test_crate::ParentTrait0 pub trait ParentTrait0 { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type W fn get_name<'_0> = get_name<'_0_0, Self>[Self] fn get_w<'_0> = test_crate::ParentTrait0::get_w<'_0_0, Self>[Self] @@ -810,12 +840,16 @@ where // Full name: test_crate::ParentTrait1 pub trait ParentTrait1 +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::ChildTrait pub trait ChildTrait { - parent_clause0 : [@TraitClause0]: ParentTrait0 - parent_clause1 : [@TraitClause1]: ParentTrait1 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: ParentTrait0 + parent_clause2 : [@TraitClause2]: ParentTrait1 } // Full name: test_crate::test_child_trait1 @@ -830,24 +864,24 @@ where storage_live(@2) @2 := &*(x@1) - @0 := @TraitClause1::parent_clause0::get_name<'_>(move (@2)) + @0 := @TraitClause1::parent_clause1::get_name<'_>(move (@2)) storage_dead(@2) return } // Full name: test_crate::test_child_trait2 -pub fn test_child_trait2<'_0, T>(@1: &'_0 (T)) -> @TraitClause1::parent_clause0::W +pub fn test_child_trait2<'_0, T>(@1: &'_0 (T)) -> @TraitClause1::parent_clause1::W where [@TraitClause0]: Sized, [@TraitClause1]: ChildTrait, { - let @0: @TraitClause1::parent_clause0::W; // return + let @0: @TraitClause1::parent_clause1::W; // return let x@1: &'_ (T); // arg #1 let @2: &'_ (T); // anonymous local storage_live(@2) @2 := &*(x@1) - @0 := @TraitClause1::parent_clause0::get_w<'_>(move (@2)) + @0 := @TraitClause1::parent_clause1::get_w<'_>(move (@2)) storage_dead(@2) return } @@ -871,32 +905,38 @@ where // Full name: test_crate::ChildTrait1 pub trait ChildTrait1 { - parent_clause0 : [@TraitClause0]: ParentTrait1 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: ParentTrait1 } // Full name: test_crate::{impl ParentTrait1 for usize} -impl ParentTrait1 for usize {} +impl ParentTrait1 for usize { + parent_clause0 = MetaSized +} // Full name: test_crate::{impl ChildTrait1 for usize} impl ChildTrait1 for usize { - parent_clause0 = {impl ParentTrait1 for usize} + parent_clause0 = MetaSized + parent_clause1 = {impl ParentTrait1 for usize} } // Full name: test_crate::Iterator pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item } // Full name: test_crate::IntoIterator pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = into_iter[Self] @@ -910,53 +950,60 @@ where // Full name: test_crate::FromResidual trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::Try trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized type Residual } // Full name: test_crate::WithTarget pub trait WithTarget { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Target } // Full name: test_crate::ParentTrait2 pub trait ParentTrait2 { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: WithTarget + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: WithTarget type U } // Full name: test_crate::ChildTrait2 pub trait ChildTrait2 { - parent_clause0 : [@TraitClause0]: ParentTrait2 + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: ParentTrait2 fn convert = test_crate::ChildTrait2::convert[Self] } -pub fn test_crate::ChildTrait2::convert(@1: @TraitClause0::parent_clause0::U) -> @TraitClause0::parent_clause0::parent_clause1::Target +pub fn test_crate::ChildTrait2::convert(@1: @TraitClause0::parent_clause1::U) -> @TraitClause0::parent_clause1::parent_clause2::Target where [@TraitClause0]: ChildTrait2, // Full name: test_crate::{impl WithTarget for u32} impl WithTarget for u32 { - parent_clause0 = Sized + parent_clause0 = MetaSized + parent_clause1 = Sized type Target = u32 } // Full name: test_crate::{impl ParentTrait2 for u32} impl ParentTrait2 for u32 { - parent_clause0 = Sized - parent_clause1 = {impl WithTarget for u32} + parent_clause0 = MetaSized + parent_clause1 = Sized + parent_clause2 = {impl WithTarget for u32} type U = u32 } @@ -972,15 +1019,17 @@ pub fn {impl ChildTrait2 for u32}::convert(@1: u32) -> u32 // Full name: test_crate::{impl ChildTrait2 for u32} impl ChildTrait2 for u32 { - parent_clause0 = {impl ParentTrait2 for u32} + parent_clause0 = MetaSized + parent_clause1 = {impl ParentTrait2 for u32} fn convert = {impl ChildTrait2 for u32}::convert } // Full name: test_crate::CFnOnce pub trait CFnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized type Output fn call_once = test_crate::CFnOnce::call_once[Self] } @@ -992,31 +1041,34 @@ where // Full name: test_crate::CFnMut pub trait CFnMut { - parent_clause0 : [@TraitClause0]: CFnOnce - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: CFnOnce + parent_clause2 : [@TraitClause2]: Sized fn call_mut<'_0> = test_crate::CFnMut::call_mut<'_0_0, Self, Args>[Self] } -pub fn test_crate::CFnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn test_crate::CFnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: CFnMut, // Full name: test_crate::CFn pub trait CFn { - parent_clause0 : [@TraitClause0]: CFnMut - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: CFnMut + parent_clause2 : [@TraitClause2]: Sized fn call<'_0> = test_crate::CFn::call<'_0_0, Self, Args>[Self] } -pub fn test_crate::CFn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +pub fn test_crate::CFn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause1::parent_clause1::Output where [@TraitClause0]: CFn, // Full name: test_crate::GetTrait pub trait GetTrait { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type W fn get_w<'_0> = test_crate::GetTrait::get_w<'_0_0, Self>[Self] } @@ -1045,6 +1097,7 @@ where // Full name: test_crate::Trait pub trait Trait { + parent_clause0 : [@TraitClause0]: MetaSized const LEN : usize } @@ -1070,6 +1123,7 @@ impl Trait for Array where [@TraitClause0]: Sized, { + parent_clause0 = MetaSized> const LEN = {impl Trait for Array}::LEN[@TraitClause0] } @@ -1098,6 +1152,7 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Trait, { + parent_clause0 = MetaSized[@TraitClause0]> const LEN = {impl Trait for Wrapper[@TraitClause0]}::LEN[@TraitClause0, @TraitClause1] } @@ -1177,15 +1232,17 @@ where // Full name: test_crate::RecursiveImpl trait RecursiveImpl { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: RecursiveImpl + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: RecursiveImpl type Item } // Full name: test_crate::{impl RecursiveImpl for ()} impl RecursiveImpl for () { - parent_clause0 = Sized<()> - parent_clause1 = {impl RecursiveImpl for ()} + parent_clause0 = MetaSized<()> + parent_clause1 = Sized<()> + parent_clause2 = {impl RecursiveImpl for ()} type Item = () } @@ -1202,7 +1259,7 @@ pub fn test_crate::call<'a, F>(@1: F) where [@TraitClause0]: Sized, [@TraitClause1]: Fn, - @TraitClause1::parent_clause0::parent_clause0::Output = Wrapper<(bool, &'a (()))>[Sized<(bool, &'_ (()))>], + @TraitClause1::parent_clause1::parent_clause1::Output = Wrapper<(bool, &'a (()))>[Sized<(bool, &'_ (()))>], { let @0: (); // return let @1: F; // arg #1 @@ -1230,7 +1287,8 @@ pub fn flibidi() // Full name: test_crate::assoc_ty_trait_ref::SliceIndex trait SliceIndex { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Output } diff --git a/charon/tests/ui/traits_special.out b/charon/tests/ui/traits_special.out index 2b25113c4..940105343 100644 --- a/charon/tests/ui/traits_special.out +++ b/charon/tests/ui/traits_special.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::result::Result #[lang_item("Result")] @@ -18,13 +25,14 @@ where // Full name: test_crate::From pub trait From { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized type Error fn from<[@TraitClause0]: Sized> = test_crate::From::from[Self, @TraitClause0_0] } -pub fn test_crate::From::from(@1: T) -> Result[@TraitClause1, @TraitClause0::parent_clause1] +pub fn test_crate::From::from(@1: T) -> Result[@TraitClause1, @TraitClause0::parent_clause2] where [@TraitClause0]: From, [@TraitClause1]: Sized, @@ -45,8 +53,9 @@ pub fn {impl From<&'_0 (bool)> for bool}::from<'_0>(@1: &'_0 (bool)) -> Result for bool} impl<'_0> From<&'_0 (bool)> for bool { - parent_clause0 = Sized<&'_ (bool)> - parent_clause1 = Sized<()> + parent_clause0 = MetaSized + parent_clause1 = Sized<&'_ (bool)> + parent_clause2 = Sized<()> type Error = () fn from = {impl From<&'_0 (bool)> for bool}::from<'_0> } diff --git a/charon/tests/ui/type_alias.out b/charon/tests/ui/type_alias.out index c69de5ad3..fc11b6267 100644 --- a/charon/tests/ui/type_alias.out +++ b/charon/tests/ui/type_alias.out @@ -1,9 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::borrow::Borrow #[lang_item("Borrow")] pub trait Borrow { + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: MetaSized fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed>[Self] } @@ -14,6 +20,9 @@ where // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -29,6 +38,13 @@ pub fn clone<'_0, Self>(@1: &'_0 (Self)) -> Self where [@TraitClause0]: Clone, +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: alloc::alloc::Global #[lang_item("global_alloc_ty")] pub struct Global {} @@ -37,8 +53,9 @@ pub struct Global {} #[lang_item("ToOwned")] pub trait ToOwned { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Borrow + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Borrow type Owned fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self>[Self] } @@ -52,12 +69,13 @@ where #[lang_item("Cow")] pub enum Cow<'a, B> where - [@TraitClause0]: ToOwned, + [@TraitClause0]: MetaSized, + [@TraitClause1]: ToOwned, B : 'a, B : 'a, { Borrowed(&'a (B)), - Owned(@TraitClause0::Owned), + Owned(@TraitClause1::Owned), } // Full name: alloc::vec::Vec @@ -79,6 +97,8 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Sized, { + parent_clause0 = MetaSized[@TraitClause0, @TraitClause1]> + parent_clause1 = MetaSized> fn borrow<'_0> = {impl Borrow> for Vec[@TraitClause0, @TraitClause1]}::borrow<'_0_0, T, A>[@TraitClause0, @TraitClause1] } @@ -94,8 +114,9 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Clone, { - parent_clause0 = Sized[@TraitClause0, Sized]> - parent_clause1 = {impl Borrow> for Vec[@TraitClause0, @TraitClause1]}[@TraitClause0, Sized] + parent_clause0 = MetaSized> + parent_clause1 = Sized[@TraitClause0, Sized]> + parent_clause2 = {impl Borrow> for Vec[@TraitClause0, @TraitClause1]}[@TraitClause0, Sized] type Owned = Vec[@TraitClause0, Sized] fn to_owned<'_0> = {impl ToOwned for Slice}::to_owned<'_0_0, T>[@TraitClause0, @TraitClause1] } @@ -107,7 +128,7 @@ where [@TraitClause1]: Clone, T : 'a, { - Cow<'a, Slice>[{impl ToOwned for Slice}[@TraitClause0, @TraitClause1]], + Cow<'a, Slice>[MetaSized>, {impl ToOwned for Slice}[@TraitClause0, @TraitClause1]], } diff --git a/charon/tests/ui/type_inference_is_order_dependent.out b/charon/tests/ui/type_inference_is_order_dependent.out index b8570728f..24f41f607 100644 --- a/charon/tests/ui/type_inference_is_order_dependent.out +++ b/charon/tests/ui/type_inference_is_order_dependent.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::default::Default #[lang_item("Default")] @@ -90,19 +97,22 @@ pub fn _print<'_0>(@1: Arguments<'_0>) // Full name: test_crate::Left trait Left { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::Right trait Right { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized } // Full name: test_crate::Join trait Join { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn test = test_crate::Join::test[Self] } @@ -123,53 +133,53 @@ where let @0: (); // return let @1: (); // anonymous local let @2: Arguments<'_>; // anonymous local - let @3: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local - let @4: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local - let @5: Array<&'_ (Str), 2 : usize>; // anonymous local - let @6: &'_ (Array, 1 : usize>); // anonymous local - let @7: &'_ (Array, 1 : usize>); // anonymous local - let @8: Array, 1 : usize>; // anonymous local - let @9: Argument<'_>; // anonymous local - let @10: &'_ (U); // anonymous local - let @11: &'_ (U); // anonymous local - let @12: U; // anonymous local + let args@3: Array, 1 : usize>; // local + let @4: Argument<'_>; // anonymous local + let @5: &'_ (U); // anonymous local + let @6: &'_ (U); // anonymous local + let @7: U; // anonymous local + let @8: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local + let @9: &'_ (Array<&'_ (Str), 2 : usize>); // anonymous local + let @10: Array<&'_ (Str), 2 : usize>; // anonymous local + let @11: &'_ (Array, 1 : usize>); // anonymous local + let @12: &'_ (Array, 1 : usize>); // anonymous local storage_live(@1) storage_live(@2) - storage_live(@3) + storage_live(args@3) storage_live(@4) storage_live(@5) - @5 := [const (""), const ("\n")] - @4 := &@5 - @3 := &*(@4) storage_live(@6) storage_live(@7) + @7 := @TraitClause4::default() + @6 := &@7 + @5 := &*(@6) + @4 := new_debug<'_, '_, U>[@TraitClause1, @TraitClause5](move (@5)) + storage_dead(@5) + args@3 := [move (@4)] + storage_dead(@4) storage_live(@8) storage_live(@9) storage_live(@10) + @10 := [const (""), const ("\n")] + @9 := &@10 + @8 := &*(@9) storage_live(@11) storage_live(@12) - @12 := @TraitClause4::default() - @11 := &@12 - @10 := &*(@11) - @9 := new_debug<'_, '_, U>[@TraitClause1, @TraitClause5](move (@10)) + @12 := &args@3 + @11 := &*(@12) + @2 := new_v1<'_, 2 : usize, 1 : usize>(move (@8), move (@11)) + storage_dead(@12) + storage_dead(@11) storage_dead(@10) - @8 := [move (@9)] storage_dead(@9) - @7 := &@8 - @6 := &*(@7) - @2 := new_v1<'_, 2 : usize, 1 : usize>(move (@3), move (@6)) - storage_dead(@6) - storage_dead(@3) + storage_dead(@8) @1 := _print<'_>(move (@2)) storage_dead(@2) - drop @12 - storage_dead(@12) - storage_dead(@11) - storage_dead(@8) + drop @7 storage_dead(@7) - storage_dead(@5) - storage_dead(@4) + storage_dead(@6) + storage_dead(args@3) storage_dead(@1) @0 := () @0 := () @@ -186,7 +196,8 @@ where [@TraitClause4]: Default, [@TraitClause5]: Debug, { - parent_clause0 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1 fn test = {impl Join for T}::test[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause4, @TraitClause5] } @@ -198,7 +209,8 @@ where [@TraitClause2]: Default, [@TraitClause3]: Debug, { - parent_clause0 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1 } // Full name: test_crate::{impl Right for T} @@ -209,7 +221,8 @@ where [@TraitClause2]: Default, [@TraitClause3]: Debug, { - parent_clause0 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1 } // Full name: test_crate::try_it diff --git a/charon/tests/ui/typenum.out b/charon/tests/ui/typenum.out index 9263ad516..2a68cbc59 100644 --- a/charon/tests/ui/typenum.out +++ b/charon/tests/ui/typenum.out @@ -13,7 +13,7 @@ pub struct UTerm {} pub struct B0 {} // Full name: test_crate::LongType -pub type LongType = UInt, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0> +pub type LongType = UInt, B0>, B0>, B0>, B0>, B0> // Full name: test_crate::foo pub fn foo() @@ -32,7 +32,7 @@ pub fn main() let @1: (); // anonymous local storage_live(@1) - @1 := foo, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0>>() + @1 := foo, B0>, B0>, B0>, B0>, B0>>() storage_dead(@1) @0 := () @0 := () diff --git a/charon/tests/ui/typenum.rs b/charon/tests/ui/typenum.rs index 100b53c3f..e0bf71485 100644 --- a/charon/tests/ui/typenum.rs +++ b/charon/tests/ui/typenum.rs @@ -3,8 +3,7 @@ pub struct UInt(U, B); pub struct UTerm; pub struct B0; -pub type LongType = - UInt, B0>, B0>, B0>, B0>, B0>, B0>, B0>, B0>; +pub type LongType = UInt, B0>, B0>, B0>, B0>, B0>; pub fn foo() {} pub fn main() { diff --git a/charon/tests/ui/ullbc-control-flow.out b/charon/tests/ui/ullbc-control-flow.out index dbb5faeda..ea60ddb24 100644 --- a/charon/tests/ui/ullbc-control-flow.out +++ b/charon/tests/ui/ullbc-control-flow.out @@ -1,8 +1,15 @@ # Final ULLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -155,6 +162,7 @@ pub trait TrustedRandomAccessNoCoerce } // Full name: core::iter::range::Step +#[lang_item("range_step")] pub trait Step { parent_clause0 : [@TraitClause0]: Sized @@ -219,7 +227,8 @@ impl Step for i32 { #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } @@ -246,7 +255,8 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Step, { - parent_clause0 = @TraitClause0 + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = @TraitClause0 type Item = A fn next<'_0> = {impl Iterator for Range[@TraitClause0]}::next<'_0_0, A>[@TraitClause0, @TraitClause1] } @@ -285,11 +295,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] @@ -330,9 +341,10 @@ where [@TraitClause0]: Sized, [@TraitClause1]: Iterator, { - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 + parent_clause0 = @TraitClause0::parent_clause0 + parent_clause1 = @TraitClause1::parent_clause1 + parent_clause2 = @TraitClause0 + parent_clause3 = @TraitClause1 type Item = @TraitClause1::Item type IntoIter = I fn into_iter = {impl IntoIterator for I}::into_iter[@TraitClause0, @TraitClause1] @@ -341,7 +353,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -357,23 +370,25 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -381,12 +396,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -403,9 +429,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -414,14 +441,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -434,7 +462,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -442,9 +471,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -459,7 +489,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -472,12 +502,13 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } diff --git a/charon/tests/ui/unsafe.out b/charon/tests/ui/unsafe.out index 18386a300..cc15b2e1f 100644 --- a/charon/tests/ui/unsafe.out +++ b/charon/tests/ui/unsafe.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -120,6 +127,7 @@ where // Full name: core::hash::Hasher pub trait Hasher { + parent_clause0 : [@TraitClause0]: MetaSized fn finish<'_0> = finish<'_0_0, Self>[Self] fn write<'_0, '_1> = write<'_0_0, '_0_1, Self>[Self] } @@ -158,7 +166,8 @@ pub trait Send #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone } // Full name: core::marker::Sync @@ -173,6 +182,13 @@ pub trait Freeze #[lang_item("unpin")] pub trait Unpin +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: core::ptr::const_ptr::{*const T}::read pub unsafe fn read(@1: *const T) -> T where @@ -242,9 +258,14 @@ fn deref_raw_ptr() // Full name: test_crate::Trait trait Trait +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: test_crate::{impl Trait for ()} -impl Trait for () {} +impl Trait for () { + parent_clause0 = MetaSized<()> +} fn test_crate::COUNTER() -> usize { diff --git a/charon/tests/ui/unsize.out b/charon/tests/ui/unsize.out index c68997818..23e2502c9 100644 --- a/charon/tests/ui/unsize.out +++ b/charon/tests/ui/unsize.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -17,6 +24,13 @@ pub fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self where [@TraitClause0]: Clone, +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized +} + // Full name: alloc::alloc::Global #[lang_item("global_alloc_ty")] pub struct Global {} @@ -25,9 +39,10 @@ pub struct Global {} #[lang_item("Rc")] pub opaque type Rc where - [@TraitClause0]: Sized, + [@TraitClause0]: MetaSized, + [@TraitClause1]: Sized, -pub fn alloc::rc::{Rc[Sized]}::new(@1: T) -> Rc[Sized] +pub fn alloc::rc::{Rc[@TraitClause0::parent_clause0, Sized]}::new(@1: T) -> Rc[@TraitClause0::parent_clause0, Sized] where [@TraitClause0]: Sized, @@ -55,22 +70,22 @@ fn foo() let @2: &'_ (Slice); // anonymous local let @3: &'_ (Array); // anonymous local let @4: &'_ (Array); // anonymous local - let @5: alloc::boxed::Box>[Sized]; // anonymous local - let @6: alloc::boxed::Box>[Sized]; // anonymous local + let @5: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local + let @6: alloc::boxed::Box>[MetaSized>, Sized]; // anonymous local let @7: Array; // anonymous local - let @8: Rc, Global>[Sized]; // anonymous local - let @9: Rc, Global>[Sized]; // anonymous local + let @8: Rc, Global>[MetaSized>, Sized]; // anonymous local + let @9: Rc, Global>[MetaSized>, Sized]; // anonymous local let @10: Array; // anonymous local let string@11: String; // local let @12: &'_ (dyn (exists(TODO))); // anonymous local let @13: &'_ (String); // anonymous local let @14: &'_ (String); // anonymous local - let @15: alloc::boxed::Box[Sized]; // anonymous local - let @16: alloc::boxed::Box[Sized]; // anonymous local + let @15: alloc::boxed::Box[MetaSized, Sized]; // anonymous local + let @16: alloc::boxed::Box[MetaSized, Sized]; // anonymous local let @17: String; // anonymous local let @18: &'_ (String); // anonymous local - let @19: Rc[Sized]; // anonymous local - let @20: Rc[Sized]; // anonymous local + let @19: Rc[MetaSized, Sized]; // anonymous local + let @20: Rc[MetaSized, Sized]; // anonymous local let @21: String; // anonymous local let @22: &'_ (String); // anonymous local @@ -90,7 +105,7 @@ fn foo() storage_live(@7) @7 := copy (array@1) @6 := @BoxNew>[Sized>](move (@7)) - @5 := unsize_cast>[Sized], alloc::boxed::Box>[Sized]>(move (@6)) + @5 := unsize_cast>[MetaSized>, Sized], alloc::boxed::Box>[MetaSized>, Sized]>(move (@6)) drop @6 storage_dead(@7) storage_dead(@6) @@ -100,8 +115,8 @@ fn foo() storage_live(@9) storage_live(@10) @10 := copy (array@1) - @9 := alloc::rc::{Rc[Sized]}::new>[Sized>](move (@10)) - @8 := unsize_cast, Global>[Sized], Rc, Global>[Sized]>(move (@9)) + @9 := alloc::rc::{Rc[@TraitClause0::parent_clause0, Sized]}::new>[Sized>](move (@10)) + @8 := unsize_cast, Global>[MetaSized>, Sized], Rc, Global>[MetaSized>, Sized]>(move (@9)) drop @9 storage_dead(@10) storage_dead(@9) @@ -126,7 +141,7 @@ fn foo() @17 := {impl Clone for String}::clone<'_>(move (@18)) storage_dead(@18) @16 := @BoxNew[Sized](move (@17)) - @15 := unsize_cast[Sized], alloc::boxed::Box[Sized]>(move (@16)) + @15 := unsize_cast[MetaSized, Sized], alloc::boxed::Box[MetaSized, Sized]>(move (@16)) drop @16 storage_dead(@17) storage_dead(@16) @@ -139,8 +154,8 @@ fn foo() @22 := &string@11 @21 := {impl Clone for String}::clone<'_>(move (@22)) storage_dead(@22) - @20 := alloc::rc::{Rc[Sized]}::new[Sized](move (@21)) - @19 := unsize_cast[Sized], Rc[Sized]>(move (@20)) + @20 := alloc::rc::{Rc[@TraitClause0::parent_clause0, Sized]}::new[Sized](move (@21)) + @19 := unsize_cast[MetaSized, Sized], Rc[MetaSized, Sized]>(move (@20)) drop @20 storage_dead(@21) storage_dead(@20) diff --git a/charon/tests/ui/unsupported/issue-79-bound-regions.out b/charon/tests/ui/unsupported/issue-79-bound-regions.out index b55690bbe..b7ee97087 100644 --- a/charon/tests/ui/unsupported/issue-79-bound-regions.out +++ b/charon/tests/ui/unsupported/issue-79-bound-regions.out @@ -1,8 +1,15 @@ # Final LLBC before serialization: +// Full name: core::marker::MetaSized +#[lang_item("meta_sized")] +pub trait MetaSized + // Full name: core::marker::Sized #[lang_item("sized")] pub trait Sized +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::clone::Clone #[lang_item("clone")] @@ -107,7 +114,8 @@ pub trait TrustedRandomAccessNoCoerce #[lang_item("iterator")] pub trait Iterator { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized type Item fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } @@ -146,11 +154,12 @@ where #[lang_item("IntoIterator")] pub trait IntoIterator where - Self::parent_clause2::Item = Self::Item, + Self::parent_clause3::Item = Self::Item, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Iterator type Item type IntoIter fn into_iter = into_iter[Self] @@ -183,7 +192,8 @@ where // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] } @@ -199,23 +209,25 @@ where #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] } // Full name: core::iter::traits::double_ended::DoubleEndedIterator::next_back -pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +pub fn next_back<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::parent_clause1::Item>[@TraitClause0::parent_clause1::parent_clause1] where [@TraitClause0]: DoubleEndedIterator, // Full name: core::iter::traits::exact_size::ExactSizeIterator pub trait ExactSizeIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator } #[lang_item("next")] -pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +pub fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> Option<@TraitClause0::Item>[@TraitClause0::parent_clause1] where [@TraitClause0]: Iterator, @@ -223,12 +235,23 @@ where #[lang_item("copy")] pub trait Copy { - parent_clause0 : [@TraitClause0]: Clone + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Clone +} + +// Full name: core::marker::Destruct +#[lang_item("destruct")] +pub trait Destruct +{ + parent_clause0 : [@TraitClause0]: MetaSized } // Full name: core::marker::Tuple #[lang_item("tuple_trait")] pub trait Tuple +{ + parent_clause0 : [@TraitClause0]: MetaSized +} // Full name: core::ops::control_flow::ControlFlow #[lang_item("ControlFlow")] @@ -245,9 +268,10 @@ where #[lang_item("fn_once")] pub trait FnOnce { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Tuple - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Tuple + parent_clause3 : [@TraitClause3]: Sized type Output fn call_once = call_once[Self] } @@ -256,14 +280,15 @@ pub trait FnOnce #[lang_item("fn_mut")] pub trait FnMut { - parent_clause0 : [@TraitClause0]: FnOnce - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Tuple + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FnOnce + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Tuple fn call_mut<'_0> = call_mut<'_0_0, Self, Args>[Self] } // Full name: core::ops::function::FnMut::call_mut -pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +pub fn call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause1::Output where [@TraitClause0]: FnMut, @@ -276,7 +301,8 @@ where #[lang_item("FromResidual")] pub trait FromResidual { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn from_residual = from_residual[Self] } @@ -284,9 +310,10 @@ pub trait FromResidual #[lang_item("Try")] pub trait Try { - parent_clause0 : [@TraitClause0]: FromResidual - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: FromResidual + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Sized type Output type Residual fn from_output = from_output[Self] @@ -301,7 +328,7 @@ where // Full name: core::ops::try_trait::Try::branch #[lang_item("branch")] -pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +pub fn branch(@1: Self) -> ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause1::parent_clause1, @TraitClause0::parent_clause2] where [@TraitClause0]: Try, @@ -314,12 +341,13 @@ where // Full name: core::ops::try_trait::Residual pub trait Residual where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, + Self::parent_clause3::Output = O, + Self::parent_clause3::Residual = Self, { - parent_clause0 : [@TraitClause0]: Sized - parent_clause1 : [@TraitClause1]: Sized - parent_clause2 : [@TraitClause2]: Try + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized + parent_clause2 : [@TraitClause2]: Sized + parent_clause3 : [@TraitClause3]: Try type TryType } @@ -341,7 +369,8 @@ impl<'a, T> Iterator for Iter<'a, T>[@TraitClause0] where [@TraitClause0]: Sized, { - parent_clause0 = Sized<&'_ (T)> + parent_clause0 = MetaSized[@TraitClause0]> + parent_clause1 = Sized<&'_ (T)> type Item = &'a (T) fn next<'_0> = {impl Iterator for Iter<'a, T>[@TraitClause0]}::next<'a, '_0_0, T>[@TraitClause0] } diff --git a/charon/tests/ui/unsupported/unbound-lifetime.out b/charon/tests/ui/unsupported/unbound-lifetime.out index 0fd811e24..07cdc4ecc 100644 --- a/charon/tests/ui/unsupported/unbound-lifetime.out +++ b/charon/tests/ui/unsupported/unbound-lifetime.out @@ -2,9 +2,12 @@ error[E0261]: use of undeclared lifetime name `'a` --> tests/ui/unsupported/unbound-lifetime.rs:5:13 | 5 | fn get(_x: &'a u32) {} - | - ^^ undeclared lifetime - | | - | help: consider introducing lifetime `'a` here: `<'a>` + | ^^ undeclared lifetime + | +help: consider introducing lifetime `'a` here + | +5 | fn get<'a>(_x: &'a u32) {} + | ++++ error: Unexpected region kind: Region { kind: ReError(ErrorGuaranteed { todo: "ErrorGuaranteed(())" }) } --> tests/ui/unsupported/unbound-lifetime.rs:5:1 diff --git a/flake.lock b/flake.lock index 822b44555..09e06fcc9 100644 --- a/flake.lock +++ b/flake.lock @@ -79,17 +79,17 @@ ] }, "locked": { - "lastModified": 1748399823, - "narHash": "sha256-kahD8D5hOXOsGbNdoLLnqCL887cjHkx98Izc37nDjlA=", + "lastModified": 1751338093, + "narHash": "sha256-/yd9nPcTfUZPFtwjRbdB5yGLdt3LTPqz6Ja63Joiahs=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "d68a69dc71bc19beb3479800392112c2f6218159", + "rev": "6cfb7821732dac2d3e2dea857a5613d3b856c20c", "type": "github" }, "original": { "owner": "oxalica", "repo": "rust-overlay", - "rev": "d68a69dc71bc19beb3479800392112c2f6218159", + "rev": "6cfb7821732dac2d3e2dea857a5613d3b856c20c", "type": "github" } }, diff --git a/flake.nix b/flake.nix index 3568c3ead..cb366e205 100644 --- a/flake.nix +++ b/flake.nix @@ -8,7 +8,7 @@ rust-overlay = { # We pin a specific commit because we require a relatively recent version # and flake dependents don't look at our flake.lock. - url = "github:oxalica/rust-overlay/d68a69dc71bc19beb3479800392112c2f6218159"; + url = "github:oxalica/rust-overlay/6cfb7821732dac2d3e2dea857a5613d3b856c20c"; inputs.nixpkgs.follows = "nixpkgs"; }; crane.url = "github:ipetkov/crane"; diff --git a/scripts/ci-check-hax-commit.sh b/scripts/ci-check-hax-commit.sh index ff29397c2..0322b6a21 100755 --- a/scripts/ci-check-hax-commit.sh +++ b/scripts/ci-check-hax-commit.sh @@ -1,20 +1,20 @@ #!/usr/bin/env bash -# Check that we're using a hax commit that's merged into hax main. +# Check that we're using a hax commit that's merged into main. HAX_COMMIT="$(toml2json charon/Cargo.lock | jq -r \ '.package[] | select(.name == "hax-frontend-exporter").source - | capture("^git\\+https://github.com/cryspen/hax\\?branch=(?[a-z]+)#(?[a-f0-9]+)$") + | capture("^git\\+https://github.com/(cryspen|AeneasVerif)/hax\\?branch=(?[a-z]+)#(?[a-f0-9]+)$") | select(.branch == "main") | .commit ')" echo "This PR uses hax commit $HAX_COMMIT" -git clone https://github.com/cryspen/hax +git clone https://github.com/AeneasVerif/hax cd hax HAX_MAIN="$(git rev-parse HEAD)" if ! git merge-base --is-ancestor "$HAX_COMMIT" "$HAX_MAIN"; then - echo "Error: commit $HAX_COMMIT is not merged into hax's main branch." + echo "Error: commit $HAX_COMMIT is not merged into the main branch of AeneasVerif/hax." exit 1 fi

, [@TraitClause1]: FnMut, [@TraitClause2]: Sized, [@TraitClause3]: ExactSizeIterator, [@TraitClause4]: DoubleEndedIterator, @TraitClause1_1::parent_clause1::Output = bool> = core::iter::traits::iterator::Iterator::rposition<'_0_0, Self, P>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn max<[@TraitClause0]: Sized, [@TraitClause1]: Ord> = core::iter::traits::iterator::Iterator::max[Self, @TraitClause0_0, @TraitClause0_1] fn min<[@TraitClause0]: Sized, [@TraitClause1]: Ord> = core::iter::traits::iterator::Iterator::min[Self, @TraitClause0_0, @TraitClause0_1] - fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = max_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn max_by, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = max_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = min_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] - fn min_by, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = Ordering> = min_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn max_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = max_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max_by, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = max_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn min_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Ord, [@TraitClause3]: Sized, [@TraitClause4]: for<'_0> FnMut, for<'_0> @TraitClause1_4::parent_clause1::Output = B> = min_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn min_by, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = Ordering> = min_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn rev<[@TraitClause0]: Sized, [@TraitClause1]: DoubleEndedIterator> = rev[Self, @TraitClause0_0, @TraitClause0_1] fn unzip, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: Default, [@TraitClause5]: Extend, [@TraitClause6]: Default, [@TraitClause7]: Extend, [@TraitClause8]: Sized, [@TraitClause9]: Iterator, Self::Item = (A, B)> = unzip[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] fn copied<'a, T, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Iterator, [@TraitClause3]: Copy, T : 'a, Self::Item = &'a (T)> = copied<'a, Self, T>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] @@ -437,19 +473,19 @@ pub trait Iterator fn sum, [@TraitClause1]: Sized, [@TraitClause2]: Sum> = core::iter::traits::iterator::Iterator::sum[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn product, [@TraitClause1]: Sized, [@TraitClause2]: Product> = core::iter::traits::iterator::Iterator::product[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] fn cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: Ord, [@TraitClause3]: Sized, @TraitClause1_1::Item = Self::Item> = core::iter::traits::iterator::Iterator::cmp[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = Ordering> = cmp_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = Ordering> = cmp_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn partial_cmp, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::partial_cmp[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = Option[Sized]> = partial_cmp_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partial_cmp_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = Option[Sized]> = partial_cmp_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn eq, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::eq[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause0::Output = bool> = eq_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn eq_by, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: IntoIterator, [@TraitClause4]: FnMut, @TraitClause1_4::parent_clause1::Output = bool> = eq_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn ne, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialEq, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::ne[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn lt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::lt[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn le, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::le[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn gt, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::gt[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn ge, [@TraitClause1]: IntoIterator, [@TraitClause2]: PartialOrd, [@TraitClause3]: Sized> = core::iter::traits::iterator::Iterator::ge[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] fn is_sorted<[@TraitClause0]: Sized, [@TraitClause1]: PartialOrd> = is_sorted[Self, @TraitClause0_0, @TraitClause0_1] - fn is_sorted_by, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::is_sorted_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] - fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = is_sorted_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_sorted_by, [@TraitClause1]: Sized, [@TraitClause2]: for<'_0, '_1> FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause1::Output = bool> = core::iter::traits::iterator::Iterator::is_sorted_by[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn is_sorted_by_key, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, [@TraitClause4]: PartialOrd, @TraitClause1_3::parent_clause1::Output = K> = is_sorted_by_key[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] fn __iterator_get_unchecked<'_0, [@TraitClause0]: TrustedRandomAccessNoCoerce> = core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0_0, Self>[Self, @TraitClause0_0] } @@ -465,7 +501,8 @@ pub trait FromIterator // Full name: core::iter::traits::collect::Extend pub trait Extend { - parent_clause0 : [@TraitClause0]: Sized + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Sized fn extend<'_0, T, [@TraitClause0]: Sized, [@TraitClause1]: IntoIterator, @TraitClause1_1::Item = A> = extend<'_0_0, Self, A, T>[Self, @TraitClause0_0, @TraitClause0_1] fn extend_one<'_0> = extend_one<'_0_0, Self, A>[Self] fn extend_reserve<'_0> = extend_reserve<'_0_0, Self, A>[Self] @@ -476,19 +513,21 @@ pub trait Extend #[lang_item("DoubleEndedIterator")] pub trait DoubleEndedIterator { - parent_clause0 : [@TraitClause0]: Iterator + parent_clause0 : [@TraitClause0]: MetaSized + parent_clause1 : [@TraitClause1]: Iterator fn next_back<'_0> = next_back<'_0_0, Self>[Self] fn advance_back_by<'_0> = advance_back_by<'_0_0, Self>[Self] fn nth_back<'_0> = nth_back<'_0_0, Self>[Self] - fn try_rfold<'_0, B, F, R, [@TraitClause0]: Sized, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: Sized, [@TraitClause4]: FnMut, [@TraitClause5]: Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = try_rfold<'_0_0, Self, B, F, R>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] - fn rfold, [@TraitClause1]: Sized, [@TraitClause2]: Sized, [@TraitClause3]: FnMut, @TraitClause1_3::parent_clause0::Output = B> = rfold[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] - fn rfind<'_0, P, [@TraitClause0]: Sized