diff --git a/charon-ml/src/CharonVersion.ml b/charon-ml/src/CharonVersion.ml index dbcd7a85c..4c2dc5406 100644 --- a/charon-ml/src/CharonVersion.ml +++ b/charon-ml/src/CharonVersion.ml @@ -1,3 +1,3 @@ (* This is an automatically generated file, generated from `charon/Cargo.toml`. *) (* To re-generate this file, rune `make` in the root directory *) -let supported_charon_version = "0.1.66" +let supported_charon_version = "0.1.67" diff --git a/charon-ml/src/generated/Generated_GAst.ml b/charon-ml/src/generated/Generated_GAst.ml index 256622b83..f198e8673 100644 --- a/charon-ml/src/generated/Generated_GAst.ml +++ b/charon-ml/src/generated/Generated_GAst.ml @@ -413,6 +413,10 @@ and cli_options = { (** Usually we skip the bodies of foreign methods and structs with private fields. When this flag is on, we don't. *) + translate_all_methods : bool; + (** Usually we skip the provided methods that aren't used. When this flag is on, we translate + them all. + *) included : string list; (** Whitelist of items to translate. These use the name-matcher syntax. *) opaque : string list; diff --git a/charon-ml/src/generated/Generated_GAstOfJson.ml b/charon-ml/src/generated/Generated_GAstOfJson.ml index 3730b54cb..226ee9eb6 100644 --- a/charon-ml/src/generated/Generated_GAstOfJson.ml +++ b/charon-ml/src/generated/Generated_GAstOfJson.ml @@ -1624,6 +1624,7 @@ and cli_options_of_json (ctx : of_json_ctx) (js : json) : ("use_polonius", use_polonius); ("no_code_duplication", no_code_duplication); ("extract_opaque_bodies", extract_opaque_bodies); + ("translate_all_methods", translate_all_methods); ("include", include_); ("opaque", opaque); ("exclude", exclude); @@ -1654,6 +1655,7 @@ and cli_options_of_json (ctx : of_json_ctx) (js : json) : let* use_polonius = bool_of_json ctx use_polonius in let* no_code_duplication = bool_of_json ctx no_code_duplication in let* extract_opaque_bodies = bool_of_json ctx extract_opaque_bodies in + let* translate_all_methods = bool_of_json ctx translate_all_methods in let* included = list_of_json string_of_json ctx include_ in let* opaque = list_of_json string_of_json ctx opaque in let* exclude = list_of_json string_of_json ctx exclude in @@ -1687,6 +1689,7 @@ and cli_options_of_json (ctx : of_json_ctx) (js : json) : use_polonius; no_code_duplication; extract_opaque_bodies; + translate_all_methods; included; opaque; exclude; diff --git a/charon/Cargo.lock b/charon/Cargo.lock index 05564fe47..fe9ada800 100644 --- a/charon/Cargo.lock +++ b/charon/Cargo.lock @@ -201,7 +201,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "charon" -version = "0.1.66" +version = "0.1.67" dependencies = [ "annotate-snippets", "anstream", diff --git a/charon/Cargo.toml b/charon/Cargo.toml index 5cd39c140..8157b901a 100644 --- a/charon/Cargo.toml +++ b/charon/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "charon" -version = "0.1.66" +version = "0.1.67" authors = ["Son Ho "] edition = "2021" license = "Apache-2.0" diff --git a/charon/src/bin/charon-driver/translate/translate_ctx.rs b/charon/src/bin/charon-driver/translate/translate_ctx.rs index 403e3e37c..22c014966 100644 --- a/charon/src/bin/charon-driver/translate/translate_ctx.rs +++ b/charon/src/bin/charon-driver/translate/translate_ctx.rs @@ -52,6 +52,9 @@ pub struct TranslateOptions { pub item_opacities: Vec<(NamePattern, ItemOpacity)>, /// List of traits for which we transform associated types to type parameters. pub remove_associated_types: Vec, + /// Usually we skip the provided methods that aren't used. When this flag is on, we translate + /// them all. + pub translate_all_methods: bool, } impl TranslateOptions { @@ -123,6 +126,7 @@ impl TranslateOptions { mir_level, item_opacities, remove_associated_types, + translate_all_methods: options.translate_all_methods, } } diff --git a/charon/src/bin/charon-driver/translate/translate_traits.rs b/charon/src/bin/charon-driver/translate/translate_traits.rs index bc6d0cf77..83a37f7bb 100644 --- a/charon/src/bin/charon-driver/translate/translate_traits.rs +++ b/charon/src/bin/charon-driver/translate/translate_traits.rs @@ -8,7 +8,6 @@ use hax_frontend_exporter as hax; use indexmap::IndexMap; use itertools::Itertools; use rustc_hir::def_id::DefId; -use std::collections::HashMap; use std::mem; use std::sync::Arc; @@ -101,12 +100,14 @@ impl BodyTransCtx<'_, '_> { // `remove_unused_methods` pass. // FIXME: this triggers the translation of traits used in the method // clauses, despite the fact that we may end up not needing them. - let fun_id = - if hax_item.has_value && !item_meta.opacity.is_transparent() { - bt_ctx.register_fun_decl_id_no_enqueue(item_span, item_def_id) - } else { - bt_ctx.register_fun_decl_id(item_span, item_def_id) - }; + let fun_id = if bt_ctx.t_ctx.options.translate_all_methods + || item_meta.opacity.is_transparent() + || !hax_item.has_value + { + bt_ctx.register_fun_decl_id(item_span, item_def_id) + } else { + bt_ctx.register_fun_decl_id_no_enqueue(item_span, item_def_id) + }; // TODO: there's probably a cleaner way to write this assert_eq!(bt_ctx.binding_levels.len(), 2); @@ -278,13 +279,14 @@ impl BodyTransCtx<'_, '_> { // We insert the `Binder` unconditionally here, and // remove the ones that correspond to untranslated functions in // the `remove_unused_methods` pass. - let fun_id = if *is_override - && !item_meta.opacity.is_transparent() + let fun_id = if bt_ctx.t_ctx.options.translate_all_methods + || item_meta.opacity.is_transparent() + || !*is_override { + bt_ctx.register_fun_decl_id(item_span, item_def_id) + } else { bt_ctx .register_fun_decl_id_no_enqueue(item_span, item_def_id) - } else { - bt_ctx.register_fun_decl_id(item_span, item_def_id) }; // TODO: there's probably a cleaner way to write this diff --git a/charon/src/options.rs b/charon/src/options.rs index 075762cb0..67fe073aa 100644 --- a/charon/src/options.rs +++ b/charon/src/options.rs @@ -120,6 +120,11 @@ pub struct CliOpts { #[clap(long = "extract-opaque-bodies")] #[serde(default)] pub extract_opaque_bodies: bool, + /// Usually we skip the provided methods that aren't used. When this flag is on, we translate + /// them all. + #[clap(long = "translate-all-methods")] + #[serde(default)] + pub translate_all_methods: bool, /// Whitelist of items to translate. These use the name-matcher syntax. #[clap( long = "include", diff --git a/charon/tests/ui/iterator.out b/charon/tests/ui/iterator.out new file mode 100644 index 000000000..e04ec67c0 --- /dev/null +++ b/charon/tests/ui/iterator.out @@ -0,0 +1,1761 @@ +# Final LLBC before serialization: + +trait core::marker::Sized + +opaque type core::array::iter::IntoIter + where + [@TraitClause0]: core::marker::Sized, + +enum core::option::Option + where + [@TraitClause0]: core::marker::Sized, + = +| None() +| Some(T) + + +opaque type core::slice::iter::Iter<'a, T> + where + [@TraitClause0]: core::marker::Sized, + T : 'a, + T : 'a, + +opaque type core::slice::iter::Chunks<'a, T> + where + [@TraitClause0]: core::marker::Sized, + T : 'a, + T : 'a, + +opaque type core::slice::iter::ChunksExact<'a, T> + where + [@TraitClause0]: core::marker::Sized, + T : 'a, + T : 'a, + +enum core::panicking::AssertKind = +| Eq() +| Ne() +| Match() + + +opaque type core::fmt::Arguments<'a> + where + 'a : 'a, + +fn core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter(@1: Array) -> core::array::iter::IntoIter[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +enum core::result::Result + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + = +| Ok(T) +| Err(E) + + +trait core::clone::Clone +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self> +} + +trait core::marker::Copy +{ + parent_clause0 : [@TraitClause0]: core::clone::Clone +} + +trait core::num::nonzero::private::Sealed + +trait core::num::nonzero::ZeroablePrimitive +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Copy + parent_clause2 : [@TraitClause2]: core::num::nonzero::private::Sealed + parent_clause3 : [@TraitClause3]: core::marker::Sized + parent_clause4 : [@TraitClause4]: core::marker::Copy + type NonZeroInner +} + +opaque type core::num::nonzero::NonZero + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::num::nonzero::ZeroablePrimitive, + +fn core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0>(@1: &'_0 (usize)) -> usize + +impl core::clone::impls::{impl core::clone::Clone for usize}#5 : core::clone::Clone +{ + parent_clause0 = core::marker::Sized + fn clone<'_0> = core::clone::impls::{impl core::clone::Clone for usize}#5::clone<'_0_0> +} + +impl core::marker::{impl core::marker::Copy for usize}#37 : core::marker::Copy +{ + parent_clause0 = core::clone::impls::{impl core::clone::Clone for usize}#5 +} + +impl core::num::nonzero::{impl core::num::nonzero::private::Sealed for usize}#25 : core::num::nonzero::private::Sealed + +opaque type core::num::nonzero::private::NonZeroUsizeInner + +fn core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone<'_0>(@1: &'_0 (core::num::nonzero::private::NonZeroUsizeInner)) -> core::num::nonzero::private::NonZeroUsizeInner + +impl core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26 : core::clone::Clone +{ + parent_clause0 = core::marker::Sized + fn clone<'_0> = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26::clone<'_0_0> +} + +impl core::num::nonzero::private::{impl core::marker::Copy for core::num::nonzero::private::NonZeroUsizeInner}#27 : core::marker::Copy +{ + parent_clause0 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26 +} + +impl core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26 : core::num::nonzero::ZeroablePrimitive +{ + parent_clause0 = core::marker::Sized + parent_clause1 = core::marker::{impl core::marker::Copy for usize}#37 + parent_clause2 = core::num::nonzero::{impl core::num::nonzero::private::Sealed for usize}#25 + parent_clause3 = core::marker::Sized + parent_clause4 = core::num::nonzero::private::{impl core::marker::Copy for core::num::nonzero::private::NonZeroUsizeInner}#27 + type NonZeroInner = core::num::nonzero::private::NonZeroUsizeInner +} + +opaque type core::iter::adapters::step_by::StepBy + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::chain::Chain + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + +opaque type core::iter::adapters::zip::Zip + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + +trait core::marker::Tuple + +trait core::ops::function::FnOnce +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Tuple + parent_clause2 : [@TraitClause2]: core::marker::Sized + type Output + fn call_once = core::ops::function::FnOnce::call_once +} + +trait core::ops::function::FnMut +{ + parent_clause0 : [@TraitClause0]: core::ops::function::FnOnce + parent_clause1 : [@TraitClause1]: core::marker::Sized + parent_clause2 : [@TraitClause2]: core::marker::Tuple + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> +} + +opaque type core::iter::adapters::map::Map + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + +opaque type core::iter::adapters::filter::Filter + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + +opaque type core::iter::adapters::filter_map::FilterMap + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + +opaque type core::iter::adapters::enumerate::Enumerate + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::skip_while::SkipWhile + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + +opaque type core::iter::adapters::take_while::TakeWhile + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + +opaque type core::iter::adapters::map_while::MapWhile + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + +opaque type core::iter::adapters::skip::Skip + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::take::Take + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::scan::Scan + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + +opaque type core::iter::adapters::fuse::Fuse + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::inspect::Inspect + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + +trait core::ops::try_trait::FromResidual +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + fn from_residual = core::ops::try_trait::FromResidual::from_residual +} + +enum core::ops::control_flow::ControlFlow + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + = +| Continue(C) +| Break(B) + + +trait core::ops::try_trait::Try +{ + parent_clause0 : [@TraitClause0]: core::ops::try_trait::FromResidual + parent_clause1 : [@TraitClause1]: core::marker::Sized + parent_clause2 : [@TraitClause2]: core::marker::Sized + type Output + type Residual + fn from_output = core::ops::try_trait::Try::from_output + fn branch = core::ops::try_trait::Try::branch +} + +trait core::ops::try_trait::Residual +where + Self::parent_clause2::Output = O, + Self::parent_clause2::Residual = Self, +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Sized + parent_clause2 : [@TraitClause2]: core::ops::try_trait::Try + type TryType +} + +trait core::default::Default +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + fn default = core::default::Default::default +} + +trait core::cmp::PartialEq +{ + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs> +} + +trait core::cmp::Eq +{ + parent_clause0 : [@TraitClause0]: core::cmp::PartialEq + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self> +} + +enum core::cmp::Ordering = +| Less() +| Equal() +| Greater() + + +trait core::cmp::PartialOrd +{ + parent_clause0 : [@TraitClause0]: core::cmp::PartialEq + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs> + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs> + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs> + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs> +} + +trait core::cmp::Ord +{ + parent_clause0 : [@TraitClause0]: core::cmp::Eq + parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[@TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[@TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[@TraitClause0_0] +} + +opaque type core::iter::adapters::rev::Rev + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::copied::Copied + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::cloned::Cloned + where + [@TraitClause0]: core::marker::Sized, + +opaque type core::iter::adapters::cycle::Cycle + where + [@TraitClause0]: core::marker::Sized, + +trait core::iter::traits::iterator::Iterator +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + type Item + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self> + fn next_chunk<'_0, const N : usize, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::next_chunk<'_0_0, Self, const N : usize>[@TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self> + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[@TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[@TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self> + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self> + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[@TraitClause0_0] + fn chain, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator, @TraitClause1_2::Item = Self::Item> = core::iter::traits::iterator::Iterator::chain[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[@TraitClause0_0, @TraitClause0_1] + fn intersperse_with, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = Self::Item> = core::iter::traits::iterator::Iterator::intersperse_with[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::map[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn for_each, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = ()> = core::iter::traits::iterator::Iterator::for_each[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::filter[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn filter_map, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = core::option::Option[@TraitClause1_0]> = core::iter::traits::iterator::Iterator::filter_map[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[@TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[@TraitClause0_0] + fn skip_while, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::skip_while[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn take_while, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::take_while[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn map_while, [@TraitClause1]: core::marker::Sized

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

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

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

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

, [@TraitClause1]: core::ops::function::FnMut, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::exact_size::ExactSizeIterator, [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator, @TraitClause1_1::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::rposition<'_0_0, Self, P>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::max[@TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[@TraitClause0_0, @TraitClause0_1] + fn max_by_key, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::cmp::Ord, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::max_by_key[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn max_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = core::cmp::Ordering> = core::iter::traits::iterator::Iterator::max_by[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn min_by_key, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::cmp::Ord, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_4::parent_clause0::Output = B> = core::iter::traits::iterator::Iterator::min_by_key[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn min_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = core::cmp::Ordering> = core::iter::traits::iterator::Iterator::min_by[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rev<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::double_ended::DoubleEndedIterator> = core::iter::traits::iterator::Iterator::rev[@TraitClause0_0, @TraitClause0_1] + fn unzip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: core::default::Default, [@TraitClause5]: core::iter::traits::collect::Extend, [@TraitClause6]: core::default::Default, [@TraitClause7]: core::iter::traits::collect::Extend, [@TraitClause8]: core::marker::Sized, [@TraitClause9]: core::iter::traits::iterator::Iterator, Self::Item = (A, B)> = core::iter::traits::iterator::Iterator::unzip[@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]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::iterator::Iterator, [@TraitClause3]: core::marker::Copy, T : 'a, Self::Item = &'a (T)> = core::iter::traits::iterator::Iterator::copied<'a, Self, T>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cloned<'a, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::iterator::Iterator, [@TraitClause3]: core::clone::Clone, T : 'a, Self::Item = &'a (T)> = core::iter::traits::iterator::Iterator::cloned<'a, Self, T>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[@TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[@TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn cmp, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::Ord, [@TraitClause3]: core::marker::Sized, @TraitClause1_1::Item = Self::Item> = core::iter::traits::iterator::Iterator::cmp[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cmp_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = core::cmp::Ordering> = core::iter::traits::iterator::Iterator::cmp_by[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn partial_cmp, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::partial_cmp[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn partial_cmp_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = core::option::Option[core::marker::Sized]> = core::iter::traits::iterator::Iterator::partial_cmp_by[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn eq, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialEq, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::eq[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn eq_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::iter::traits::collect::IntoIterator, [@TraitClause4]: core::ops::function::FnMut, @TraitClause1_4::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::eq_by[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn ne, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialEq, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::ne[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn lt, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::lt[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn le, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::le[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn gt, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::gt[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn ge, [@TraitClause1]: core::iter::traits::collect::IntoIterator, [@TraitClause2]: core::cmp::PartialOrd, [@TraitClause3]: core::marker::Sized> = core::iter::traits::iterator::Iterator::ge[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn is_sorted<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::PartialOrd> = core::iter::traits::iterator::Iterator::is_sorted[@TraitClause0_0, @TraitClause0_1] + fn is_sorted_by, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::iterator::Iterator::is_sorted_by[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn is_sorted_by_key, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, [@TraitClause4]: core::cmp::PartialOrd, @TraitClause1_3::parent_clause0::Output = K> = core::iter::traits::iterator::Iterator::is_sorted_by_key[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn __iterator_get_unchecked<'_0, [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce> = core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0_0, Self>[@TraitClause0_0] +} + +trait core::iter::traits::collect::IntoIterator +where + Self::parent_clause2::Item = Self::Item, +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Sized + parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator + type Item + type IntoIter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter +} + +opaque type core::iter::adapters::intersperse::Intersperse + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + [@TraitClause2]: core::clone::Clone<@TraitClause1::Item>, + +opaque type core::iter::adapters::intersperse::IntersperseWith + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + +opaque type core::iter::adapters::peekable::Peekable + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + +opaque type core::iter::adapters::flatten::FlatMap + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + +opaque type core::iter::adapters::flatten::Flatten + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + [@TraitClause2]: core::iter::traits::collect::IntoIterator<@TraitClause1::Item>, + +opaque type core::iter::adapters::map_windows::MapWindows + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + +trait core::iter::traits::collect::FromIterator +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Sized + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] +} + +trait core::iter::traits::collect::Extend +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + fn extend<'_0, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::Extend::extend<'_0_0, Self, A, T>[@TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A> + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A> + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[@TraitClause0_0] +} + +trait core::iter::traits::double_ended::DoubleEndedIterator +{ + parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self> + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, Self> + fn try_rfold<'_0, B, F, R, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::marker::Sized, [@TraitClause4]: core::ops::function::FnMut, [@TraitClause5]: core::ops::try_trait::Try, @TraitClause1_4::parent_clause0::Output = R, @TraitClause1_5::Output = B> = core::iter::traits::double_ended::DoubleEndedIterator::try_rfold<'_0_0, Self, B, F, R>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5] + fn rfold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = B> = core::iter::traits::double_ended::DoubleEndedIterator::rfold[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn rfind<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::iter::traits::double_ended::DoubleEndedIterator::rfind<'_0_0, Self, P>[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] +} + +trait core::iter::traits::exact_size::ExactSizeIterator +{ + parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self> + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self> +} + +opaque type core::iter::adapters::array_chunks::ArrayChunks + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + +trait core::iter::traits::accum::Sum +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Sized + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] +} + +trait core::iter::traits::accum::Product +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::marker::Sized + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] +} + +trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + const MAY_HAVE_SIDE_EFFECT : bool + fn size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[@TraitClause0_0] +} + +fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + +fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0])) -> core::option::Option[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::size_hint<'_0, T, const N : usize>(@1: &'_0 (core::array::iter::IntoIter[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) +where + [@TraitClause0]: core::marker::Sized, + +fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::count(@1: core::array::iter::IntoIter[@TraitClause0]) -> usize +where + [@TraitClause0]: core::marker::Sized, + +fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::last(@1: core::array::iter::IntoIter[@TraitClause0]) -> core::option::Option[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::advance_by<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0]), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::fold(@1: core::array::iter::IntoIter[@TraitClause0], @2: Acc, @3: Fold) -> Acc +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = Acc, + +unsafe fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::__iterator_get_unchecked<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0]), @2: usize) -> T +where + [@TraitClause0]: core::marker::Sized, + +impl core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2 : core::iter::traits::iterator::Iterator[@TraitClause0]> +where + [@TraitClause0]: core::marker::Sized, +{ + parent_clause0 = @TraitClause0 + type Item = T + fn next<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_0_0, T, const N : usize>[@TraitClause0] + fn size_hint<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::size_hint<'_0_0, T, const N : usize>[@TraitClause0] + fn count = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::count[@TraitClause0] + fn last = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::last[@TraitClause0] + fn advance_by<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::advance_by<'_0_0, T, const N : usize>[@TraitClause0] + fn fold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = Acc> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::fold[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn __iterator_get_unchecked<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::__iterator_get_unchecked<'_0_0, T, const N : usize>[@TraitClause0] +} + +fn core::slice::{Slice}::iter<'_0, T>(@1: &'_0 (Slice)) -> core::slice::iter::Iter<'_0, T>[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0])) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::size_hint<'a, '_1, T>(@1: &'_1 (core::slice::iter::Iter<'a, T>[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::count<'a, T>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0]) -> usize +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::last<'a, T>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0]) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::advance_by<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::nth<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: usize) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::for_each<'a, T, F>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0], @2: F) +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized[@TraitClause0]>, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = (), + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::fold<'a, T, B, F>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0], @2: B, @3: F) -> B +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = B, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::all<'a, '_1, T, F>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized[@TraitClause0]>, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = bool, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::any<'a, '_1, T, F>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized[@TraitClause0]>, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = bool, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find<'a, '_1, T, P>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: P) -> core::option::Option<&'_ (T)>[core::marker::Sized<&'_ (T)>] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized[@TraitClause0]>, + [@TraitClause3]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause3::parent_clause0::Output = bool, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find_map<'a, '_1, T, B, F>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: F) -> core::option::Option[@TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized[@TraitClause0]>, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::position<'a, '_1, T, P>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: P) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized[@TraitClause0]>, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = bool, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::rposition<'a, '_1, T, P>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: P) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::ops::function::FnMut, + [@TraitClause3]: core::marker::Sized[@TraitClause0]>, + [@TraitClause4]: core::iter::traits::exact_size::ExactSizeIterator[@TraitClause0]>, + [@TraitClause5]: core::iter::traits::double_ended::DoubleEndedIterator[@TraitClause0]>, + @TraitClause2::parent_clause0::Output = bool, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::is_sorted_by<'a, T, F>(@1: core::slice::iter::Iter<'a, T>[@TraitClause0], @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized[@TraitClause0]>, + [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, + for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + +unsafe fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0]), @2: usize) -> &'_ (T) +where + [@TraitClause0]: core::marker::Sized, + +impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> +where + [@TraitClause0]: core::marker::Sized, +{ + parent_clause0 = core::marker::Sized<&'_ (T)> + type Item = &'a (T) + fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'a, '_0_0, T>[@TraitClause0] + fn size_hint<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::size_hint<'a, '_0_0, T>[@TraitClause0] + fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::count<'a, T>[@TraitClause0] + fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::last<'a, T>[@TraitClause0] + fn advance_by<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::advance_by<'a, '_0_0, T>[@TraitClause0] + fn nth<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::nth<'a, '_0_0, T>[@TraitClause0] + fn for_each, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = ()> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::for_each<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn fold, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = B> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::fold<'a, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn all<'_0, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::all<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn any<'_0, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::any<'a, '_0_0, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: for<'_0> core::ops::function::FnMut, for<'_0> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn find_map<'_0, B, F, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::marker::Sized[@TraitClause0]>, [@TraitClause3]: core::ops::function::FnMut, @TraitClause1_3::parent_clause0::Output = core::option::Option[@TraitClause1_0]> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::find_map<'a, '_0_0, T, B, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn position<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: core::ops::function::FnMut, @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::position<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn rposition<'_0, P, [@TraitClause0]: core::marker::Sized

, [@TraitClause1]: core::ops::function::FnMut, [@TraitClause2]: core::marker::Sized[@TraitClause0]>, [@TraitClause3]: core::iter::traits::exact_size::ExactSizeIterator[@TraitClause0]>, [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator[@TraitClause0]>, @TraitClause1_1::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::rposition<'a, '_0_0, T, P>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4] + fn is_sorted_by, [@TraitClause1]: core::marker::Sized[@TraitClause0]>, [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, for<'_0, '_1> @TraitClause1_2::parent_clause0::Output = bool> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::is_sorted_by<'a, T, F>[@TraitClause0, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn __iterator_get_unchecked<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] +} + +fn core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_0, '_1>(@1: &'_1 mut (i32), @2: &'_0 (i32)) + +fn core::slice::{Slice}::chunks<'_0, T>(@1: &'_0 (Slice), @2: usize) -> core::slice::iter::Chunks<'_0, T>[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0])) -> core::option::Option<&'a (Slice)>[core::marker::Sized<&'_ (Slice)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::size_hint<'a, '_1, T>(@1: &'_1 (core::slice::iter::Chunks<'a, T>[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::count<'a, T>(@1: core::slice::iter::Chunks<'a, T>[@TraitClause0]) -> usize +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::last<'a, T>(@1: core::slice::iter::Chunks<'a, T>[@TraitClause0]) -> core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::nth<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0]), @2: usize) -> core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>] +where + [@TraitClause0]: core::marker::Sized, + +unsafe fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0]), @2: usize) -> &'_ (Slice) +where + [@TraitClause0]: core::marker::Sized, + +impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> +where + [@TraitClause0]: core::marker::Sized, +{ + parent_clause0 = core::marker::Sized<&'_ (Slice)> + type Item = &'a (Slice) + fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'a, '_0_0, T>[@TraitClause0] + fn size_hint<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::size_hint<'a, '_0_0, T>[@TraitClause0] + fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::count<'a, T>[@TraitClause0] + fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::last<'a, T>[@TraitClause0] + fn nth<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::nth<'a, '_0_0, T>[@TraitClause0] + fn __iterator_get_unchecked<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] +} + +fn core::slice::{Slice}::chunks_exact<'_0, T>(@1: &'_0 (Slice), @2: usize) -> core::slice::iter::ChunksExact<'_0, T>[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0])) -> core::option::Option<&'a (Slice)>[core::marker::Sized<&'_ (Slice)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::size_hint<'a, '_1, T>(@1: &'_1 (core::slice::iter::ChunksExact<'a, T>[@TraitClause0])) -> (usize, core::option::Option[core::marker::Sized]) +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::count<'a, T>(@1: core::slice::iter::ChunksExact<'a, T>[@TraitClause0]) -> usize +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::last<'a, T>(@1: core::slice::iter::ChunksExact<'a, T>[@TraitClause0]) -> core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::nth<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0]), @2: usize) -> core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>] +where + [@TraitClause0]: core::marker::Sized, + +unsafe fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::__iterator_get_unchecked<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0]), @2: usize) -> &'_ (Slice) +where + [@TraitClause0]: core::marker::Sized, + +impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> +where + [@TraitClause0]: core::marker::Sized, +{ + parent_clause0 = core::marker::Sized<&'_ (Slice)> + type Item = &'a (Slice) + fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'a, '_0_0, T>[@TraitClause0] + fn size_hint<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::size_hint<'a, '_0_0, T>[@TraitClause0] + fn count = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::count<'a, T>[@TraitClause0] + fn last = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::last<'a, T>[@TraitClause0] + fn nth<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::nth<'a, '_0_0, T>[@TraitClause0] + fn __iterator_get_unchecked<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::__iterator_get_unchecked<'a, '_0_0, T>[@TraitClause0] +} + +fn test_crate::main() +{ + let @0: (); // return + let a@1: Array; // local + let i@2: i32; // local + let @3: (); // anonymous local + let @4: core::array::iter::IntoIter[core::marker::Sized]; // anonymous local + let @5: core::array::iter::IntoIter[core::marker::Sized]; // anonymous local + let @6: Array; // anonymous local + let iter@7: core::array::iter::IntoIter[core::marker::Sized]; // local + let @8: (); // anonymous local + let @9: (); // anonymous local + let @10: core::option::Option[core::marker::Sized]; // anonymous local + let @11: &'_ mut (core::array::iter::IntoIter[core::marker::Sized]); // anonymous local + let @12: &'_ mut (core::array::iter::IntoIter[core::marker::Sized]); // anonymous local + let v@13: i32; // local + let @14: i32; // anonymous local + let @15: (); // anonymous local + let @16: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // anonymous local + let @17: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // anonymous local + let @18: &'_ (Slice); // anonymous local + let @19: &'_ (Array); // anonymous local + let iter@20: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // local + let @21: (); // anonymous local + let @22: core::option::Option<&'_ (i32)>[core::marker::Sized<&'_ (i32)>]; // anonymous local + let @23: &'_ mut (core::slice::iter::Iter<'_, i32>[core::marker::Sized]); // anonymous local + let @24: &'_ mut (core::slice::iter::Iter<'_, i32>[core::marker::Sized]); // anonymous local + let v@25: &'_ (i32); // local + let @26: (); // anonymous local + let @27: &'_ mut (i32); // anonymous local + let @28: &'_ (i32); // anonymous local + let @29: (); // anonymous local + let @30: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // anonymous local + let @31: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // anonymous local + let @32: &'_ (Slice); // anonymous local + let @33: &'_ (Array); // anonymous local + let iter@34: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // local + let @35: (); // anonymous local + let @36: core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>]; // anonymous local + let @37: &'_ mut (core::slice::iter::Chunks<'_, i32>[core::marker::Sized]); // anonymous local + let @38: &'_ mut (core::slice::iter::Chunks<'_, i32>[core::marker::Sized]); // anonymous local + let @39: (); // anonymous local + let @40: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // anonymous local + let @41: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // anonymous local + let @42: &'_ (Slice); // anonymous local + let @43: &'_ (Array); // anonymous local + let iter@44: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // local + let @45: (); // anonymous local + let @46: core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>]; // anonymous local + let @47: &'_ mut (core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]); // anonymous local + let @48: &'_ mut (core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]); // anonymous local + let expected@49: i32; // local + let @50: (); // anonymous local + let @51: (&'_ (i32), &'_ (i32)); // anonymous local + let @52: &'_ (i32); // anonymous local + let @53: &'_ (i32); // anonymous local + let left_val@54: &'_ (i32); // local + let right_val@55: &'_ (i32); // local + let @56: bool; // anonymous local + let @57: i32; // anonymous local + let @58: i32; // anonymous local + let kind@59: core::panicking::AssertKind; // local + let @60: core::panicking::AssertKind; // anonymous local + let @61: &'_ (i32); // anonymous local + let @62: &'_ (i32); // anonymous local + let @63: &'_ (i32); // anonymous local + let @64: &'_ (i32); // anonymous local + let @65: core::option::Option>[core::marker::Sized>]; // anonymous local + let @66: (); // anonymous local + let @67: (); // anonymous local + let @68: (); // anonymous local + let @69: (); // anonymous local + let @70: (); // anonymous local + let @71: (); // anonymous local + let @72: (); // anonymous local + let @73: (); // anonymous local + let @74: (); // anonymous local + let @75: (); // anonymous local + let @76: (); // anonymous local + let @77: (); // anonymous local + let @78: (); // anonymous local + let @79: (); // anonymous local + + a@1 := [const (0 : i32), const (1 : i32), const (2 : i32), const (3 : i32), const (4 : i32), const (5 : i32), const (6 : i32); 7 : usize] + @fake_read(a@1) + i@2 := const (0 : i32) + @fake_read(i@2) + @6 := copy (a@1) + @5 := core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter[core::marker::Sized](move (@6)) + drop @6 + @4 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[core::marker::Sized]](move (@5)) + drop @5 + @fake_read(@4) + iter@7 := move (@4) + loop { + @12 := &mut iter@7 + @11 := &two-phase-mut *(@12) + @10 := core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_, i32, 7 : usize>[core::marker::Sized](move (@11)) + drop @11 + @fake_read(@10) + match @10 { + 0 => { + break 0 + }, + 1 => { + v@13 := copy ((@10 as variant @1).0) + @14 := copy (v@13) + i@2 := copy (i@2) + move (@14) + drop @14 + @67 := () + @9 := move (@67) + drop v@13 + drop @12 + drop @10 + drop @9 + @68 := () + @8 := move (@68) + continue 0 + }, + } + } + @66 := () + @3 := move (@66) + drop @12 + drop @10 + drop @9 + drop iter@7 + drop iter@7 + drop @4 + drop @4 + drop @3 + @19 := &a@1 + @18 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@19)) + drop @19 + @17 := core::slice::{Slice}::iter<'_, i32>[core::marker::Sized](move (@18)) + drop @18 + @16 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'_, i32>[core::marker::Sized]](move (@17)) + drop @17 + @fake_read(@16) + iter@20 := move (@16) + loop { + @24 := &mut iter@20 + @23 := &two-phase-mut *(@24) + @22 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'_, '_, i32>[core::marker::Sized](move (@23)) + drop @23 + @fake_read(@22) + match @22 { + 0 => { + break 0 + }, + 1 => { + v@25 := copy ((@22 as variant @1).0) + @27 := &two-phase-mut i@2 + @28 := copy (v@25) + @26 := core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_, '_>(move (@27), move (@28)) + drop @28 + drop @27 + drop @26 + @70 := () + @21 := move (@70) + drop v@25 + drop @24 + drop @22 + drop @21 + @71 := () + @8 := move (@71) + continue 0 + }, + } + } + @69 := () + @15 := move (@69) + drop @24 + drop @22 + drop @21 + drop iter@20 + drop @16 + drop @15 + @33 := &a@1 + @32 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@33)) + drop @33 + @31 := core::slice::{Slice}::chunks<'_, i32>[core::marker::Sized](move (@32), const (2 : usize)) + drop @32 + @30 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'_, i32>[core::marker::Sized]](move (@31)) + drop @31 + @fake_read(@30) + iter@34 := move (@30) + loop { + @38 := &mut iter@34 + @37 := &two-phase-mut *(@38) + @36 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'_, '_, i32>[core::marker::Sized](move (@37)) + drop @37 + @fake_read(@36) + match @36 { + 0 => { + break 0 + }, + 1 => { + i@2 := copy (i@2) + const (1 : i32) + @73 := () + @35 := move (@73) + drop @38 + drop @36 + drop @35 + @74 := () + @8 := move (@74) + continue 0 + }, + } + } + @72 := () + @29 := move (@72) + drop @38 + drop @36 + drop @35 + drop iter@34 + drop @30 + drop @29 + @43 := &a@1 + @42 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@43)) + drop @43 + @41 := core::slice::{Slice}::chunks_exact<'_, i32>[core::marker::Sized](move (@42), const (2 : usize)) + drop @42 + @40 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'_, i32>[core::marker::Sized]](move (@41)) + drop @41 + @fake_read(@40) + iter@44 := move (@40) + loop { + @48 := &mut iter@44 + @47 := &two-phase-mut *(@48) + @46 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'_, '_, i32>[core::marker::Sized](move (@47)) + drop @47 + @fake_read(@46) + match @46 { + 0 => { + break 0 + }, + 1 => { + i@2 := copy (i@2) + const (1 : i32) + @76 := () + @45 := move (@76) + drop @48 + drop @46 + drop @45 + @77 := () + @8 := move (@77) + continue 0 + }, + } + } + @75 := () + @39 := move (@75) + drop @48 + drop @46 + drop @45 + drop iter@44 + drop @40 + drop @39 + expected@49 := const (28 : i32) + @fake_read(expected@49) + @52 := &i@2 + @53 := &expected@49 + @51 := (move (@52), move (@53)) + drop @53 + drop @52 + @fake_read(@51) + left_val@54 := copy ((@51).0) + right_val@55 := copy ((@51).1) + @57 := copy (*(left_val@54)) + @58 := copy (*(right_val@55)) + @56 := move (@57) == move (@58) + if move (@56) { + } + else { + drop @58 + drop @57 + kind@59 := core::panicking::AssertKind::Eq { } + @fake_read(kind@59) + @60 := move (kind@59) + @62 := &*(left_val@54) + @61 := &*(@62) + @64 := &*(right_val@55) + @63 := &*(@64) + @65 := core::option::Option::None { } + panic(core::panicking::assert_failed) + } + drop @58 + drop @57 + @78 := () + @50 := move (@78) + drop @56 + drop right_val@55 + drop left_val@54 + drop @51 + drop @50 + @79 := () + @0 := move (@79) + drop expected@49 + drop i@2 + drop a@1 + @0 := () + return +} + +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter + +impl core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array} : core::iter::traits::collect::IntoIterator> +where + [@TraitClause0]: core::marker::Sized, +{ + parent_clause0 = @TraitClause0 + parent_clause1 = core::marker::Sized[@TraitClause0]> + parent_clause2 = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[@TraitClause0] + type Item = T + type IntoIter = core::array::iter::IntoIter[@TraitClause0] + fn into_iter = core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter[@TraitClause0] +} + +impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, +{ + parent_clause0 = @TraitClause1::parent_clause0 + parent_clause1 = @TraitClause0 + parent_clause2 = @TraitClause1 + type Item = @TraitClause1::Item + type IntoIter = I + fn into_iter = core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[@TraitClause0, @TraitClause1] +} + +fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0] + +fn core::ops::arith::AddAssign::add_assign<'_0, Self, Rhs>(@1: &'_0 mut (Self), @2: Rhs) + +trait core::ops::arith::AddAssign +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + fn add_assign<'_0> = core::ops::arith::AddAssign::add_assign<'_0_0, Self, Rhs> +} + +impl<'_0> core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365<'_0> : core::ops::arith::AddAssign +{ + parent_clause0 = core::marker::Sized<&'_ (i32)> + fn add_assign<'_0> = core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_0, '_0_0> +} + +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output + +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output + +fn core::iter::traits::iterator::Iterator::size_hint<'_0, Self>(@1: &'_0 (Self)) -> (usize, core::option::Option[core::marker::Sized]) + +fn core::iter::traits::iterator::Iterator::fold(@1: Self, @2: B, @3: F) -> B +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = B, + +fn core::iter::traits::iterator::Iterator::count(@1: Self) -> usize +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::last(@1: Self) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::advance_by<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] + +fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self + +fn core::clone::Clone::clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) + +unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> Self::Item +where + [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, + +fn core::iter::traits::iterator::Iterator::next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> core::result::Result, core::array::iter::IntoIter[Self::parent_clause0]>[core::marker::Sized>, core::marker::Sized[Self::parent_clause0]>] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::nth<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option[Self::parent_clause0] + +fn core::iter::traits::iterator::Iterator::step_by(@1: Self, @2: usize) -> core::iter::adapters::step_by::StepBy[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::chain(@1: Self, @2: U) -> core::iter::adapters::chain::Chain[@TraitClause1, @TraitClause2::parent_clause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::Item = Self::Item, + +fn core::iter::traits::iterator::Iterator::zip(@1: Self, @2: U) -> core::iter::adapters::zip::Zip[@TraitClause1, @TraitClause2::parent_clause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + +fn core::iter::traits::iterator::Iterator::intersperse(@1: Self, @2: Self::Item) -> core::iter::adapters::intersperse::Intersperse[@TraitClause0, Self, @TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::clone::Clone, + +fn core::iter::traits::iterator::Iterator::intersperse_with(@1: Self, @2: G) -> core::iter::adapters::intersperse::IntersperseWith[@TraitClause1, @TraitClause0, Self] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = Self::Item, + +fn core::iter::traits::iterator::Iterator::map(@1: Self, @2: F) -> core::iter::adapters::map::Map[@TraitClause2, @TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = B, + +fn core::iter::traits::iterator::Iterator::for_each(@1: Self, @2: F) +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = (), + +fn core::iter::traits::iterator::Iterator::filter(@1: Self, @2: P) -> core::iter::adapters::filter::Filter[@TraitClause1, @TraitClause0] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::filter_map(@1: Self, @2: F) -> core::iter::adapters::filter_map::FilterMap[@TraitClause2, @TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = core::option::Option[@TraitClause0], + +fn core::iter::traits::iterator::Iterator::enumerate(@1: Self) -> core::iter::adapters::enumerate::Enumerate[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::peekable(@1: Self) -> core::iter::adapters::peekable::Peekable[@TraitClause0, Self] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::skip_while(@1: Self, @2: P) -> core::iter::adapters::skip_while::SkipWhile[@TraitClause1, @TraitClause0] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::take_while(@1: Self, @2: P) -> core::iter::adapters::take_while::TakeWhile[@TraitClause1, @TraitClause0] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::map_while(@1: Self, @2: P) -> core::iter::adapters::map_while::MapWhile[@TraitClause2, @TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = core::option::Option[@TraitClause0], + +fn core::iter::traits::iterator::Iterator::skip(@1: Self, @2: usize) -> core::iter::adapters::skip::Skip[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::take(@1: Self, @2: usize) -> core::iter::adapters::take::Take[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::scan(@1: Self, @2: St, @3: F) -> core::iter::adapters::scan::Scan[@TraitClause3, @TraitClause0, @TraitClause2] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], + +fn core::iter::traits::iterator::Iterator::flat_map(@1: Self, @2: F) -> core::iter::adapters::flatten::FlatMap[@TraitClause2, @TraitClause0, @TraitClause1, @TraitClause3] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = U, + +fn core::iter::traits::iterator::Iterator::flatten(@1: Self) -> core::iter::adapters::flatten::Flatten[@TraitClause0, Self, @TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + +fn core::iter::traits::iterator::Iterator::map_windows(@1: Self, @2: F) -> core::iter::adapters::map_windows::MapWindows[@TraitClause2, @TraitClause0, Self] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0> core::ops::function::FnMut))>, + for<'_0> @TraitClause3::parent_clause0::Output = R, + +fn core::iter::traits::iterator::Iterator::fuse(@1: Self) -> core::iter::adapters::fuse::Fuse[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::inspect(@1: Self, @2: F) -> core::iter::adapters::inspect::Inspect[@TraitClause1, @TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause2::parent_clause0::Output = (), + +fn core::iter::traits::iterator::Iterator::by_ref<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 mut (Self) +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::collect(@1: Self) -> B +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::FromIterator, + [@TraitClause2]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::try_collect<'_0, Self, B>(@1: &'_0 mut (Self)) -> @TraitClause3::TryType +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::try_trait::Try, + [@TraitClause3]: core::ops::try_trait::Residual<@TraitClause2::Residual, B>, + [@TraitClause4]: core::iter::traits::collect::FromIterator, + +fn core::iter::traits::iterator::Iterator::collect_into<'_0, Self, E>(@1: Self, @2: &'_0 mut (E)) -> &'_0 mut (E) +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::Extend, + [@TraitClause2]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::partition(@1: Self, @2: F) -> (B, B) +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::default::Default, + [@TraitClause4]: core::iter::traits::collect::Extend, + [@TraitClause5]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause5::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::partition_in_place<'a, Self, T, P>(@1: Self, @2: P) -> usize +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause4]: for<'_0> core::ops::function::FnMut, + T : 'a, + Self::Item = &'a mut (T), + for<'_0> @TraitClause4::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::is_partitioned(@1: Self, @2: P) -> bool +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::try_fold<'_0, Self, B, F, R>(@1: &'_0 mut (Self), @2: B, @3: F) -> R +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + [@TraitClause5]: core::ops::try_trait::Try, + @TraitClause4::parent_clause0::Output = R, + @TraitClause5::Output = B, + +fn core::iter::traits::iterator::Iterator::try_for_each<'_0, Self, F, R>(@1: &'_0 mut (Self), @2: F) -> R +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + [@TraitClause4]: core::ops::try_trait::Try, + @TraitClause3::parent_clause0::Output = R, + @TraitClause4::Output = (), + +fn core::iter::traits::iterator::Iterator::reduce(@1: Self, @2: F) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = Self::Item, + +fn core::iter::traits::iterator::Iterator::try_reduce<'_0, Self, R, impl FnMut(Self::Item, Self::Item) -> R>(@1: &'_0 mut (Self), @2: impl FnMut(Self::Item, Self::Item) -> R) -> @TraitClause4::TryType +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized R>, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::try_trait::Try, + [@TraitClause4]: core::ops::try_trait::Residual<@TraitClause3::Residual, core::option::Option[Self::parent_clause0]>, + [@TraitClause5]: core::ops::function::FnMut R, (Self::Item, Self::Item)>, + @TraitClause3::Output = Self::Item, + @TraitClause5::parent_clause0::Output = R, + +fn core::iter::traits::iterator::Iterator::all<'_0, Self, F>(@1: &'_0 mut (Self), @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::any<'_0, Self, F>(@1: &'_0 mut (Self), @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::find<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::find_map<'_0, Self, B, F>(@1: &'_0 mut (Self), @2: F) -> core::option::Option[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = core::option::Option[@TraitClause0], + +fn core::iter::traits::iterator::Iterator::try_find<'_0, Self, R, impl FnMut(&Self::Item) -> R>(@1: &'_0 mut (Self), @2: impl FnMut(&Self::Item) -> R) -> @TraitClause4::TryType +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized R>, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::try_trait::Try, + [@TraitClause4]: core::ops::try_trait::Residual<@TraitClause3::Residual, core::option::Option[Self::parent_clause0]>, + [@TraitClause5]: for<'_0> core::ops::function::FnMut R, (&'_0_0 (Self::Item))>, + @TraitClause3::Output = bool, + for<'_0> @TraitClause5::parent_clause0::Output = R, + +fn core::iter::traits::iterator::Iterator::position<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::ops::function::FnMut, + @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::rposition<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::ops::function::FnMut, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::exact_size::ExactSizeIterator, + [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator, + @TraitClause1::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::max(@1: Self) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::cmp::Ord, + +fn core::iter::traits::iterator::Iterator::min(@1: Self) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::cmp::Ord, + +fn core::iter::traits::iterator::Iterator::max_by_key(@1: Self, @2: F) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::cmp::Ord, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause4::parent_clause0::Output = B, + +fn core::iter::traits::iterator::Iterator::max_by(@1: Self, @2: F) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, + for<'_0, '_1> @TraitClause2::parent_clause0::Output = core::cmp::Ordering, + +fn core::iter::traits::iterator::Iterator::min_by_key(@1: Self, @2: F) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::cmp::Ord, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause4::parent_clause0::Output = B, + +fn core::iter::traits::iterator::Iterator::min_by(@1: Self, @2: F) -> core::option::Option[Self::parent_clause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, + for<'_0, '_1> @TraitClause2::parent_clause0::Output = core::cmp::Ordering, + +fn core::iter::traits::iterator::Iterator::rev(@1: Self) -> core::iter::adapters::rev::Rev[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::double_ended::DoubleEndedIterator, + +fn core::iter::traits::iterator::Iterator::unzip(@1: Self) -> (FromA, FromB) +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::default::Default, + [@TraitClause5]: core::iter::traits::collect::Extend, + [@TraitClause6]: core::default::Default, + [@TraitClause7]: core::iter::traits::collect::Extend, + [@TraitClause8]: core::marker::Sized, + [@TraitClause9]: core::iter::traits::iterator::Iterator, + Self::Item = (A, B), + +fn core::iter::traits::iterator::Iterator::copied<'a, Self, T>(@1: Self) -> core::iter::adapters::copied::Copied[@TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + [@TraitClause3]: core::marker::Copy, + T : 'a, + Self::Item = &'a (T), + +fn core::iter::traits::iterator::Iterator::cloned<'a, Self, T>(@1: Self) -> core::iter::adapters::cloned::Cloned[@TraitClause1] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + [@TraitClause3]: core::clone::Clone, + T : 'a, + Self::Item = &'a (T), + +fn core::iter::traits::iterator::Iterator::cycle(@1: Self) -> core::iter::adapters::cycle::Cycle[@TraitClause0] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::clone::Clone, + +fn core::iter::traits::iterator::Iterator::array_chunks(@1: Self) -> core::iter::adapters::array_chunks::ArrayChunks[@TraitClause0, Self] +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::sum(@1: Self) -> S +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::accum::Sum, + +fn core::iter::traits::iterator::Iterator::product(@1: Self) -> P +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::accum::Product, + +fn core::iter::traits::iterator::Iterator::cmp(@1: Self, @2: I) -> core::cmp::Ordering +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::Ord, + [@TraitClause3]: core::marker::Sized, + @TraitClause1::Item = Self::Item, + +fn core::iter::traits::iterator::Iterator::cmp_by(@1: Self, @2: I, @3: F) -> core::cmp::Ordering +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = core::cmp::Ordering, + +fn core::iter::traits::iterator::Iterator::partial_cmp(@1: Self, @2: I) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialOrd, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::partial_cmp_by(@1: Self, @2: I, @3: F) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = core::option::Option[core::marker::Sized], + +fn core::iter::traits::iterator::Iterator::eq(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialEq, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::eq_by(@1: Self, @2: I, @3: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::ne(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialEq, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::lt(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialOrd, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::le(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialOrd, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::gt(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialOrd, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::ge(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + [@TraitClause2]: core::cmp::PartialOrd, + [@TraitClause3]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::is_sorted(@1: Self) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::cmp::PartialOrd, + +fn core::iter::traits::iterator::Iterator::is_sorted_by(@1: Self, @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0, '_1> core::ops::function::FnMut, + for<'_0, '_1> @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::is_sorted_by_key(@1: Self, @2: F) -> bool +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + [@TraitClause4]: core::cmp::PartialOrd, + @TraitClause3::parent_clause0::Output = K, + +fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering + +fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self +where + [@TraitClause0]: core::marker::Sized, + +fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) + +fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] + +fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool + +fn core::default::Default::default() -> Self + +fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self + +fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] + +fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self + +fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::iter::traits::collect::IntoIterator, + @TraitClause1::Item = A, + +fn core::iter::traits::collect::Extend::extend_one<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) + +fn core::iter::traits::collect::Extend::extend_reserve<'_0, Self, A>(@1: &'_0 mut (Self), @2: usize) + +unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) +where + [@TraitClause0]: core::marker::Sized, + +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] + +fn core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::result::Result<(), core::num::nonzero::NonZero[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>[core::marker::Sized<()>, core::marker::Sized[core::marker::Sized, core::num::nonzero::{impl core::num::nonzero::ZeroablePrimitive for usize}#26]>] + +fn core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option[Self::parent_clause0::parent_clause0] + +fn core::iter::traits::double_ended::DoubleEndedIterator::try_rfold<'_0, Self, B, F, R>(@1: &'_0 mut (Self), @2: B, @3: F) -> R +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + [@TraitClause5]: core::ops::try_trait::Try, + @TraitClause4::parent_clause0::Output = R, + @TraitClause5::Output = B, + +fn core::iter::traits::double_ended::DoubleEndedIterator::rfold(@1: Self, @2: B, @3: F) -> B +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = B, + +fn core::iter::traits::double_ended::DoubleEndedIterator::rfind<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option[Self::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::marker::Sized

, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause2::parent_clause0::Output = bool, + +fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (Self)) -> usize + +fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool + + + diff --git a/charon/tests/ui/trait-instance-id.rs b/charon/tests/ui/iterator.rs similarity index 65% rename from charon/tests/ui/trait-instance-id.rs rename to charon/tests/ui/iterator.rs index e8b1c92d9..9bc25836c 100644 --- a/charon/tests/ui/trait-instance-id.rs +++ b/charon/tests/ui/iterator.rs @@ -1,5 +1,6 @@ -// This (for now) produces `TraitRefKind::Unknown`; it's a regression test because we used to -// not parse this in `charon-ml`. +//@ charon-args=--translate-all-methods +//! Translate the full iterator trait and a few of standard impls. This is a great testing ground +//! for type-system features. fn main() { let a = [0, 1, 2, 3, 4, 5, 6]; let mut i = 0; diff --git a/charon/tests/ui/trait-instance-id.out b/charon/tests/ui/trait-instance-id.out deleted file mode 100644 index 42920eb28..000000000 --- a/charon/tests/ui/trait-instance-id.out +++ /dev/null @@ -1,679 +0,0 @@ -# Final LLBC before serialization: - -trait core::marker::Sized - -opaque type core::array::iter::IntoIter - where - [@TraitClause0]: core::marker::Sized, - -enum core::option::Option - where - [@TraitClause0]: core::marker::Sized, - = -| None() -| Some(T) - - -opaque type core::slice::iter::Iter<'a, T> - where - [@TraitClause0]: core::marker::Sized, - T : 'a, - T : 'a, - -opaque type core::slice::iter::Chunks<'a, T> - where - [@TraitClause0]: core::marker::Sized, - T : 'a, - T : 'a, - -opaque type core::slice::iter::ChunksExact<'a, T> - where - [@TraitClause0]: core::marker::Sized, - T : 'a, - T : 'a, - -enum core::panicking::AssertKind = -| Eq() -| Ne() -| Match() - - -opaque type core::fmt::Arguments<'a> - where - 'a : 'a, - -fn core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter(@1: Array) -> core::array::iter::IntoIter[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -trait core::iter::traits::iterator::Iterator -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - type Item - fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self> -} - -fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - -fn core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_0, T, const N : usize>(@1: &'_0 mut (core::array::iter::IntoIter[@TraitClause0])) -> core::option::Option[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -impl core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2 : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = @TraitClause0 - type Item = T - fn next<'_0> = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_0_0, T, const N : usize>[@TraitClause0] -} - -fn core::slice::{Slice}::iter<'_0, T>(@1: &'_0 (Slice)) -> core::slice::iter::Iter<'_0, T>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Iter<'a, T>[@TraitClause0])) -> core::option::Option<&'a (T)>[core::marker::Sized<&'_ (T)>] -where - [@TraitClause0]: core::marker::Sized, - -impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = core::marker::Sized<&'_ (T)> - type Item = &'a (T) - fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'a, '_0_0, T>[@TraitClause0] -} - -fn core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_0, '_1>(@1: &'_1 mut (i32), @2: &'_0 (i32)) - -fn core::slice::{Slice}::chunks<'_0, T>(@1: &'_0 (Slice), @2: usize) -> core::slice::iter::Chunks<'_0, T>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::Chunks<'a, T>[@TraitClause0])) -> core::option::Option<&'a (Slice)>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = core::marker::Sized<&'_ (Slice)> - type Item = &'a (Slice) - fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'a, '_0_0, T>[@TraitClause0] -} - -fn core::slice::{Slice}::chunks_exact<'_0, T>(@1: &'_0 (Slice), @2: usize) -> core::slice::iter::ChunksExact<'_0, T>[@TraitClause0] -where - [@TraitClause0]: core::marker::Sized, - -fn core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'a, '_1, T>(@1: &'_1 mut (core::slice::iter::ChunksExact<'a, T>[@TraitClause0])) -> core::option::Option<&'a (Slice)>[core::marker::Sized<&'_ (Slice)>] -where - [@TraitClause0]: core::marker::Sized, - -impl<'a, T> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'a, T> : core::iter::traits::iterator::Iterator[@TraitClause0]> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = core::marker::Sized<&'_ (Slice)> - type Item = &'a (Slice) - fn next<'_0> = core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'a, '_0_0, T>[@TraitClause0] -} - -fn test_crate::main() -{ - let @0: (); // return - let a@1: Array; // local - let i@2: i32; // local - let @3: (); // anonymous local - let @4: core::array::iter::IntoIter[core::marker::Sized]; // anonymous local - let @5: core::array::iter::IntoIter[core::marker::Sized]; // anonymous local - let @6: Array; // anonymous local - let iter@7: core::array::iter::IntoIter[core::marker::Sized]; // local - let @8: (); // anonymous local - let @9: (); // anonymous local - let @10: core::option::Option[core::marker::Sized]; // anonymous local - let @11: &'_ mut (core::array::iter::IntoIter[core::marker::Sized]); // anonymous local - let @12: &'_ mut (core::array::iter::IntoIter[core::marker::Sized]); // anonymous local - let v@13: i32; // local - let @14: i32; // anonymous local - let @15: (); // anonymous local - let @16: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // anonymous local - let @17: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // anonymous local - let @18: &'_ (Slice); // anonymous local - let @19: &'_ (Array); // anonymous local - let iter@20: core::slice::iter::Iter<'_, i32>[core::marker::Sized]; // local - let @21: (); // anonymous local - let @22: core::option::Option<&'_ (i32)>[core::marker::Sized<&'_ (i32)>]; // anonymous local - let @23: &'_ mut (core::slice::iter::Iter<'_, i32>[core::marker::Sized]); // anonymous local - let @24: &'_ mut (core::slice::iter::Iter<'_, i32>[core::marker::Sized]); // anonymous local - let v@25: &'_ (i32); // local - let @26: (); // anonymous local - let @27: &'_ mut (i32); // anonymous local - let @28: &'_ (i32); // anonymous local - let @29: (); // anonymous local - let @30: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // anonymous local - let @31: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // anonymous local - let @32: &'_ (Slice); // anonymous local - let @33: &'_ (Array); // anonymous local - let iter@34: core::slice::iter::Chunks<'_, i32>[core::marker::Sized]; // local - let @35: (); // anonymous local - let @36: core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>]; // anonymous local - let @37: &'_ mut (core::slice::iter::Chunks<'_, i32>[core::marker::Sized]); // anonymous local - let @38: &'_ mut (core::slice::iter::Chunks<'_, i32>[core::marker::Sized]); // anonymous local - let @39: (); // anonymous local - let @40: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // anonymous local - let @41: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // anonymous local - let @42: &'_ (Slice); // anonymous local - let @43: &'_ (Array); // anonymous local - let iter@44: core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]; // local - let @45: (); // anonymous local - let @46: core::option::Option<&'_ (Slice)>[core::marker::Sized<&'_ (Slice)>]; // anonymous local - let @47: &'_ mut (core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]); // anonymous local - let @48: &'_ mut (core::slice::iter::ChunksExact<'_, i32>[core::marker::Sized]); // anonymous local - let expected@49: i32; // local - let @50: (); // anonymous local - let @51: (&'_ (i32), &'_ (i32)); // anonymous local - let @52: &'_ (i32); // anonymous local - let @53: &'_ (i32); // anonymous local - let left_val@54: &'_ (i32); // local - let right_val@55: &'_ (i32); // local - let @56: bool; // anonymous local - let @57: i32; // anonymous local - let @58: i32; // anonymous local - let kind@59: core::panicking::AssertKind; // local - let @60: core::panicking::AssertKind; // anonymous local - let @61: &'_ (i32); // anonymous local - let @62: &'_ (i32); // anonymous local - let @63: &'_ (i32); // anonymous local - let @64: &'_ (i32); // anonymous local - let @65: core::option::Option>[core::marker::Sized>]; // anonymous local - let @66: (); // anonymous local - let @67: (); // anonymous local - let @68: (); // anonymous local - let @69: (); // anonymous local - let @70: (); // anonymous local - let @71: (); // anonymous local - let @72: (); // anonymous local - let @73: (); // anonymous local - let @74: (); // anonymous local - let @75: (); // anonymous local - let @76: (); // anonymous local - let @77: (); // anonymous local - let @78: (); // anonymous local - let @79: (); // anonymous local - - a@1 := [const (0 : i32), const (1 : i32), const (2 : i32), const (3 : i32), const (4 : i32), const (5 : i32), const (6 : i32); 7 : usize] - @fake_read(a@1) - i@2 := const (0 : i32) - @fake_read(i@2) - @6 := copy (a@1) - @5 := core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter[core::marker::Sized](move (@6)) - drop @6 - @4 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[core::marker::Sized]](move (@5)) - drop @5 - @fake_read(@4) - iter@7 := move (@4) - loop { - @12 := &mut iter@7 - @11 := &two-phase-mut *(@12) - @10 := core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2::next<'_, i32, 7 : usize>[core::marker::Sized](move (@11)) - drop @11 - @fake_read(@10) - match @10 { - 0 => { - break 0 - }, - 1 => { - v@13 := copy ((@10 as variant @1).0) - @14 := copy (v@13) - i@2 := copy (i@2) + move (@14) - drop @14 - @67 := () - @9 := move (@67) - drop v@13 - drop @12 - drop @10 - drop @9 - @68 := () - @8 := move (@68) - continue 0 - }, - } - } - @66 := () - @3 := move (@66) - drop @12 - drop @10 - drop @9 - drop iter@7 - drop iter@7 - drop @4 - drop @4 - drop @3 - @19 := &a@1 - @18 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@19)) - drop @19 - @17 := core::slice::{Slice}::iter<'_, i32>[core::marker::Sized](move (@18)) - drop @18 - @16 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'_, i32>[core::marker::Sized]](move (@17)) - drop @17 - @fake_read(@16) - iter@20 := move (@16) - loop { - @24 := &mut iter@20 - @23 := &two-phase-mut *(@24) - @22 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182::next<'_, '_, i32>[core::marker::Sized](move (@23)) - drop @23 - @fake_read(@22) - match @22 { - 0 => { - break 0 - }, - 1 => { - v@25 := copy ((@22 as variant @1).0) - @27 := &two-phase-mut i@2 - @28 := copy (v@25) - @26 := core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_, '_>(move (@27), move (@28)) - drop @28 - drop @27 - drop @26 - @70 := () - @21 := move (@70) - drop v@25 - drop @24 - drop @22 - drop @21 - @71 := () - @8 := move (@71) - continue 0 - }, - } - } - @69 := () - @15 := move (@69) - drop @24 - drop @22 - drop @21 - drop iter@20 - drop @16 - drop @15 - @33 := &a@1 - @32 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@33)) - drop @33 - @31 := core::slice::{Slice}::chunks<'_, i32>[core::marker::Sized](move (@32), const (2 : usize)) - drop @32 - @30 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'_, i32>[core::marker::Sized]](move (@31)) - drop @31 - @fake_read(@30) - iter@34 := move (@30) - loop { - @38 := &mut iter@34 - @37 := &two-phase-mut *(@38) - @36 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71::next<'_, '_, i32>[core::marker::Sized](move (@37)) - drop @37 - @fake_read(@36) - match @36 { - 0 => { - break 0 - }, - 1 => { - i@2 := copy (i@2) + const (1 : i32) - @73 := () - @35 := move (@73) - drop @38 - drop @36 - drop @35 - @74 := () - @8 := move (@74) - continue 0 - }, - } - } - @72 := () - @29 := move (@72) - drop @38 - drop @36 - drop @35 - drop iter@34 - drop @30 - drop @29 - @43 := &a@1 - @42 := @ArrayToSliceShared<'_, i32, 7 : usize>(move (@43)) - drop @43 - @41 := core::slice::{Slice}::chunks_exact<'_, i32>[core::marker::Sized](move (@42), const (2 : usize)) - drop @42 - @40 := core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[core::marker::Sized]>[core::marker::Sized[core::marker::Sized]>, core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'_, i32>[core::marker::Sized]](move (@41)) - drop @41 - @fake_read(@40) - iter@44 := move (@40) - loop { - @48 := &mut iter@44 - @47 := &two-phase-mut *(@48) - @46 := core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90::next<'_, '_, i32>[core::marker::Sized](move (@47)) - drop @47 - @fake_read(@46) - match @46 { - 0 => { - break 0 - }, - 1 => { - i@2 := copy (i@2) + const (1 : i32) - @76 := () - @45 := move (@76) - drop @48 - drop @46 - drop @45 - @77 := () - @8 := move (@77) - continue 0 - }, - } - } - @75 := () - @39 := move (@75) - drop @48 - drop @46 - drop @45 - drop iter@44 - drop @40 - drop @39 - expected@49 := const (28 : i32) - @fake_read(expected@49) - @52 := &i@2 - @53 := &expected@49 - @51 := (move (@52), move (@53)) - drop @53 - drop @52 - @fake_read(@51) - left_val@54 := copy ((@51).0) - right_val@55 := copy ((@51).1) - @57 := copy (*(left_val@54)) - @58 := copy (*(right_val@55)) - @56 := move (@57) == move (@58) - if move (@56) { - } - else { - drop @58 - drop @57 - kind@59 := core::panicking::AssertKind::Eq { } - @fake_read(kind@59) - @60 := move (kind@59) - @62 := &*(left_val@54) - @61 := &*(@62) - @64 := &*(right_val@55) - @63 := &*(@64) - @65 := core::option::Option::None { } - panic(core::panicking::assert_failed) - } - drop @58 - drop @57 - @78 := () - @50 := move (@78) - drop @56 - drop right_val@55 - drop left_val@54 - drop @51 - drop @50 - @79 := () - @0 := move (@79) - drop expected@49 - drop i@2 - drop a@1 - @0 := () - return -} - -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter - -trait core::iter::traits::collect::IntoIterator -where - Self::parent_clause2::Item = Self::Item, -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator - type Item - type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter -} - -impl core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array} : core::iter::traits::collect::IntoIterator> -where - [@TraitClause0]: core::marker::Sized, -{ - parent_clause0 = @TraitClause0 - parent_clause1 = core::marker::Sized[@TraitClause0]> - parent_clause2 = core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[@TraitClause0] - type Item = T - type IntoIter = core::array::iter::IntoIter[@TraitClause0] - fn into_iter = core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter[@TraitClause0] -} - -impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, -{ - parent_clause0 = @TraitClause1::parent_clause0 - parent_clause1 = @TraitClause0 - parent_clause2 = @TraitClause1 - type Item = @TraitClause1::Item - type IntoIter = I - fn into_iter = core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter[@TraitClause0, @TraitClause1] -} - -fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0] - -fn core::ops::arith::AddAssign::add_assign<'_0, Self, Rhs>(@1: &'_0 mut (Self), @2: Rhs) - -trait core::ops::arith::AddAssign -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn add_assign<'_0> = core::ops::arith::AddAssign::add_assign<'_0_0, Self, Rhs> -} - -impl<'_0> core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365<'_0> : core::ops::arith::AddAssign -{ - parent_clause0 = core::marker::Sized<&'_ (i32)> - fn add_assign<'_0> = core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365::add_assign<'_0, '_0_0> -} - -trait core::marker::Tuple - -trait core::ops::function::FnOnce -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Tuple - parent_clause2 : [@TraitClause2]: core::marker::Sized - type Output - fn call_once = core::ops::function::FnOnce::call_once -} - -trait core::ops::function::FnMut -{ - parent_clause0 : [@TraitClause0]: core::ops::function::FnOnce - parent_clause1 : [@TraitClause1]: core::marker::Sized - parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args> -} - -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output - -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output - -trait core::clone::Clone -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> -} - -trait core::iter::traits::collect::FromIterator -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[@TraitClause0_0, @TraitClause0_1] -} - -trait core::ops::try_trait::FromResidual -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual = core::ops::try_trait::FromResidual::from_residual -} - -enum core::ops::control_flow::ControlFlow - where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - = -| Continue(C) -| Break(B) - - -trait core::ops::try_trait::Try -{ - parent_clause0 : [@TraitClause0]: core::ops::try_trait::FromResidual - parent_clause1 : [@TraitClause1]: core::marker::Sized - parent_clause2 : [@TraitClause2]: core::marker::Sized - type Output - type Residual - fn from_output = core::ops::try_trait::Try::from_output - fn branch = core::ops::try_trait::Try::branch -} - -trait core::ops::try_trait::Residual -where - Self::parent_clause2::Output = O, - Self::parent_clause2::Residual = Self, -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - parent_clause2 : [@TraitClause2]: core::ops::try_trait::Try - type TryType -} - -trait core::iter::traits::collect::Extend -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn extend<'_0, T, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::Extend::extend<'_0_0, Self, A, T>[@TraitClause0_0, @TraitClause0_1] -} - -trait core::default::Default -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default -} - -trait core::iter::traits::double_ended::DoubleEndedIterator -{ - parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator - fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self> -} - -trait core::iter::traits::exact_size::ExactSizeIterator -{ - parent_clause0 : [@TraitClause0]: core::iter::traits::iterator::Iterator -} - -trait core::cmp::PartialEq -{ - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> -} - -trait core::cmp::Eq -{ - parent_clause0 : [@TraitClause0]: core::cmp::PartialEq -} - -enum core::cmp::Ordering = -| Less() -| Equal() -| Greater() - - -trait core::cmp::PartialOrd -{ - parent_clause0 : [@TraitClause0]: core::cmp::PartialEq - fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs> -} - -trait core::cmp::Ord -{ - parent_clause0 : [@TraitClause0]: core::cmp::Eq - parent_clause1 : [@TraitClause1]: core::cmp::PartialOrd - fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self> -} - -trait core::marker::Copy -{ - parent_clause0 : [@TraitClause0]: core::clone::Clone -} - -trait core::iter::traits::accum::Sum -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[@TraitClause0_0, @TraitClause0_1] -} - -trait core::iter::traits::accum::Product -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - parent_clause1 : [@TraitClause1]: core::marker::Sized - fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[@TraitClause0_0, @TraitClause0_1] -} - -trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce -{ - parent_clause0 : [@TraitClause0]: core::marker::Sized - const MAY_HAVE_SIDE_EFFECT : bool -} - -fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self - -fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool - -fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering - -fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] - -fn core::default::Default::default() -> Self - -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self - -fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow[Self::parent_clause0::parent_clause0, Self::parent_clause1] - -fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self - -fn core::iter::traits::accum::Sum::sum(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::accum::Product::product(@1: I) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, - -fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::collect::IntoIterator, - @TraitClause1::Item = A, - -fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) -where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::collect::IntoIterator, - @TraitClause1::Item = A, - -fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0::parent_clause0] - - -