diff --git a/charon-ml/src/generated/Generated_Types.ml b/charon-ml/src/generated/Generated_Types.ml index ea1ec971..0462815a 100644 --- a/charon-ml/src/generated/Generated_Types.ml +++ b/charon-ml/src/generated/Generated_Types.ml @@ -104,7 +104,6 @@ and 'a0 de_bruijn_var = is not used in charon internals, only as a micro-pass before exporting the crate data. *) -and region_id = (RegionId.id[@visitors.opaque]) and type_var_id = (TypeVarId.id[@visitors.opaque]) and const_generic_var_id = (ConstGenericVarId.id[@visitors.opaque]) and trait_clause_id = (TraitClauseId.id[@visitors.opaque]) @@ -201,6 +200,7 @@ and global_decl_ref = { } and trait_item_name = string +and region_id = (RegionId.id[@visitors.opaque]) (** A region variable in a signature or binder. *) and region_var = (region_id, string option) indexed_var diff --git a/charon/src/ast/krate.rs b/charon/src/ast/krate.rs index dfe15f4f..b0876e2e 100644 --- a/charon/src/ast/krate.rs +++ b/charon/src/ast/krate.rs @@ -221,6 +221,17 @@ impl<'ctx> AnyTransItem<'ctx> { } } + /// Get information about the parent of this item, if any. + pub fn parent_info(&self) -> &'ctx ItemKind { + match self { + AnyTransItem::Fun(d) => &d.kind, + AnyTransItem::Global(d) => &d.kind, + AnyTransItem::Type(_) | AnyTransItem::TraitDecl(_) | AnyTransItem::TraitImpl(_) => { + &ItemKind::Regular + } + } + } + /// See [`GenericParams::identity_args`]. pub fn identity_args(&self) -> GenericArgs { self.generic_params() @@ -238,6 +249,17 @@ impl<'ctx> AnyTransItem<'ctx> { AnyTransItem::TraitImpl(d) => visitor.visit(d), } } + + /// Visit all occurrences of that type inside `self`, in pre-order traversal. + pub fn dyn_visit(&self, f: impl FnMut(&T)) { + match *self { + AnyTransItem::Type(d) => d.dyn_visit(f), + AnyTransItem::Fun(d) => d.dyn_visit(f), + AnyTransItem::Global(d) => d.dyn_visit(f), + AnyTransItem::TraitDecl(d) => d.dyn_visit(f), + AnyTransItem::TraitImpl(d) => d.dyn_visit(f), + } + } } impl<'ctx> AnyTransItemMut<'ctx> { @@ -273,6 +295,17 @@ impl<'ctx> AnyTransItemMut<'ctx> { AnyTransItemMut::TraitImpl(d) => visitor.visit(*d), } } + + /// Visit all occurrences of that type inside `self`, in pre-order traversal. + pub fn dyn_visit_mut(&mut self, f: impl FnMut(&mut T)) { + match self { + AnyTransItemMut::Type(d) => d.dyn_visit_mut(f), + AnyTransItemMut::Fun(d) => d.dyn_visit_mut(f), + AnyTransItemMut::Global(d) => d.dyn_visit_mut(f), + AnyTransItemMut::TraitDecl(d) => d.dyn_visit_mut(f), + AnyTransItemMut::TraitImpl(d) => d.dyn_visit_mut(f), + } + } } impl fmt::Display for TranslatedCrate { diff --git a/charon/src/ast/visitor.rs b/charon/src/ast/visitor.rs index 31ed27cd..621cada0 100644 --- a/charon/src/ast/visitor.rs +++ b/charon/src/ast/visitor.rs @@ -47,7 +47,7 @@ use indexmap::IndexMap; FnOperand, FunId, FunIdOrTraitMethodRef, FunSig, ImplElem, IntegerTy, Literal, LiteralTy, llbc_ast::Block, llbc_ast::ExprBody, llbc_ast::RawStatement, llbc_ast::Switch, Locals, Name, NullOp, Opaque, Operand, PathElem, Place, PlaceKind, ProjectionElem, RawConstantExpr, - RefKind, RegionId, RegionVar, Rvalue, ScalarValue, TraitClauseId, TraitItemName, + RefKind, RegionId, RegionVar, Rvalue, ScalarValue, TraitItemName, TranslatedCrate, TypeDeclKind, TypeId, TypeVar, TypeVarId, ullbc_ast::BlockData, ullbc_ast::BlockId, ullbc_ast::ExprBody, ullbc_ast::RawStatement, ullbc_ast::RawTerminator, ullbc_ast::SwitchTargets, ullbc_ast::Terminator, @@ -65,7 +65,7 @@ use indexmap::IndexMap; override( DeBruijnId, Ty, TyKind, Region, ConstGeneric, TraitRef, TraitRefKind, FunDeclRef, GlobalDeclRef, TraitDeclRef, TraitImplRef, - GenericArgs, GenericParams, TraitClause, TraitTypeConstraint, + GenericArgs, GenericParams, TraitClause, TraitClauseId, TraitTypeConstraint, for DeBruijnVar, for RegionBinder, for Binder, diff --git a/charon/src/bin/charon-driver/translate/translate_ctx.rs b/charon/src/bin/charon-driver/translate/translate_ctx.rs index 2dbb3d36..28137e9e 100644 --- a/charon/src/bin/charon-driver/translate/translate_ctx.rs +++ b/charon/src/bin/charon-driver/translate/translate_ctx.rs @@ -248,6 +248,9 @@ pub(crate) struct BodyTransCtx<'tcx, 'ctx> { pub parent_trait_clauses: Vector, /// (For traits only) accumulated trait clauses on associated types. pub item_trait_clauses: HashMap>, + /// (For method declarations only) the clause id corresponding to the explicit `Self` clause. + /// If `None`, use `TraitRefKind::Self` instead. + pub self_clause_id: Option, /// The (regular) variables in the current function body. pub locals: Locals, @@ -908,6 +911,7 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { binding_levels: Default::default(), parent_trait_clauses: Default::default(), item_trait_clauses: Default::default(), + self_clause_id: Default::default(), locals: Default::default(), vars_map: Default::default(), blocks: Default::default(), @@ -1099,6 +1103,12 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { span: Span, mut id: usize, ) -> Result { + if self.self_clause_id.is_some() { + // We added an extra first clause which hax doesn't know about, so we adapt the index + // accordingly. + // TODO: more robust tracking of clause ids between hax and charon. + id += 1; + } // The clause indices returned by hax count clauses in order, starting from the parentmost. // While adding clauses to a binding level we already need to translate types and clauses, // so the innermost item binder may not have all the clauses yet. Hence for that binder we diff --git a/charon/src/bin/charon-driver/translate/translate_predicates.rs b/charon/src/bin/charon-driver/translate/translate_predicates.rs index d80fd8b7..872daf8b 100644 --- a/charon/src/bin/charon-driver/translate/translate_predicates.rs +++ b/charon/src/bin/charon-driver/translate/translate_predicates.rs @@ -245,10 +245,17 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { trait_ref, path, ); - // If we are refering to a trait clause, we need to find the - // relevant one. + // If we are refering to a trait clause, we need to find the relevant one. let mut trait_id = match &impl_source.r#impl { - ImplExprAtom::SelfImpl { .. } => TraitRefKind::SelfId, + ImplExprAtom::SelfImpl { .. } => match self.self_clause_id { + None => TraitRefKind::SelfId, + // An explicit `Self` clause is bound at the top-level; we use it instead + // of the implicit `TraitRefKind::SelfId` one. + Some(id) => TraitRefKind::Clause(DeBruijnVar::bound( + DeBruijnId::new(self.binding_levels.len() - 1), + id, + )), + }, ImplExprAtom::LocalBound { index, .. } => { let var = self.lookup_clause_var(span, *index)?; TraitRefKind::Clause(var) diff --git a/charon/src/bin/charon-driver/translate/translate_traits.rs b/charon/src/bin/charon-driver/translate/translate_traits.rs index 991e7049..ccc1faae 100644 --- a/charon/src/bin/charon-driver/translate/translate_traits.rs +++ b/charon/src/bin/charon-driver/translate/translate_traits.rs @@ -54,7 +54,12 @@ impl BodyTransCtx<'_, '_> { raise_error!(self, span, "Trait aliases are not supported"); } - let hax::FullDefKind::Trait { items, .. } = &def.kind else { + let hax::FullDefKind::Trait { + items, + self_predicate, + .. + } = &def.kind + else { raise_error!(self, span, "Unexpected definition: {def:?}"); }; let items: Vec<(TraitItemName, &hax::AssocItem, Arc)> = items @@ -71,6 +76,12 @@ impl BodyTransCtx<'_, '_> { // `self.parent_trait_clauses`. // TODO: Distinguish between required and implied trait clauses? self.translate_def_generics(span, def)?; + let self_trait_ref = TraitRef { + kind: TraitRefKind::SelfId, + trait_decl_ref: RegionBinder::empty( + self.translate_trait_predicate(span, self_predicate)?, + ), + }; // Translate the associated items // We do something subtle here: TODO: explain @@ -108,22 +119,23 @@ impl BodyTransCtx<'_, '_> { 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); - let fun_generics = bt_ctx - .outermost_binder() - .params - .identity_args_at_depth( + let mut fun_generics = + bt_ctx.outermost_binder().params.identity_args_at_depth( GenericsSource::item(def_id), DeBruijnId::one(), - ) - .concat( - GenericsSource::item(fun_id), - &bt_ctx.innermost_binder().params.identity_args_at_depth( - GenericsSource::Method(def_id.into(), item_name.clone()), - DeBruijnId::zero(), - ), ); + // Add the necessary explicit `Self` clause at the start. + fun_generics + .trait_refs + .insert(0.into(), self_trait_ref.clone().move_under_binder()); + fun_generics = fun_generics.concat( + GenericsSource::item(fun_id), + &bt_ctx.innermost_binder().params.identity_args_at_depth( + GenericsSource::Method(def_id.into(), item_name.clone()), + DeBruijnId::zero(), + ), + ); Ok(FunDeclRef { id: fun_id, generics: fun_generics, @@ -139,10 +151,10 @@ impl BodyTransCtx<'_, '_> { // declares them. let id = self.register_global_decl_id(item_span, item_def_id); let generics_target = GenericsSource::item(id); - let gref = GlobalDeclRef { - id, - generics: self.the_only_binder().params.identity_args(generics_target), - }; + let mut generics = + self.the_only_binder().params.identity_args(generics_target); + generics.trait_refs.push(self_trait_ref.clone()); + let gref = GlobalDeclRef { id, generics }; const_defaults.insert(item_name.clone(), gref); }; let ty = self.translate_ty(item_span, ty)?; @@ -226,6 +238,16 @@ impl BodyTransCtx<'_, '_> { )?; TraitDeclRef { trait_id, generics } }; + // A `TraitRef` that points to this impl with the correct generics. + let self_predicate = TraitRef { + kind: TraitRefKind::TraitImpl( + def_id, + self.the_only_binder() + .params + .identity_args(GenericsSource::item(def_id)), + ), + trait_decl_ref: RegionBinder::empty(implemented_trait.clone()), + }; // The trait refs which implement the parent clauses of the implemented trait decl. let parent_trait_refs = self.translate_trait_impl_exprs(span, &required_impl_exprs)?; @@ -325,10 +347,14 @@ impl BodyTransCtx<'_, '_> { Provided { .. } => { self.the_only_binder().params.identity_args(generics_target) } - _ => implemented_trait - .generics - .clone() - .with_target(generics_target), + _ => { + let mut generics = implemented_trait + .generics + .clone() + .with_target(generics_target); + generics.trait_refs.push(self_predicate.clone()); + generics + } }; let gref = GlobalDeclRef { id, generics }; consts.push((name, gref)); diff --git a/charon/src/bin/charon-driver/translate/translate_types.rs b/charon/src/bin/charon-driver/translate/translate_types.rs index 781353d4..ce41ca4f 100644 --- a/charon/src/bin/charon-driver/translate/translate_types.rs +++ b/charon/src/bin/charon-driver/translate/translate_types.rs @@ -549,7 +549,7 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { ) -> Result<(), Error> { assert!(self.binding_levels.len() == 0); self.binding_levels.push(BindingLevel::new(true)); - self.push_generics_for_def(span, def, false)?; + self.push_generics_for_def(span, def, false, false)?; self.innermost_binder_mut().params.check_consistency(); Ok(()) } @@ -561,7 +561,7 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { def: &hax::FullDef, ) -> Result<(), Error> { self.binding_levels.push(BindingLevel::new(true)); - self.push_generics_for_def_without_parents(span, def, true, true)?; + self.push_generics_for_def_without_parents(span, def, true, true, false)?; self.innermost_binder().params.check_consistency(); Ok(()) } @@ -577,24 +577,33 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { span: Span, def: &hax::FullDef, is_parent: bool, + explicit_self_clause: bool, ) -> Result<(), Error> { - use hax::FullDefKind; + use hax::FullDefKind::*; // Add generics from the parent item, recursively (recursivity is important for closures, - // as they could be nested). - match &def.kind { - FullDefKind::AssocTy { .. } - | FullDefKind::AssocFn { .. } - | FullDefKind::AssocConst { .. } - | FullDefKind::Closure { .. } - | FullDefKind::Ctor { .. } - | FullDefKind::Variant { .. } => { + // as they can be nested). + match def.kind() { + AssocTy { .. } + | AssocFn { .. } + | AssocConst { .. } + | Closure { .. } + | Ctor { .. } + | Variant { .. } => { let parent_def_id = def.parent.as_ref().unwrap(); let parent_def = self.t_ctx.hax_def(parent_def_id)?; - self.push_generics_for_def(span, &parent_def, true)?; + // Add an explicit `Self` clause to trait item declarations. + let explicit_self_clause = matches!(parent_def.kind(), Trait { .. }); + self.push_generics_for_def(span, &parent_def, true, explicit_self_clause)?; } _ => {} } - self.push_generics_for_def_without_parents(span, def, !is_parent, !is_parent)?; + self.push_generics_for_def_without_parents( + span, + def, + !is_parent, + !is_parent, + explicit_self_clause, + )?; Ok(()) } @@ -606,22 +615,33 @@ impl<'tcx, 'ctx> BodyTransCtx<'tcx, 'ctx> { def: &hax::FullDef, include_late_bound: bool, include_assoc_ty_clauses: bool, + explicit_self_clause: bool, ) -> Result<(), Error> { use hax::FullDefKind; if let Some((generics, predicates)) = def.generics() { // Add the generic params. self.push_generic_params(generics)?; - // Add the self trait clause. - match &def.kind { - FullDefKind::TraitImpl { - trait_pred: self_predicate, - .. - } - | FullDefKind::Trait { self_predicate, .. } => { - self.register_trait_decl_id(span, &self_predicate.trait_ref.def_id); - let _ = self.translate_trait_predicate(span, self_predicate)?; - } - _ => {} + // Add the explicit self trait clause if required. + if let FullDefKind::Trait { self_predicate, .. } = &def.kind + && explicit_self_clause + { + // We add an explicit `Self` clause to trait method declarations. Trait method + // implementations already don't use the implicit `Self` clause. This way, methods + // don't need an implicit `Self` clause: they're normal functions, and the trait + // decl/impl takes care to pass the right arguments. + let self_predicate = + RegionBinder::empty(self.translate_trait_predicate(span, self_predicate)?); + let clause_id = + self.innermost_generics_mut() + .trait_clauses + .push_with(|clause_id| TraitClause { + clause_id, + origin: PredicateOrigin::TraitSelf, + span: Some(span), + trait_: self_predicate, + }); + // Record the id so we can resolve `ImplExpr::Self`s to it. + self.self_clause_id = Some(clause_id); } // Add the predicates. let (origin, location) = match &def.kind { diff --git a/charon/src/bin/generate-ml/main.rs b/charon/src/bin/generate-ml/main.rs index 93ace7e5..046c0e7a 100644 --- a/charon/src/bin/generate-ml/main.rs +++ b/charon/src/bin/generate-ml/main.rs @@ -1183,7 +1183,6 @@ fn generate_ml( reduce: true, extra_types: &[], })), &[ - "RegionId", "TypeVarId", "ConstGeneric", "TraitClauseId", diff --git a/charon/src/ids/vector.rs b/charon/src/ids/vector.rs index 141cabe3..a718544e 100644 --- a/charon/src/ids/vector.rs +++ b/charon/src/ids/vector.rs @@ -84,7 +84,7 @@ where self.real_len += 1; } - /// Remove the value from this slot. + /// Remove the value from this slot, leaving other ids unchanged. pub fn remove(&mut self, id: I) -> Option { if self.vector[id].is_some() { self.real_len -= 1; @@ -92,6 +92,14 @@ where self.vector[id].take() } + /// Remove the value from this slot, shifting other ids as needed. + pub fn remove_and_shift_ids(&mut self, id: I) -> Option { + if self.vector[id].is_some() { + self.real_len -= 1; + } + self.vector.remove(id) + } + pub fn push(&mut self, x: T) -> I { self.real_len += 1; self.vector.push(Some(x)) @@ -126,6 +134,12 @@ where self.real_len += other.real_len; } + /// Insert a value at that index, shifting all the values with equal or larger indices. + pub fn insert(&mut self, id: I, x: T) { + self.real_len += 1; + self.vector.insert(id, Some(x)) + } + /// Get a mutable reference into the ith element. If the vector is too short, extend it until /// it has enough elements. If the element doesn't exist, use the provided function to /// initialize it. diff --git a/charon/src/transform/mod.rs b/charon/src/transform/mod.rs index 17e941f5..24d32d7d 100644 --- a/charon/src/transform/mod.rs +++ b/charon/src/transform/mod.rs @@ -25,6 +25,7 @@ pub mod remove_nops; pub mod remove_read_discriminant; pub mod remove_unused_locals; pub mod remove_unused_methods; +pub mod remove_unused_self_clause; pub mod reorder_decls; pub mod simplify_constants; pub mod skip_trait_refs_when_known; @@ -51,6 +52,9 @@ pub static INITIAL_CLEANUP_PASSES: &[Pass] = &[ // # Micro-pass: filter the trait impls that were marked invisible since we couldn't filter // them out earlier. NonBody(&filter_invisible_trait_impls::Transform), + // # Micro-pass: remove the explicit `Self: Trait` clause of methods/assoc const declaration + // items if they're not used. This simplifies the graph of dependencies between definitions. + NonBody(&remove_unused_self_clause::Transform), // Add missing methods to trait impls by duplicating the default method. NonBody(&duplicate_defaulted_methods::Transform), // # Micro-pass: whenever we call a trait method on a known type, refer to the method `FunDecl` diff --git a/charon/src/transform/remove_unused_self_clause.rs b/charon/src/transform/remove_unused_self_clause.rs new file mode 100644 index 00000000..5d91225d --- /dev/null +++ b/charon/src/transform/remove_unused_self_clause.rs @@ -0,0 +1,96 @@ +//! We have added an explicit `Self: Trait` clause to the function and global items that correspond +//! to a trait method/associated const declaration. This pass removes the clause in question if it +//! is not used by the item. +use derive_generic_visitor::*; +use std::collections::HashSet; + +use crate::ast::*; + +use super::{ctx::TransformPass, TransformCtx}; + +struct FoundClause; + +struct UsesClauseVisitor(TraitClauseId); +impl Visitor for UsesClauseVisitor { + type Break = FoundClause; +} + +/// Visit an item looking for uses of the given clause. +impl VisitAst for UsesClauseVisitor { + fn visit_trait_clause_id(&mut self, x: &TraitClauseId) -> ControlFlow { + if *x == self.0 { + Break(FoundClause) + } else { + Continue(()) + } + } + fn visit_trait_clause(&mut self, _: &TraitClause) -> ControlFlow { + // Don't look inside the clause declaration as this will always contain the + // `TraitClauseId`. + Continue(()) + } + fn visit_fun_decl(&mut self, x: &FunDecl) -> ControlFlow { + if let Err(Opaque) = x.body { + // For function without bodies we can't know whether the clause is used so we err on + // the side of it being used. + return Break(FoundClause); + } + self.visit_inner(x) + } +} + +pub struct Transform; +impl TransformPass for Transform { + fn transform_ctx(&self, ctx: &mut TransformCtx) { + let self_clause_id = TraitClauseId::from_raw(0); + let mut doesnt_use_self: HashSet = Default::default(); + + // We explore only items with an explicit `Self` clause, namely method and associated const + // declarations. + for tdecl in &ctx.translated.trait_decls { + let methods = tdecl.methods().map(|(_, bound_fn)| bound_fn.skip_binder.id); + // For consts, we need to explore the corresponding initializer body. + let consts = tdecl + .const_defaults + .iter() + .filter_map(|(_, x)| ctx.translated.global_decls.get(x.id)) + .map(|gdecl| gdecl.init); + let funs = methods + .chain(consts) + .filter_map(|id: FunDeclId| ctx.translated.fun_decls.get(id)); + for fun in funs { + match fun.drive(&mut UsesClauseVisitor(self_clause_id)) { + Continue(()) => { + doesnt_use_self.insert(fun.def_id.into()); + if let Some(gid) = fun.is_global_initializer { + doesnt_use_self.insert(gid.into()); + } + } + Break(FoundClause) => {} + } + } + } + + // In each item, remove the first clause and renumber the others. + for &id in &doesnt_use_self { + let Some(mut item) = ctx.translated.get_item_mut(id) else { + continue; + }; + item.generic_params() + .trait_clauses + .remove_and_shift_ids(self_clause_id); + item.dyn_visit_mut(|clause_id: &mut TraitClauseId| { + *clause_id = TraitClauseId::from_usize(clause_id.index() - 1); + }); + } + + // Update any `GenericArgs` destined for the items we just changed. + ctx.translated.dyn_visit_mut(|args: &mut GenericArgs| { + if let GenericsSource::Item(target_id) = args.target + && doesnt_use_self.contains(&target_id) + { + args.trait_refs.remove_and_shift_ids(self_clause_id); + } + }); + } +} diff --git a/charon/tests/cargo/dependencies.out b/charon/tests/cargo/dependencies.out index 06123c68..588fe549 100644 --- a/charon/tests/cargo/dependencies.out +++ b/charon/tests/cargo/dependencies.out @@ -23,7 +23,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } fn take_mut::take<'_0, T, F>(@1: &'_0 mut (T), @2: F) @@ -151,7 +151,9 @@ fn test_cargo_dependencies::main() return } -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, diff --git a/charon/tests/crate_data.rs b/charon/tests/crate_data.rs index 4147dde5..324001d2 100644 --- a/charon/tests/crate_data.rs +++ b/charon/tests/crate_data.rs @@ -222,6 +222,7 @@ fn predicate_origins() -> anyhow::Result<()> { ( "test_crate::Trait::trait_method", vec![ + (TraitSelf, "Trait"), (WhereClauseOnFn, "Sized"), (WhereClauseOnFn, "From"), (WhereClauseOnFn, "From"), @@ -611,14 +612,10 @@ fn declaration_groups() -> anyhow::Result<()> { "#, )?; - // There are two function ids registered, but only one is nonempty. `functions.len() == 2` as - // `len()` counts the empty slots too. - let decl_groups = crate_data.ordered_decls.unwrap(); + // There are two function items: one for `foo`, one for the initializer of `Trait::FOO`. assert_eq!(crate_data.fun_decls.iter().count(), 2); + let decl_groups = crate_data.ordered_decls.unwrap(); assert_eq!(decl_groups.len(), 5); - assert!(decl_groups - .iter() - .all(|group| group.to_mixed_group().is_non_rec())); Ok(()) } diff --git a/charon/tests/ui/arrays.out b/charon/tests/ui/arrays.out index 0c543a3d..92a678ca 100644 --- a/charon/tests/ui/arrays.out +++ b/charon/tests/ui/arrays.out @@ -253,12 +253,12 @@ enum core::option::Option trait core::slice::index::SliceIndex { parent_clause0 : [@TraitClause0]: core::slice::index::private_slice_index::Sealed - fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T, Self_Output> - fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T, Self_Output> - fn get_unchecked = core::slice::index::SliceIndex::get_unchecked - fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut - fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T, Self_Output> - fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T, Self_Output> + fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T, Self_Output, Self_Output>[Self] + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T, Self_Output, Self_Output>[Self] + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked[Self] + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut[Self] + fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T, Self_Output, Self_Output>[Self] + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T, Self_Output, Self_Output>[Self] } fn core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0, T, I, Clause2_Output>(@1: &'_0 (Slice), @2: I) -> &'_0 (Clause2_Output) @@ -402,7 +402,7 @@ fn test_crate::array_to_slice_mut_<'_0>(@1: &'_0 mut (Array)) - trait core::ops::index::Index { - fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx, Self_Output> + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx, Self_Output, Self_Output>[Self] } fn core::array::{impl core::ops::index::Index for Array}#15::index<'_0, T, I, Clause2_Output, const N : usize>(@1: &'_0 (Array), @2: I) -> &'_0 (Clause2_Output) @@ -452,7 +452,7 @@ fn test_crate::array_subslice_shared_<'_0>(@1: &'_0 (Array), @2 trait core::ops::index::IndexMut { parent_clause0 : [@TraitClause0]: core::ops::index::Index - fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx, Self_Clause0_Output> + fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx, Self_Clause0_Output, Self_Clause0_Output>[Self] } fn core::array::{impl core::ops::index::IndexMut for Array}#16::index_mut<'_0, T, I, Clause2_Clause0_Output, const N : usize>(@1: &'_0 mut (Array), @2: I) -> &'_0 mut (Clause2_Clause0_Output) @@ -1860,9 +1860,13 @@ fn test_crate::slice_pattern_4<'_0>(@1: &'_0 (Slice<()>)) return } -fn core::ops::index::Index::index<'_0, Self, Idx, Self_Output>(@1: &'_0 (Self), @2: Idx) -> &'_0 (Self_Output) +fn core::ops::index::Index::index<'_0, Self, Idx, Clause0_Output, Self_Output>(@1: &'_0 (Self), @2: Idx) -> &'_0 (Clause0_Output) +where + [@TraitClause0]: core::ops::index::Index, -fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx, Self_Clause0_Output>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (Self_Clause0_Output) +fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx, Clause0_Clause0_Output, Self_Clause0_Output>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (Clause0_Clause0_Output) +where + [@TraitClause0]: core::ops::index::IndexMut, impl core::array::{impl core::ops::index::Index for Array}#15 : core::ops::index::Index, I, Clause2_Output> where @@ -1883,17 +1887,29 @@ where fn index_mut<'_0> = core::array::{impl core::ops::index::IndexMut for Array}#16::index_mut<'_0_0, T, I, Clause2_Clause0_Output, const N : usize>[@TraitClause0, @TraitClause1, @TraitClause2] } -fn core::slice::index::SliceIndex::get<'_0, Self, T, Self_Output>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Self_Output)>[core::marker::Sized<&'_0 (Self_Output)>] +fn core::slice::index::SliceIndex::get<'_0, Self, T, Clause0_Output, Self_Output>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Clause0_Output)>[core::marker::Sized<&'_0 (Clause0_Output)>] +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::get_mut<'_0, Self, T, Self_Output>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (Self_Output)>[core::marker::Sized<&'_0 mut (Self_Output)>] +fn core::slice::index::SliceIndex::get_mut<'_0, Self, T, Clause0_Output, Self_Output>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (Clause0_Output)>[core::marker::Sized<&'_0 mut (Clause0_Output)>] +where + [@TraitClause0]: core::slice::index::SliceIndex, -unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: Self, @2: *const T) -> *const Self_Output +unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: Self, @2: *const T) -> *const Clause0_Output +where + [@TraitClause0]: core::slice::index::SliceIndex, -unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: Self, @2: *mut T) -> *mut Self_Output +unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: Self, @2: *mut T) -> *mut Clause0_Output +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::index<'_0, Self, T, Self_Output>(@1: Self, @2: &'_0 (T)) -> &'_0 (Self_Output) +fn core::slice::index::SliceIndex::index<'_0, Self, T, Clause0_Output, Self_Output>(@1: Self, @2: &'_0 (T)) -> &'_0 (Clause0_Output) +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::index_mut<'_0, Self, T, Self_Output>(@1: Self, @2: &'_0 mut (T)) -> &'_0 mut (Self_Output) +fn core::slice::index::SliceIndex::index_mut<'_0, Self, T, Clause0_Output, Self_Output>(@1: Self, @2: &'_0 mut (T)) -> &'_0 mut (Clause0_Output) +where + [@TraitClause0]: core::slice::index::SliceIndex, diff --git a/charon/tests/ui/assoc-const-with-generics.out b/charon/tests/ui/assoc-const-with-generics.out index 2ac607db..3b34ff3b 100644 --- a/charon/tests/ui/assoc-const-with-generics.out +++ b/charon/tests/ui/assoc-const-with-generics.out @@ -60,6 +60,39 @@ impl test_crate::{impl test_crate::HasLen for Array}#2::LEN } +struct test_crate::Wrapper + where + [@TraitClause0]: core::marker::Sized, + = +{ + T, +} + +fn test_crate::{impl test_crate::HasLen for test_crate::Wrapper[@TraitClause0]}#3::LEN() -> usize +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: test_crate::HasLen, +{ + let @0: usize; // return + + @0 := const (@TraitClause1::LEN) + return +} + +global test_crate::{impl test_crate::HasLen for test_crate::Wrapper[@TraitClause0]}#3::LEN: usize + where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: test_crate::HasLen, + = test_crate::{impl test_crate::HasLen for test_crate::Wrapper[@TraitClause0]}#3::LEN() + +impl test_crate::{impl test_crate::HasLen for test_crate::Wrapper[@TraitClause0]}#3 : test_crate::HasLen[@TraitClause0]> +where + [@TraitClause0]: core::marker::Sized, + [@TraitClause1]: test_crate::HasLen, +{ + const LEN = test_crate::{impl test_crate::HasLen for test_crate::Wrapper[@TraitClause0]}#3::LEN[@TraitClause0, @TraitClause1] +} + fn test_crate::HasDefaultLen::LEN() -> usize { let @0: usize; // return @@ -75,12 +108,12 @@ trait test_crate::HasDefaultLen const LEN : usize } -impl test_crate::{impl test_crate::HasDefaultLen for Array<(), const N : usize>}#3 : test_crate::HasDefaultLen, const N : usize> +impl test_crate::{impl test_crate::HasDefaultLen for Array<(), const N : usize>}#4 : test_crate::HasDefaultLen, const N : usize> { const LEN = test_crate::HasDefaultLen::LEN, const N : usize> } -fn test_crate::{impl test_crate::HasDefaultLen for Array}#4::LEN() -> usize +fn test_crate::{impl test_crate::HasDefaultLen for Array}#5::LEN() -> usize { let @0: usize; // return let @1: bool; // anonymous local @@ -90,17 +123,44 @@ fn test_crate::{impl test_crate::HasDefaultLen for Array for Array}#4::LEN) + @0 := const (test_crate::{impl test_crate::HasDefaultLen for Array}#5::LEN) } drop @1 return } -global test_crate::{impl test_crate::HasDefaultLen for Array}#4::LEN: usize = test_crate::{impl test_crate::HasDefaultLen for Array}#4::LEN() +global test_crate::{impl test_crate::HasDefaultLen for Array}#5::LEN: usize = test_crate::{impl test_crate::HasDefaultLen for Array}#5::LEN() + +impl test_crate::{impl test_crate::HasDefaultLen for Array}#5 : test_crate::HasDefaultLen, const N : usize> +{ + const LEN = test_crate::{impl test_crate::HasDefaultLen for Array}#5::LEN +} + +fn test_crate::AlsoHasLen::ALSO_LEN() -> usize +where + [@TraitClause0]: test_crate::AlsoHasLen, +{ + let @0: usize; // return + + @0 := const (@TraitClause0::parent_clause0::LEN) + const (1 : usize) + return +} + +global test_crate::AlsoHasLen::ALSO_LEN: usize + where + [@TraitClause0]: test_crate::AlsoHasLen, + = test_crate::AlsoHasLen::ALSO_LEN() + +trait test_crate::AlsoHasLen +{ + parent_clause0 : [@TraitClause0]: test_crate::HasLen + const ALSO_LEN : usize +} -impl test_crate::{impl test_crate::HasDefaultLen for Array}#4 : test_crate::HasDefaultLen, const N : usize> +impl test_crate::{impl test_crate::AlsoHasLen for Array<(), const N : usize>}#6 : test_crate::AlsoHasLen> { - const LEN = test_crate::{impl test_crate::HasDefaultLen for Array}#4::LEN + parent_clause0 = test_crate::{impl test_crate::HasLen for Array<(), const N : usize>}#1 + const ALSO_LEN = test_crate::AlsoHasLen::ALSO_LEN>[test_crate::{impl test_crate::AlsoHasLen for Array<(), const N : usize>}#6] } diff --git a/charon/tests/ui/assoc-const-with-generics.rs b/charon/tests/ui/assoc-const-with-generics.rs index 26d58bdb..13aebc63 100644 --- a/charon/tests/ui/assoc-const-with-generics.rs +++ b/charon/tests/ui/assoc-const-with-generics.rs @@ -18,6 +18,12 @@ impl HasLen for [bool; N] { const LEN: usize = N + 1; } +/// The assoc const depends on a generic parameter. +struct Wrapper(T); +impl HasLen for Wrapper { + const LEN: usize = T::LEN; +} + pub trait HasDefaultLen { const LEN: usize = M; // fn use_array(_a: [(); Self::LEN]) {} @@ -33,3 +39,10 @@ impl HasDefaultLen for [bool; N] { >::LEN }; } + +/// The default assoc const depends the `Self` clause: we must be careful when reusing this default +/// value in impls. +trait AlsoHasLen: HasLen { + const ALSO_LEN: usize = Self::LEN + 1; +} +impl AlsoHasLen for [(); N] {} diff --git a/charon/tests/ui/associated-types.out b/charon/tests/ui/associated-types.out index 0cbea148..df3e7af7 100644 --- a/charon/tests/ui/associated-types.out +++ b/charon/tests/ui/associated-types.out @@ -5,7 +5,7 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -20,8 +20,8 @@ where parent_clause0 : [@TraitClause0]: core::marker::Copy parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::clone::Clone - fn use_item_required = test_crate::Foo::use_item_required<'a, Self, Self_Item> - fn use_item_provided> = test_crate::Foo::use_item_provided<'a, Self, Clause0_Item, Self_Item>[@TraitClause0_0] + fn use_item_required = test_crate::Foo::use_item_required<'a, Self, Self_Item, Self_Item>[Self] + fn use_item_provided> = test_crate::Foo::use_item_provided<'a, Self, Self_Item, Clause0_Item, Self_Item>[Self, @TraitClause0_0] } enum core::option::Option @@ -138,18 +138,21 @@ where fn use_item_provided> = test_crate::{impl test_crate::Foo<'a, T> for core::option::Option[@TraitClause0]}#1::use_item_provided<'a, T, Clause0_Item>[@TraitClause0, @TraitClause1, @TraitClause0_0] } -fn test_crate::Foo::use_item_provided<'a, Self, Clause0_Item, Self_Item>(@1: Self_Item) -> Self_Item +fn test_crate::Foo::use_item_provided<'a, Self, Clause0_Item, Clause1_Item, Self_Item>(@1: Clause0_Item) -> Clause0_Item where - [@TraitClause0]: test_crate::Foo<'_, Self_Item, Clause0_Item>, + [@TraitClause0]: test_crate::Foo<'a, Self, Clause0_Item>, + [@TraitClause1]: test_crate::Foo<'_, Clause0_Item, Clause1_Item>, { - let @0: Self_Item; // return - let x@1: Self_Item; // arg #1 + let @0: Clause0_Item; // return + let x@1: Clause0_Item; // arg #1 @0 := copy (x@1) return } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn test_crate::external_use_item<'a, T, Clause1_Item, Clause2_Item>(@1: Clause1_Item) -> Clause1_Item where @@ -292,14 +295,14 @@ impl test_crate::loopy_with_generics::{impl test_crate::loopy_with_generics::Foo trait core::borrow::Borrow { - fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed> + fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed>[Self] } trait alloc::borrow::ToOwned { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::borrow::Borrow - fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self, Self_Owned> + fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self, Self_Owned, Self_Owned>[Self] } enum test_crate::cow::Cow<'a, B, Clause0_Owned> @@ -328,11 +331,17 @@ where parent_clause2 = core::marker::Sized<&'_ ((core::option::Option[@TraitClause0], &'_ (())))> } -fn test_crate::Foo::use_item_required<'a, Self, Self_Item>(@1: Self_Item) -> Self_Item +fn test_crate::Foo::use_item_required<'a, Self, Clause0_Item, Self_Item>(@1: Clause0_Item) -> Clause0_Item +where + [@TraitClause0]: test_crate::Foo<'a, Self, Clause0_Item>, -fn alloc::borrow::ToOwned::to_owned<'_0, Self, Self_Owned>(@1: &'_0 (Self)) -> Self_Owned +fn alloc::borrow::ToOwned::to_owned<'_0, Self, Clause0_Owned, Self_Owned>(@1: &'_0 (Self)) -> Clause0_Owned +where + [@TraitClause0]: alloc::borrow::ToOwned, fn core::borrow::Borrow::borrow<'_0, Self, Borrowed>(@1: &'_0 (Self)) -> &'_0 (Borrowed) +where + [@TraitClause0]: core::borrow::Borrow, diff --git a/charon/tests/ui/call-to-known-trait-method.out b/charon/tests/ui/call-to-known-trait-method.out index 4c8dc082..52a94de6 100644 --- a/charon/tests/ui/call-to-known-trait-method.out +++ b/charon/tests/ui/call-to-known-trait-method.out @@ -13,10 +13,12 @@ struct test_crate::Struct trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, fn test_crate::{impl core::default::Default for test_crate::Struct[@TraitClause0]}#1::default() -> test_crate::Struct[@TraitClause0] where @@ -46,18 +48,18 @@ trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn method> = test_crate::Trait::method[@TraitClause0_0] + fn method> = test_crate::Trait::method[Self, @TraitClause0_0] } trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } fn test_crate::{impl test_crate::Trait for test_crate::Struct[@TraitClause0]}::method() @@ -136,13 +138,18 @@ fn test_crate::main() return } -fn test_crate::Trait::method() +fn test_crate::Trait::method() where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: test_crate::Trait, + [@TraitClause1]: core::marker::Sized, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, diff --git a/charon/tests/ui/closures.out b/charon/tests/ui/closures.out index d55a1ce1..0612c12f 100644 --- a/charon/tests/ui/closures.out +++ b/charon/tests/ui/closures.out @@ -21,7 +21,7 @@ trait core::ops::function::FnOnce parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -29,7 +29,7 @@ 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, Self_Clause0_Output> + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args, Self_Clause0_Output, Self_Clause0_Output>[Self] } trait core::ops::function::Fn @@ -37,7 +37,7 @@ trait core::ops::function::Fn parent_clause0 : [@TraitClause0]: core::ops::function::FnMut parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output> + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output, Self_Clause0_Clause0_Output>[Self] } enum core::option::Option @@ -48,7 +48,9 @@ enum core::option::Option | Some(T) -fn core::ops::function::Fn::call<'_0, Self, Args, Self_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Self_Clause0_Clause0_Output +fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause0_Clause0_Output, Self_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause0_Clause0_Output +where + [@TraitClause0]: core::ops::function::Fn, fn test_crate::map_option(@1: core::option::Option[@TraitClause0], @2: F) -> core::option::Option[@TraitClause0] where @@ -411,10 +413,12 @@ fn test_crate::test_map_option_id2(@1: core::option::Option[core::marker::S trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn test_crate::id_clone(@1: T) -> T where @@ -813,9 +817,13 @@ fn test_crate::BLAH() -> u32 global test_crate::BLAH: u32 = test_crate::BLAH() -fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Self_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Self_Clause0_Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Clause0_Clause0_Output, Self_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause0_Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self_Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Clause0_Output +where + [@TraitClause0]: core::ops::function::FnOnce, diff --git a/charon/tests/ui/comments.out b/charon/tests/ui/comments.out index 3800e05d..14c0e7f7 100644 --- a/charon/tests/ui/comments.out +++ b/charon/tests/ui/comments.out @@ -141,7 +141,7 @@ struct test_crate::Foo = trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } fn core::default::{impl core::default::Default for u32}#7::default() -> u32 @@ -421,6 +421,8 @@ fn test_crate::fool() } fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, impl core::default::{impl core::default::Default for u32}#7 : core::default::Default { diff --git a/charon/tests/ui/demo.out b/charon/tests/ui/demo.out index 009d5694..4d001d49 100644 --- a/charon/tests/ui/demo.out +++ b/charon/tests/ui/demo.out @@ -381,7 +381,7 @@ where trait test_crate::Counter { - fn incr<'_0> = test_crate::Counter::incr<'_0_0, Self> + fn incr<'_0> = test_crate::Counter::incr<'_0_0, Self>[Self] } fn test_crate::{impl test_crate::Counter for usize}::incr<'_0>(@1: &'_0 mut (usize)) -> usize @@ -404,6 +404,8 @@ impl test_crate::{impl test_crate::Counter for usize} : test_crate::Counter(@1: &'_0 mut (Self)) -> usize +where + [@TraitClause0]: test_crate::Counter, fn test_crate::use_counter<'a, T>(@1: &'a mut (T)) -> usize where diff --git a/charon/tests/ui/dictionary_passing_style_woes.out b/charon/tests/ui/dictionary_passing_style_woes.out index f3c6f4c7..d55705e9 100644 --- a/charon/tests/ui/dictionary_passing_style_woes.out +++ b/charon/tests/ui/dictionary_passing_style_woes.out @@ -57,7 +57,7 @@ where trait test_crate::X { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method<'_0> = test_crate::X::method<'_0_0, Self, Self_Assoc> + fn method<'_0> = test_crate::X::method<'_0_0, Self, Self_Assoc, Self_Assoc>[Self] } trait test_crate::A @@ -70,7 +70,9 @@ trait test_crate::B parent_clause0 : [@TraitClause0]: test_crate::X } -fn test_crate::X::method<'_0, Self, Self_Assoc>(@1: &'_0 (Self)) -> Self_Assoc +fn test_crate::X::method<'_0, Self, Clause0_Assoc, Self_Assoc>(@1: &'_0 (Self)) -> Clause0_Assoc +where + [@TraitClause0]: test_crate::X, fn test_crate::a(@1: T) -> Clause1_Clause0_Assoc where diff --git a/charon/tests/ui/dyn-trait.out b/charon/tests/ui/dyn-trait.out index 45dde09f..d5a232e4 100644 --- a/charon/tests/ui/dyn-trait.out +++ b/charon/tests/ui/dyn-trait.out @@ -19,7 +19,7 @@ struct core::fmt::Error = {} trait core::fmt::Display { - fn fmt<'_0, '_1, '_2> = core::fmt::Display::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::Display::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } struct alloc::alloc::Global = {} @@ -77,10 +77,12 @@ fn test_crate::bar<'_0>(@1: &'_0 (dyn (exists(TODO)))) } fn alloc::string::ToString::to_string<'_0, Self>(@1: &'_0 (Self)) -> alloc::string::String +where + [@TraitClause0]: alloc::string::ToString, trait alloc::string::ToString { - fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self> + fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self>[Self] } impl alloc::string::{impl alloc::string::ToString for T}#32 : alloc::string::ToString @@ -91,6 +93,8 @@ where } fn core::fmt::Display::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::Display, diff --git a/charon/tests/ui/external.out b/charon/tests/ui/external.out index c56b81da..1a40f798 100644 --- a/charon/tests/ui/external.out +++ b/charon/tests/ui/external.out @@ -28,7 +28,7 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -204,6 +204,8 @@ fn test_crate::incr<'_0>(@1: &'_0 mut (core::cell::Cell)) } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/generic-associated-types.out b/charon/tests/ui/generic-associated-types.out index f3e55fe3..770f9aef 100644 --- a/charon/tests/ui/generic-associated-types.out +++ b/charon/tests/ui/generic-associated-types.out @@ -12,14 +12,14 @@ error: Item `test_crate::LendingIterator` caused errors; ignoring. | ^^^^^^^^^^^^^^^^^^^^^ | -error: Found unsupported GAT `Item` when resolving trait `core::marker::Sized` +error: Found unsupported GAT `Item` when resolving trait `core::marker::Sized<@TraitClause0::Item>` --> tests/ui/generic-associated-types.rs:9:5 | 9 | fn next<'a>(&'a mut self) -> Option>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | -error: Error during trait resolution: Found unsupported GAT `Item` when resolving trait `core::marker::Sized` +error: Error during trait resolution: Found unsupported GAT `Item` when resolving trait `core::marker::Sized<@TraitClause0::Item>` --> tests/ui/generic-associated-types.rs:9:5 | 9 | fn next<'a>(&'a mut self) -> Option>; diff --git a/charon/tests/ui/impl-trait.out b/charon/tests/ui/impl-trait.out index 8b83aa2f..bbe18fa8 100644 --- a/charon/tests/ui/impl-trait.out +++ b/charon/tests/ui/impl-trait.out @@ -5,7 +5,7 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait test_crate::Foo @@ -13,7 +13,7 @@ trait test_crate::Foo parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone type Type - fn get_ty<'_0> = test_crate::Foo::get_ty<'_0_0, Self> + fn get_ty<'_0> = test_crate::Foo::get_ty<'_0_0, Self>[Self] } fn core::clone::impls::{impl core::clone::Clone for u32}#8::clone<'_0>(@1: &'_0 (u32)) -> u32 @@ -91,7 +91,7 @@ trait test_crate::RPITIT parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: test_crate::Foo type - fn make_foo = test_crate::RPITIT::make_foo + fn make_foo = test_crate::RPITIT::make_foo[Self] } fn test_crate::{impl test_crate::RPITIT for ()}#1::make_foo() @@ -111,7 +111,9 @@ impl test_crate::{impl test_crate::RPITIT for ()}#1 : test_crate::RPITIT<()> fn make_foo = test_crate::{impl test_crate::RPITIT for ()}#1::make_foo } -fn test_crate::RPITIT::make_foo() -> Self:: +fn test_crate::RPITIT::make_foo() -> @TraitClause0:: +where + [@TraitClause0]: test_crate::RPITIT, { let @0: (); // return let @1: (); // anonymous local @@ -121,9 +123,13 @@ fn test_crate::RPITIT::make_foo() -> Self:: return } -fn test_crate::Foo::get_ty<'_0, Self>(@1: &'_0 (Self)) -> &'_0 (Self::Type) +fn test_crate::Foo::get_ty<'_0, Self>(@1: &'_0 (Self)) -> &'_0 (@TraitClause0::Type) +where + [@TraitClause0]: test_crate::Foo, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn test_crate::use_tait() where @@ -208,10 +214,12 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, fn test_crate::use_wrap() { diff --git a/charon/tests/ui/issue-114-opaque-bodies.out b/charon/tests/ui/issue-114-opaque-bodies.out index 1b29c913..d7296be5 100644 --- a/charon/tests/ui/issue-114-opaque-bodies.out +++ b/charon/tests/ui/issue-114-opaque-bodies.out @@ -207,8 +207,8 @@ fn test_crate::max() -> usize 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> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs>[Self] } fn test_crate::partial_eq(@1: T) @@ -228,12 +228,14 @@ where } fn core::convert::From::from(@1: T) -> Self +where + [@TraitClause0]: core::convert::From, trait core::convert::From { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from = core::convert::From::from + fn from = core::convert::From::from[Self] } impl core::convert::num::{impl core::convert::From for i64}#83 : core::convert::From @@ -244,15 +246,19 @@ impl core::convert::num::{impl core::convert::From for i64}#83 : core::conv } fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, { let @0: bool; // return let self@1: &'_ (Self); // arg #1 let other@2: &'_ (Rhs); // arg #2 let @3: bool; // anonymous local - @3 := Self::eq<'_, '_>(move (self@1), move (other@2)) + @3 := @TraitClause0::eq<'_, '_>(move (self@1), move (other@2)) @0 := ~(move (@3)) drop @3 return diff --git a/charon/tests/ui/issue-118-generic-copy.out b/charon/tests/ui/issue-118-generic-copy.out index 82e13fe6..feff153f 100644 --- a/charon/tests/ui/issue-118-generic-copy.out +++ b/charon/tests/ui/issue-118-generic-copy.out @@ -7,7 +7,7 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } fn test_crate::{impl core::clone::Clone for test_crate::Foo}::clone<'_0>(@1: &'_0 (test_crate::Foo)) -> test_crate::Foo @@ -109,6 +109,8 @@ where } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out b/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out index b1ff4d7b..26261b71 100644 --- a/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out +++ b/charon/tests/ui/issue-159-heterogeneous-recursive-definitions.out @@ -2,8 +2,8 @@ trait test_crate::Ops { - fn ZERO = test_crate::Ops::ZERO - fn ntt_multiply = test_crate::Ops::ntt_multiply + fn ZERO = test_crate::Ops::ZERO[Self] + fn ntt_multiply = test_crate::Ops::ntt_multiply[Self] } struct test_crate::Portable = {} @@ -39,8 +39,12 @@ impl test_crate::{impl test_crate::Ops for test_crate::Portable} : test_crate::O } fn test_crate::Ops::ZERO() -> Self +where + [@TraitClause0]: test_crate::Ops, fn test_crate::Ops::ntt_multiply() -> Self +where + [@TraitClause0]: test_crate::Ops, diff --git a/charon/tests/ui/issue-165-vec-macro.out b/charon/tests/ui/issue-165-vec-macro.out index 7e3281b9..7ccb16ea 100644 --- a/charon/tests/ui/issue-165-vec-macro.out +++ b/charon/tests/ui/issue-165-vec-macro.out @@ -17,7 +17,7 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } fn alloc::vec::from_elem(@1: T, @2: usize) -> alloc::vec::Vec[@TraitClause0, core::marker::Sized] @@ -104,6 +104,8 @@ fn test_crate::bar() unsafe fn alloc::alloc::exchange_malloc(@1: usize, @2: usize) -> *mut u8 fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/issue-297-cfg.out b/charon/tests/ui/issue-297-cfg.out index 3940a89a..a386f178 100644 --- a/charon/tests/ui/issue-297-cfg.out +++ b/charon/tests/ui/issue-297-cfg.out @@ -97,7 +97,7 @@ 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -346,7 +346,9 @@ fn test_crate::f2<'_0, '_1>(@1: &'_0 (Slice), @2: &'_1 mut (Slice)) -> return } -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, trait core::iter::traits::collect::IntoIterator where @@ -357,7 +359,7 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator @@ -373,12 +375,14 @@ where 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::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Tuple @@ -389,7 +393,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -397,20 +401,20 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -429,8 +433,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -447,19 +451,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -469,7 +473,7 @@ trait core::iter::traits::exact_size::ExactSizeIterator trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::cmp::Eq @@ -486,14 +490,14 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } trait core::marker::Copy @@ -505,14 +509,14 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -522,50 +526,76 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, diff --git a/charon/tests/ui/issue-372-type-param-out-of-range.out b/charon/tests/ui/issue-372-type-param-out-of-range.out index f846387f..a4c06531 100644 --- a/charon/tests/ui/issue-372-type-param-out-of-range.out +++ b/charon/tests/ui/issue-372-type-param-out-of-range.out @@ -19,7 +19,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -27,7 +27,7 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } fn test_crate::{test_crate::S<'a, K>[@TraitClause0]}::f<'a, K, F>() @@ -79,9 +79,13 @@ where return } -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, diff --git a/charon/tests/ui/issue-394-rpit-with-lifetime.out b/charon/tests/ui/issue-394-rpit-with-lifetime.out index faacf2df..eef1b2d4 100644 --- a/charon/tests/ui/issue-394-rpit-with-lifetime.out +++ b/charon/tests/ui/issue-394-rpit-with-lifetime.out @@ -31,7 +31,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -39,7 +39,7 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } fn core::iter::sources::from_fn::from_fn(@1: F) -> core::iter::sources::from_fn::FromFn[@TraitClause1] @@ -60,9 +60,13 @@ fn test_crate::sparse_transitions<'a>() -> core::iter::sources::from_fn::FromFn< return } -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, diff --git a/charon/tests/ui/issue-395-failed-to-normalize.out b/charon/tests/ui/issue-395-failed-to-normalize.out index 528b354e..422c67f5 100644 --- a/charon/tests/ui/issue-395-failed-to-normalize.out +++ b/charon/tests/ui/issue-395-failed-to-normalize.out @@ -29,7 +29,7 @@ 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } struct test_crate::S @@ -45,7 +45,9 @@ type test_crate::S2 [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::marker::Sized, = test_crate::S[@TraitClause0, @TraitClause1, UNKNOWN(Could not find a clause for `Binder { value: , bound_vars: [] }` in the current context: `Unimplemented`), UNKNOWN(Could not find a clause for `Binder { value: ::Item>>, bound_vars: [] }` in the current context: `Unimplemented`)] -fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0] +fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, trait core::iter::traits::collect::IntoIterator where @@ -56,13 +58,13 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Tuple @@ -73,7 +75,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -81,20 +83,20 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -113,8 +115,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -131,19 +133,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -153,7 +155,7 @@ trait core::iter::traits::exact_size::ExactSizeIterator trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::cmp::Eq @@ -170,14 +172,14 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } trait core::marker::Copy @@ -189,14 +191,14 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -206,52 +208,80 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::Item = A, -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, 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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, diff --git a/charon/tests/ui/issue-4-slice-try-into-array.out b/charon/tests/ui/issue-4-slice-try-into-array.out index a01c2c2b..28a7bb3d 100644 --- a/charon/tests/ui/issue-4-slice-try-into-array.out +++ b/charon/tests/ui/issue-4-slice-try-into-array.out @@ -19,7 +19,7 @@ trait core::convert::TryFrom parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_from = core::convert::TryFrom::try_from + fn try_from = core::convert::TryFrom::try_from[Self] } fn core::convert::{impl core::convert::TryInto for T}#6::try_into(@1: T) -> core::result::Result[@TraitClause1, @TraitClause2::parent_clause2] @@ -31,7 +31,7 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -77,7 +77,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } fn core::result::{core::result::Result[@TraitClause0, @TraitClause1]}::unwrap(@1: core::result::Result[@TraitClause0, @TraitClause1]) -> T @@ -115,7 +115,9 @@ fn test_crate::trait_error<'_0>(@1: &'_0 (Slice)) return } -fn core::convert::TryInto::try_into(@1: Self) -> core::result::Result[Self::parent_clause1, Self::parent_clause2] +fn core::convert::TryInto::try_into(@1: Self) -> core::result::Result[@TraitClause0::parent_clause1, @TraitClause0::parent_clause2] +where + [@TraitClause0]: core::convert::TryInto, trait core::convert::TryInto { @@ -123,7 +125,7 @@ trait core::convert::TryInto parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_into = core::convert::TryInto::try_into + fn try_into = core::convert::TryInto::try_into[Self] } impl core::convert::{impl core::convert::TryInto for T}#6 : core::convert::TryInto @@ -139,11 +141,17 @@ where fn try_into = core::convert::{impl core::convert::TryInto for T}#6::try_into[@TraitClause0, @TraitClause1, @TraitClause2] } -fn core::convert::TryFrom::try_from(@1: T) -> core::result::Result[Self::parent_clause0, Self::parent_clause2] +fn core::convert::TryFrom::try_from(@1: T) -> core::result::Result[@TraitClause0::parent_clause0, @TraitClause0::parent_clause2] +where + [@TraitClause0]: core::convert::TryFrom, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::fmt::Debug::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::Debug, diff --git a/charon/tests/ui/issue-4-traits.out b/charon/tests/ui/issue-4-traits.out index a01c2c2b..28a7bb3d 100644 --- a/charon/tests/ui/issue-4-traits.out +++ b/charon/tests/ui/issue-4-traits.out @@ -19,7 +19,7 @@ trait core::convert::TryFrom parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_from = core::convert::TryFrom::try_from + fn try_from = core::convert::TryFrom::try_from[Self] } fn core::convert::{impl core::convert::TryInto for T}#6::try_into(@1: T) -> core::result::Result[@TraitClause1, @TraitClause2::parent_clause2] @@ -31,7 +31,7 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -77,7 +77,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } fn core::result::{core::result::Result[@TraitClause0, @TraitClause1]}::unwrap(@1: core::result::Result[@TraitClause0, @TraitClause1]) -> T @@ -115,7 +115,9 @@ fn test_crate::trait_error<'_0>(@1: &'_0 (Slice)) return } -fn core::convert::TryInto::try_into(@1: Self) -> core::result::Result[Self::parent_clause1, Self::parent_clause2] +fn core::convert::TryInto::try_into(@1: Self) -> core::result::Result[@TraitClause0::parent_clause1, @TraitClause0::parent_clause2] +where + [@TraitClause0]: core::convert::TryInto, trait core::convert::TryInto { @@ -123,7 +125,7 @@ trait core::convert::TryInto parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Sized type Error - fn try_into = core::convert::TryInto::try_into + fn try_into = core::convert::TryInto::try_into[Self] } impl core::convert::{impl core::convert::TryInto for T}#6 : core::convert::TryInto @@ -139,11 +141,17 @@ where fn try_into = core::convert::{impl core::convert::TryInto for T}#6::try_into[@TraitClause0, @TraitClause1, @TraitClause2] } -fn core::convert::TryFrom::try_from(@1: T) -> core::result::Result[Self::parent_clause0, Self::parent_clause2] +fn core::convert::TryFrom::try_from(@1: T) -> core::result::Result[@TraitClause0::parent_clause0, @TraitClause0::parent_clause2] +where + [@TraitClause0]: core::convert::TryFrom, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::fmt::Debug::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::Debug, diff --git a/charon/tests/ui/issue-45-misc.out b/charon/tests/ui/issue-45-misc.out index 1cac871f..d21d3d67 100644 --- a/charon/tests/ui/issue-45-misc.out +++ b/charon/tests/ui/issue-45-misc.out @@ -20,7 +20,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -28,7 +28,7 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } fn core::array::{Array}#23::map(@1: Array, @2: F) -> Array @@ -83,7 +83,7 @@ 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -94,12 +94,12 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } enum core::cmp::Ordering = @@ -111,7 +111,7 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::iter::range::Step @@ -119,9 +119,9 @@ trait core::iter::range::Step parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone parent_clause2 : [@TraitClause2]: core::cmp::PartialOrd - fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self> - fn forward_checked = core::iter::range::Step::forward_checked - fn backward_checked = core::iter::range::Step::backward_checked + fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self>[Self] + fn forward_checked = core::iter::range::Step::forward_checked[Self] + fn backward_checked = core::iter::range::Step::backward_checked[Self] } fn core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0, A>(@1: &'_0 mut (core::ops::range::Range[@TraitClause0])) -> core::option::Option[@TraitClause0] @@ -352,7 +352,9 @@ fn test_crate::select<'_0, '_1>(@1: &'_0 (Slice), @2: &'_1 (Slice)) return } -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, trait core::iter::traits::collect::IntoIterator where @@ -363,7 +365,7 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator @@ -379,23 +381,41 @@ where 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::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, fn core::iter::range::Step::steps_between<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::iter::range::Step, -fn core::iter::range::Step::forward_checked(@1: Self, @2: usize) -> core::option::Option[Self::parent_clause0] +fn core::iter::range::Step::forward_checked(@1: Self, @2: usize) -> core::option::Option[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::range::Step, -fn core::iter::range::Step::backward_checked(@1: Self, @2: usize) -> core::option::Option[Self::parent_clause0] +fn core::iter::range::Step::backward_checked(@1: Self, @2: usize) -> core::option::Option[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::range::Step, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, trait core::cmp::Eq { @@ -406,7 +426,7 @@ 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -416,18 +436,20 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, 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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -446,8 +468,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -464,19 +486,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -493,49 +515,63 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, diff --git a/charon/tests/ui/issue-70-override-provided-method.2.out b/charon/tests/ui/issue-70-override-provided-method.2.out index 05529a10..9893ac98 100644 --- a/charon/tests/ui/issue-70-override-provided-method.2.out +++ b/charon/tests/ui/issue-70-override-provided-method.2.out @@ -2,9 +2,9 @@ trait test_crate::Trait { - fn required<'_0> = test_crate::Trait::required<'_0_0, Self> - fn provided1<'_0> = test_crate::Trait::provided1<'_0_0, Self> - fn provided2<'_0> = test_crate::Trait::provided2<'_0_0, Self> + fn required<'_0> = test_crate::Trait::required<'_0_0, Self>[Self] + fn provided1<'_0> = test_crate::Trait::provided1<'_0_0, Self>[Self] + fn provided2<'_0> = test_crate::Trait::provided2<'_0_0, Self>[Self] } struct test_crate::Foo = {} @@ -152,8 +152,12 @@ impl test_crate::{impl test_crate::Trait for test_crate::Bar}#1 : test_crate::Tr } fn test_crate::Trait::required<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: test_crate::Trait, fn test_crate::Trait::provided1<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: test_crate::Trait, { let @0: (); // return let self@1: &'_ (Self); // arg #1 @@ -164,11 +168,11 @@ fn test_crate::Trait::provided1<'_0, Self>(@1: &'_0 (Self)) let @6: (); // anonymous local @3 := &*(self@1) - @2 := Self::required<'_>(move (@3)) + @2 := @TraitClause0::required<'_>(move (@3)) drop @3 drop @2 @5 := &*(self@1) - @4 := Self::provided2<'_>(move (@5)) + @4 := @TraitClause0::provided2<'_>(move (@5)) drop @5 drop @4 @6 := () @@ -178,6 +182,8 @@ fn test_crate::Trait::provided1<'_0, Self>(@1: &'_0 (Self)) } fn test_crate::Trait::provided2<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: test_crate::Trait, { let @0: (); // return let self@1: &'_ (Self); // arg #1 @@ -188,11 +194,11 @@ fn test_crate::Trait::provided2<'_0, Self>(@1: &'_0 (Self)) let @6: (); // anonymous local @3 := &*(self@1) - @2 := Self::required<'_>(move (@3)) + @2 := @TraitClause0::required<'_>(move (@3)) drop @3 drop @2 @5 := &*(self@1) - @4 := Self::provided1<'_>(move (@5)) + @4 := @TraitClause0::provided1<'_>(move (@5)) drop @5 drop @4 @6 := () diff --git a/charon/tests/ui/issue-70-override-provided-method.3.out b/charon/tests/ui/issue-70-override-provided-method.3.out index 7887201c..c379e81a 100644 --- a/charon/tests/ui/issue-70-override-provided-method.3.out +++ b/charon/tests/ui/issue-70-override-provided-method.3.out @@ -5,20 +5,20 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } trait test_crate::GenericTrait { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone - fn other_method = test_crate::GenericTrait::other_method - fn provided, [@TraitClause1]: core::cmp::PartialEq> = test_crate::GenericTrait::provided[@TraitClause0_0, @TraitClause0_1] + fn other_method = test_crate::GenericTrait::other_method[Self] + fn provided, [@TraitClause1]: core::cmp::PartialEq> = test_crate::GenericTrait::provided[Self, @TraitClause0_0, @TraitClause0_1] } struct test_crate::Override @@ -71,6 +71,8 @@ where } fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn test_crate::{impl test_crate::GenericTrait[@TraitClause0]> for test_crate::Override[@TraitClause0]}::provided(@1: core::option::Option[@TraitClause0], @2: U) where @@ -188,11 +190,14 @@ where } fn test_crate::GenericTrait::other_method() +where + [@TraitClause0]: test_crate::GenericTrait, fn test_crate::GenericTrait::provided(@1: T, @2: U) where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::cmp::PartialEq, + [@TraitClause0]: test_crate::GenericTrait, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::cmp::PartialEq, { let @0: (); // return let x@1: T; // arg #1 @@ -204,11 +209,11 @@ where @4 := &y@2 @5 := &x@1 - @3 := @TraitClause1::eq<'_, '_>(move (@4), move (@5)) + @3 := @TraitClause2::eq<'_, '_>(move (@4), move (@5)) if move (@3) { drop @5 drop @4 - @0 := Self::other_method() + @0 := @TraitClause0::other_method() } else { drop @5 @@ -224,6 +229,8 @@ where } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/issue-70-override-provided-method.out b/charon/tests/ui/issue-70-override-provided-method.out index cd17f329..81af076c 100644 --- a/charon/tests/ui/issue-70-override-provided-method.out +++ b/charon/tests/ui/issue-70-override-provided-method.out @@ -12,7 +12,7 @@ enum core::option::Option trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } fn core::option::{impl core::cmp::PartialEq[@TraitClause0]> for core::option::Option[@TraitClause0]}#14::eq<'_0, '_1, T>(@1: &'_0 (core::option::Option[@TraitClause0]), @2: &'_1 (core::option::Option[@TraitClause0])) -> bool @@ -93,7 +93,7 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } fn core::cmp::impls::{impl core::cmp::PartialOrd for u32}#64::partial_cmp<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> core::option::Option[core::marker::Sized] @@ -127,6 +127,8 @@ impl test_crate::{impl core::cmp::PartialOrd for test_crate::Fo } fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, impl core::option::{impl core::cmp::PartialEq[@TraitClause0]> for core::option::Option[@TraitClause0]}#14 : core::cmp::PartialEq[@TraitClause0], core::option::Option[@TraitClause0]> where @@ -137,6 +139,8 @@ where } fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::impls::{impl core::cmp::PartialEq for u32}#24::eq<'_0, '_1>(@1: &'_0 (u32), @2: &'_1 (u32)) -> bool diff --git a/charon/tests/ui/issue-72-hash-missing-impl.out b/charon/tests/ui/issue-72-hash-missing-impl.out index d8dcbcf5..e3c25d1d 100644 --- a/charon/tests/ui/issue-72-hash-missing-impl.out +++ b/charon/tests/ui/issue-72-hash-missing-impl.out @@ -10,7 +10,7 @@ trait core::marker::Sized trait test_crate::Hash { - fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: test_crate::Hasher> = test_crate::Hash::hash<'_0_0, '_0_1, Self, H>[@TraitClause0_0, @TraitClause0_1] + fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: test_crate::Hasher> = test_crate::Hash::hash<'_0_0, '_0_1, Self, H>[Self, @TraitClause0_0, @TraitClause0_1] } fn test_crate::{impl test_crate::Hash for u32}#1::hash<'_0, '_1, H>(@1: &'_0 (u32), @2: &'_1 mut (H)) @@ -66,8 +66,9 @@ fn test_crate::main() fn test_crate::Hash::hash<'_0, '_1, Self, H>(@1: &'_0 (Self), @2: &'_1 mut (H)) where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: test_crate::Hasher, + [@TraitClause0]: test_crate::Hash, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: test_crate::Hasher, diff --git a/charon/tests/ui/issue-91-enum-to-discriminant-cast.out b/charon/tests/ui/issue-91-enum-to-discriminant-cast.out index ba60901c..1c7e6a1e 100644 --- a/charon/tests/ui/issue-91-enum-to-discriminant-cast.out +++ b/charon/tests/ui/issue-91-enum-to-discriminant-cast.out @@ -10,7 +10,7 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -134,6 +134,8 @@ fn test_crate::main() } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/issue-94-recursive-trait-defns.out b/charon/tests/ui/issue-94-recursive-trait-defns.out index 33d43737..221817f8 100644 --- a/charon/tests/ui/issue-94-recursive-trait-defns.out +++ b/charon/tests/ui/issue-94-recursive-trait-defns.out @@ -51,25 +51,29 @@ trait test_crate::T6 { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: test_crate::T7 - fn f = test_crate::T6::f + fn f = test_crate::T6::f[Self] } trait test_crate::T7 { parent_clause0 : [@TraitClause0]: test_crate::T6 - fn g = test_crate::T7::g + fn g = test_crate::T7::g[Self] } fn test_crate::T7::g(@1: u64) +where + [@TraitClause0]: test_crate::T7, fn test_crate::T6::f(@1: u64) +where + [@TraitClause0]: test_crate::T6, { let @0: (); // return let x@1: u64; // arg #1 let @2: u64; // anonymous local @2 := copy (x@1) - @0 := Self::parent_clause1::g(move (@2)) + @0 := @TraitClause0::parent_clause1::g(move (@2)) drop @2 @0 := () return diff --git a/charon/tests/ui/iterator.out b/charon/tests/ui/iterator.out index 3bf68db5..bee465fd 100644 --- a/charon/tests/ui/iterator.out +++ b/charon/tests/ui/iterator.out @@ -58,8 +58,8 @@ enum core::result::Result 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> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self>[Self] } trait core::marker::Copy @@ -152,7 +152,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -160,7 +160,7 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } opaque type core::iter::adapters::map::Map @@ -223,7 +223,7 @@ opaque type core::iter::adapters::inspect::Inspect trait core::ops::try_trait::FromResidual { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn from_residual = core::ops::try_trait::FromResidual::from_residual + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -242,8 +242,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -260,19 +260,19 @@ where trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs>[Self] } 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> + fn assert_receiver_is_total_eq<'_0> = core::cmp::Eq::assert_receiver_is_total_eq<'_0_0, Self>[Self] } enum core::cmp::Ordering = @@ -284,21 +284,21 @@ enum core::cmp::Ordering = 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> + fn partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs>[Self] + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs>[Self] + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs>[Self] + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs>[Self] } 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] + fn cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[Self, @TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[Self, @TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[Self, @TraitClause0_0] } opaque type core::iter::adapters::rev::Rev @@ -321,83 +321,83 @@ 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] + fn next<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[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>[Self, @TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self>[Self] + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[Self, @TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[Self, @TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self>[Self] + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self>[Self] + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[Self, @TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[Self, @TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[Self, @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[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[Self, @TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[Self, @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>[Self, @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>[Self, @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[Self, @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>[Self, @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[Self, @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>[Self, @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>[Self, @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[Self, @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[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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[Self, @TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] + fn copied<'a, T, [@TraitClause0]: 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>[Self, @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>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[Self, @TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[Self, @TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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>[Self, @TraitClause0_0] } trait core::iter::traits::collect::IntoIterator @@ -409,7 +409,7 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } opaque type core::iter::adapters::intersperse::Intersperse @@ -452,34 +452,34 @@ 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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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] + 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>[Self, @TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A>[Self] + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A>[Self] + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[Self, @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] + fn next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self>[Self] + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, Self>[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>[Self, @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[Self, @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>[Self, @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> + fn len<'_0> = core::iter::traits::exact_size::ExactSizeIterator::len<'_0_0, Self>[Self] + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self>[Self] } opaque type core::iter::adapters::array_chunks::ArrayChunks @@ -491,21 +491,21 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @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 size<'_0, [@TraitClause0]: core::iter::traits::iterator::Iterator> = core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0_0, Self>[Self, @TraitClause0_0] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -3573,7 +3573,9 @@ fn test_crate::main() return } -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, impl core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array} : core::iter::traits::collect::IntoIterator> where @@ -3600,14 +3602,18 @@ where 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::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, fn core::ops::arith::AddAssign::add_assign<'_0, Self, Rhs>(@1: &'_0 mut (Self), @2: Rhs) +where + [@TraitClause0]: core::ops::arith::AddAssign, 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> + fn add_assign<'_0> = core::ops::arith::AddAssign::add_assign<'_0_0, Self, Rhs>[Self] } impl<'_0> core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i32}#365<'_0> : core::ops::arith::AddAssign @@ -3616,644 +3622,783 @@ impl<'_0> core::ops::arith::{impl core::ops::arith::AddAssign<&'_0 (i32)> for i3 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::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, fn core::iter::traits::iterator::Iterator::size_hint<'_0, Self>(@1: &'_0 (Self)) -> (usize, core::option::Option[core::marker::Sized]) +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = B, fn core::iter::traits::iterator::Iterator::count(@1: Self) -> usize where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, -fn core::iter::traits::iterator::Iterator::last(@1: Self) -> core::option::Option[Self::parent_clause0] +fn core::iter::traits::iterator::Iterator::last(@1: Self) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: 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]>] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, 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, + [@TraitClause0]: core::clone::Clone, -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]>] +unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> @TraitClause0::Item where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, -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::next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> core::result::Result, core::array::iter::IntoIter<@TraitClause0::Item, const N : usize>[@TraitClause0::parent_clause0]>[core::marker::Sized>, core::marker::Sized[@TraitClause0::parent_clause0]>] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, -fn core::iter::traits::iterator::Iterator::step_by(@1: Self, @2: usize) -> core::iter::adapters::step_by::StepBy[@TraitClause0] +fn core::iter::traits::iterator::Iterator::nth<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, -fn core::iter::traits::iterator::Iterator::chain(@1: Self, @2: U) -> core::iter::adapters::chain::Chain[@TraitClause1, @TraitClause2::parent_clause1] +fn core::iter::traits::iterator::Iterator::step_by(@1: Self, @2: usize) -> core::iter::adapters::step_by::StepBy[@TraitClause1] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, [@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] +fn core::iter::traits::iterator::Iterator::chain(@1: Self, @2: U) -> core::iter::adapters::chain::Chain[@TraitClause2, @TraitClause3::parent_clause1] where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + @TraitClause3::Item = @TraitClause0::Item, -fn core::iter::traits::iterator::Iterator::intersperse(@1: Self, @2: Self::Item) -> core::iter::adapters::intersperse::Intersperse[@TraitClause0, Self, @TraitClause1] +fn core::iter::traits::iterator::Iterator::zip(@1: Self, @2: U) -> core::iter::adapters::zip::Zip[@TraitClause2, @TraitClause3::parent_clause1] where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::clone::Clone, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, -fn core::iter::traits::iterator::Iterator::intersperse_with(@1: Self, @2: G) -> core::iter::adapters::intersperse::IntersperseWith[@TraitClause1, @TraitClause0, Self] +fn core::iter::traits::iterator::Iterator::intersperse(@1: Self, @2: @TraitClause0::Item) -> core::iter::adapters::intersperse::Intersperse[@TraitClause1, @TraitClause0, @TraitClause2] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, [@TraitClause1]: core::marker::Sized, - [@TraitClause2]: core::ops::function::FnMut, - @TraitClause2::parent_clause0::Output = Self::Item, + [@TraitClause2]: core::clone::Clone<@TraitClause0::Item>, -fn core::iter::traits::iterator::Iterator::map(@1: Self, @2: F) -> core::iter::adapters::map::Map[@TraitClause2, @TraitClause1] +fn core::iter::traits::iterator::Iterator::intersperse_with(@1: Self, @2: G) -> core::iter::adapters::intersperse::IntersperseWith[@TraitClause2, @TraitClause1, @TraitClause0] where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@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 = (), + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = @TraitClause0::Item, -fn core::iter::traits::iterator::Iterator::filter(@1: Self, @2: P) -> core::iter::adapters::filter::Filter[@TraitClause1, @TraitClause0] +fn core::iter::traits::iterator::Iterator::map(@1: Self, @2: F) -> core::iter::adapters::map::Map[@TraitClause3, @TraitClause2] where - [@TraitClause0]: core::marker::Sized

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

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

, + [@TraitClause0]: core::iter::traits::iterator::Iterator, [@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] +fn core::iter::traits::iterator::Iterator::peekable(@1: Self) -> core::iter::adapters::peekable::Peekable[@TraitClause1, @TraitClause0] where - [@TraitClause0]: core::marker::Sized

, + [@TraitClause0]: core::iter::traits::iterator::Iterator, [@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] +fn core::iter::traits::iterator::Iterator::skip_while(@1: Self, @2: P) -> core::iter::adapters::skip_while::SkipWhile[@TraitClause2, @TraitClause1] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, [@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, + [@TraitClause3]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause3::parent_clause0::Output = bool, -fn core::iter::traits::iterator::Iterator::take(@1: Self, @2: usize) -> core::iter::adapters::take::Take[@TraitClause0] +fn core::iter::traits::iterator::Iterator::take_while(@1: Self, @2: P) -> core::iter::adapters::take_while::TakeWhile[@TraitClause2, @TraitClause1] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized

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

, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause5]: for<'_0> core::ops::function::FnMut, T : 'a, - Self::Item = &'a mut (T), - for<'_0> @TraitClause4::parent_clause0::Output = bool, + @TraitClause0::Item = &'a mut (T), + for<'_0> @TraitClause5::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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized

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

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause3::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] +fn core::iter::traits::iterator::Iterator::find_map<'_0, Self, B, F>(@1: &'_0 mut (Self), @2: F) -> core::option::Option[@TraitClause1] where - [@TraitClause0]: core::marker::Sized

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

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

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

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::Ord<@TraitClause0::Item>, + [@TraitClause4]: core::marker::Sized, + @TraitClause2::Item = @TraitClause0::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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::collect::IntoIterator, + [@TraitClause5]: core::ops::function::FnMut, + @TraitClause5::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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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], + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::collect::IntoIterator, + [@TraitClause5]: core::ops::function::FnMut, + @TraitClause5::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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialEq<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::collect::IntoIterator, + [@TraitClause5]: core::ops::function::FnMut, + @TraitClause5::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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialEq<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, fn core::iter::traits::iterator::Iterator::is_sorted(@1: Self) -> bool where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::cmp::PartialOrd, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause0::Item>, 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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, + for<'_0, '_1> @TraitClause3::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, + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + [@TraitClause5]: core::cmp::PartialOrd, + @TraitClause4::parent_clause0::Output = K, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::cmp::Ord, + [@TraitClause1]: core::marker::Sized, fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::cmp::Ord, + [@TraitClause1]: core::marker::Sized, fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::cmp::Ord, + [@TraitClause1]: core::marker::Sized, fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: core::cmp::Eq, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize where - [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, + [@TraitClause1]: 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, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::Item = A, fn core::iter::traits::collect::Extend::extend_one<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) +where + [@TraitClause0]: core::iter::traits::collect::Extend, fn core::iter::traits::collect::Extend::extend_reserve<'_0, Self, A>(@1: &'_0 mut (Self), @2: usize) +where + [@TraitClause0]: core::iter::traits::collect::Extend, unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: 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::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, 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]>] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, -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::nth_back<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, 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, + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::marker::Sized, + [@TraitClause5]: core::ops::function::FnMut, + [@TraitClause6]: core::ops::try_trait::Try, + @TraitClause5::parent_clause0::Output = R, + @TraitClause6::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, + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::rfind<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::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, + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause3::parent_clause0::Output = bool, fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::exact_size::ExactSizeIterator, fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool +where + [@TraitClause0]: core::iter::traits::exact_size::ExactSizeIterator, diff --git a/charon/tests/ui/loops.out b/charon/tests/ui/loops.out index 206ce451..ec078a8a 100644 --- a/charon/tests/ui/loops.out +++ b/charon/tests/ui/loops.out @@ -791,7 +791,7 @@ 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -802,12 +802,12 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } enum core::cmp::Ordering = @@ -819,7 +819,7 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::iter::range::Step @@ -827,9 +827,9 @@ trait core::iter::range::Step parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone parent_clause2 : [@TraitClause2]: core::cmp::PartialOrd - fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self> - fn forward_checked = core::iter::range::Step::forward_checked - fn backward_checked = core::iter::range::Step::backward_checked + fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self>[Self] + fn forward_checked = core::iter::range::Step::forward_checked[Self] + fn backward_checked = core::iter::range::Step::backward_checked[Self] } fn core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0, A>(@1: &'_0 mut (core::ops::range::Range[@TraitClause0])) -> core::option::Option[@TraitClause0] @@ -1327,12 +1327,12 @@ trait core::slice::index::SliceIndex { parent_clause0 : [@TraitClause0]: core::slice::index::private_slice_index::Sealed type Output - fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T> - fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T> - fn get_unchecked = core::slice::index::SliceIndex::get_unchecked - fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut - fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T> - fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T> + fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T>[Self] + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T>[Self] + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked[Self] + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut[Self] + fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T>[Self] + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T>[Self] } fn alloc::vec::{impl core::ops::index::IndexMut for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#14::index_mut<'_0, T, I, A>(@1: &'_0 mut (alloc::vec::Vec[@TraitClause0, @TraitClause2]), @2: I) -> &'_0 mut (@TraitClause3::Output) @@ -1559,7 +1559,9 @@ where } } -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, trait core::iter::traits::collect::IntoIterator where @@ -1570,7 +1572,7 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator @@ -1586,20 +1588,24 @@ where 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::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, trait core::ops::index::Index { type Output - fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } -fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (Self::parent_clause0::Output) +fn core::ops::index::IndexMut::index_mut<'_0, Self, Idx>(@1: &'_0 mut (Self), @2: Idx) -> &'_0 mut (@TraitClause0::parent_clause0::Output) +where + [@TraitClause0]: core::ops::index::IndexMut, trait core::ops::index::IndexMut { parent_clause0 : [@TraitClause0]: core::ops::index::Index - fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx> + fn index_mut<'_0> = core::ops::index::IndexMut::index_mut<'_0_0, Self, Idx>[Self] } fn alloc::vec::{impl core::ops::index::Index for alloc::vec::Vec[@TraitClause0, @TraitClause2]}#13::index<'_0, T, I, A>(@1: &'_0 (alloc::vec::Vec[@TraitClause0, @TraitClause2]), @2: I) -> &'_0 (@TraitClause3::Output) @@ -1632,16 +1638,28 @@ where } fn core::iter::range::Step::steps_between<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::iter::range::Step, -fn core::iter::range::Step::forward_checked(@1: Self, @2: usize) -> core::option::Option[Self::parent_clause0] +fn core::iter::range::Step::forward_checked(@1: Self, @2: usize) -> core::option::Option[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::range::Step, -fn core::iter::range::Step::backward_checked(@1: Self, @2: usize) -> core::option::Option[Self::parent_clause0] +fn core::iter::range::Step::backward_checked(@1: Self, @2: usize) -> core::option::Option[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::range::Step, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, trait core::cmp::Eq { @@ -1652,7 +1670,7 @@ 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -1662,6 +1680,8 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, trait core::marker::Tuple @@ -1671,7 +1691,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -1679,20 +1699,20 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -1711,8 +1731,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -1729,19 +1749,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -1758,67 +1778,99 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, -fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Self::Output)>[core::marker::Sized<&'_0 (Self::Output)>] +fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (@TraitClause0::Output)>[core::marker::Sized<&'_0 (@TraitClause0::Output)>] +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::get_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (Self::Output)>[core::marker::Sized<&'_0 mut (Self::Output)>] +fn core::slice::index::SliceIndex::get_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (@TraitClause0::Output)>[core::marker::Sized<&'_0 mut (@TraitClause0::Output)>] +where + [@TraitClause0]: core::slice::index::SliceIndex, -unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: Self, @2: *const T) -> *const Self::Output +unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: Self, @2: *const T) -> *const @TraitClause0::Output +where + [@TraitClause0]: core::slice::index::SliceIndex, -unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: Self, @2: *mut T) -> *mut Self::Output +unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: Self, @2: *mut T) -> *mut @TraitClause0::Output +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::index<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> &'_0 (Self::Output) +fn core::slice::index::SliceIndex::index<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> &'_0 (@TraitClause0::Output) +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::index_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> &'_0 mut (Self::Output) +fn core::slice::index::SliceIndex::index_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> &'_0 mut (@TraitClause0::Output) +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> &'_0 (Self::Output) +fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> &'_0 (@TraitClause0::Output) +where + [@TraitClause0]: core::ops::index::Index, diff --git a/charon/tests/ui/method-impl-generalization.out b/charon/tests/ui/method-impl-generalization.out index 997b5c45..b6cbc637 100644 --- a/charon/tests/ui/method-impl-generalization.out +++ b/charon/tests/ui/method-impl-generalization.out @@ -5,7 +5,7 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -16,8 +16,8 @@ trait core::marker::Copy trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method1 = test_crate::Trait::method1 - fn method2, [@TraitClause1]: core::marker::Copy> = test_crate::Trait::method2[@TraitClause0_0, @TraitClause0_1] + fn method1 = test_crate::Trait::method1[Self] + fn method2, [@TraitClause1]: core::marker::Copy> = test_crate::Trait::method2[Self, @TraitClause0_0, @TraitClause0_1] } fn test_crate::{impl test_crate::Trait for ()}::method1(@1: (), @2: &'static (u32)) -> bool @@ -57,7 +57,7 @@ trait test_crate::MyCompare { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn compare = test_crate::MyCompare::compare + fn compare = test_crate::MyCompare::compare[Self] } fn test_crate::{impl test_crate::MyCompare<&'a (())> for &'a (())}#1::compare<'a>(@1: &'a (()), @2: &'a (())) -> bool @@ -129,7 +129,7 @@ fn test_crate::main() trait test_crate::Foo { - fn foo<'a, 'b> = test_crate::Foo::foo<'a, 'b, Self> + fn foo<'a, 'b> = test_crate::Foo::foo<'a, 'b, Self>[Self] } fn test_crate::{impl test_crate::Foo for ()}#2::foo<'a, 'b>(@1: &'b (()), @2: &'a (())) -> &'b (()) @@ -173,17 +173,26 @@ fn test_crate::call_foo<'e>(@1: &'e (())) -> &'e (()) } fn test_crate::Trait::method1(@1: Self, @2: &'static (u32)) -> bool +where + [@TraitClause0]: test_crate::Trait, fn test_crate::Trait::method2(@1: Self, @2: T) where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Copy, + [@TraitClause0]: test_crate::Trait, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Copy, fn test_crate::MyCompare::compare(@1: Self, @2: Other) -> bool +where + [@TraitClause0]: test_crate::MyCompare, fn test_crate::Foo::foo<'a, 'b, Self>(@1: &'a (()), @2: &'b (())) -> &'a (()) +where + [@TraitClause0]: test_crate::Foo, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/ml-name-matcher-tests.out b/charon/tests/ui/ml-name-matcher-tests.out index 76be287a..b735a550 100644 --- a/charon/tests/ui/ml-name-matcher-tests.out +++ b/charon/tests/ui/ml-name-matcher-tests.out @@ -16,7 +16,7 @@ trait core::marker::Sized trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method> = test_crate::Trait::method[@TraitClause0_0] + fn method> = test_crate::Trait::method[Self, @TraitClause0_0] } struct alloc::alloc::Global = {} @@ -93,12 +93,12 @@ trait core::slice::index::SliceIndex { parent_clause0 : [@TraitClause0]: core::slice::index::private_slice_index::Sealed type Output - fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T> - fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T> - fn get_unchecked = core::slice::index::SliceIndex::get_unchecked - fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut - fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T> - fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T> + fn get<'_0> = core::slice::index::SliceIndex::get<'_0_0, Self, T>[Self] + fn get_mut<'_0> = core::slice::index::SliceIndex::get_mut<'_0_0, Self, T>[Self] + fn get_unchecked = core::slice::index::SliceIndex::get_unchecked[Self] + fn get_unchecked_mut = core::slice::index::SliceIndex::get_unchecked_mut[Self] + fn index<'_0> = core::slice::index::SliceIndex::index<'_0_0, Self, T>[Self] + fn index_mut<'_0> = core::slice::index::SliceIndex::index_mut<'_0_0, Self, T>[Self] } fn core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0, T, I>(@1: &'_0 (Slice), @2: I) -> &'_0 (@TraitClause2::Output) @@ -196,14 +196,17 @@ fn test_crate::foo() fn test_crate::Trait::method() where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: test_crate::Trait, + [@TraitClause1]: core::marker::Sized, -fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> &'_0 (Self::Output) +fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> &'_0 (@TraitClause0::Output) +where + [@TraitClause0]: core::ops::index::Index, trait core::ops::index::Index { type Output - fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } impl core::slice::index::{impl core::ops::index::Index for Slice} : core::ops::index::Index, I> @@ -216,17 +219,29 @@ where fn index<'_0> = core::slice::index::{impl core::ops::index::Index for Slice}::index<'_0_0, T, I>[@TraitClause0, @TraitClause1, @TraitClause2] } -fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (Self::Output)>[core::marker::Sized<&'_0 (Self::Output)>] +fn core::slice::index::SliceIndex::get<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> core::option::Option<&'_0 (@TraitClause0::Output)>[core::marker::Sized<&'_0 (@TraitClause0::Output)>] +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::get_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (Self::Output)>[core::marker::Sized<&'_0 mut (Self::Output)>] +fn core::slice::index::SliceIndex::get_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> core::option::Option<&'_0 mut (@TraitClause0::Output)>[core::marker::Sized<&'_0 mut (@TraitClause0::Output)>] +where + [@TraitClause0]: core::slice::index::SliceIndex, -unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: Self, @2: *const T) -> *const Self::Output +unsafe fn core::slice::index::SliceIndex::get_unchecked(@1: Self, @2: *const T) -> *const @TraitClause0::Output +where + [@TraitClause0]: core::slice::index::SliceIndex, -unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: Self, @2: *mut T) -> *mut Self::Output +unsafe fn core::slice::index::SliceIndex::get_unchecked_mut(@1: Self, @2: *mut T) -> *mut @TraitClause0::Output +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::index<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> &'_0 (Self::Output) +fn core::slice::index::SliceIndex::index<'_0, Self, T>(@1: Self, @2: &'_0 (T)) -> &'_0 (@TraitClause0::Output) +where + [@TraitClause0]: core::slice::index::SliceIndex, -fn core::slice::index::SliceIndex::index_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> &'_0 mut (Self::Output) +fn core::slice::index::SliceIndex::index_mut<'_0, Self, T>(@1: Self, @2: &'_0 mut (T)) -> &'_0 mut (@TraitClause0::Output) +where + [@TraitClause0]: core::slice::index::SliceIndex, diff --git a/charon/tests/ui/no_nested_borrows.out b/charon/tests/ui/no_nested_borrows.out index 9fb850e6..f7649221 100644 --- a/charon/tests/ui/no_nested_borrows.out +++ b/charon/tests/ui/no_nested_borrows.out @@ -637,15 +637,17 @@ fn test_crate::read_then_incr<'_0>(@1: &'_0 mut (u32)) -> u32 trait core::ops::deref::Deref { type Target - fn deref<'_0> = core::ops::deref::Deref::deref<'_0_0, Self> + fn deref<'_0> = core::ops::deref::Deref::deref<'_0_0, Self>[Self] } -fn core::ops::deref::DerefMut::deref_mut<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 mut (Self::parent_clause0::Target) +fn core::ops::deref::DerefMut::deref_mut<'_0, Self>(@1: &'_0 mut (Self)) -> &'_0 mut (@TraitClause0::parent_clause0::Target) +where + [@TraitClause0]: core::ops::deref::DerefMut, trait core::ops::deref::DerefMut { parent_clause0 : [@TraitClause0]: core::ops::deref::Deref - fn deref_mut<'_0> = core::ops::deref::DerefMut::deref_mut<'_0_0, Self> + fn deref_mut<'_0> = core::ops::deref::DerefMut::deref_mut<'_0_0, Self>[Self] } impl alloc::boxed::{impl core::ops::deref::Deref for alloc::boxed::Box[@TraitClause0]}#38 : core::ops::deref::Deref[@TraitClause0]> @@ -664,7 +666,9 @@ where fn deref_mut<'_0> = alloc::boxed::{impl core::ops::deref::DerefMut for alloc::boxed::Box[@TraitClause0]}#39::deref_mut<'_0_0, T, A>[@TraitClause0] } -fn core::ops::deref::Deref::deref<'_0, Self>(@1: &'_0 (Self)) -> &'_0 (Self::Target) +fn core::ops::deref::Deref::deref<'_0, Self>(@1: &'_0 (Self)) -> &'_0 (@TraitClause0::Target) +where + [@TraitClause0]: core::ops::deref::Deref, diff --git a/charon/tests/ui/opacity.out b/charon/tests/ui/opacity.out index 803f8371..e44f249d 100644 --- a/charon/tests/ui/opacity.out +++ b/charon/tests/ui/opacity.out @@ -33,10 +33,12 @@ trait core::convert::From { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn from = core::convert::From::from + fn from = core::convert::From::from[Self] } fn core::convert::From::from(@1: T) -> Self +where + [@TraitClause0]: core::convert::From, fn core::convert::{impl core::convert::Into for T}#3::into(@1: T) -> U where @@ -114,12 +116,14 @@ struct test_crate::Struct = {} unsafe fn test_crate::extern_fn(@1: i32) fn core::convert::Into::into(@1: Self) -> T +where + [@TraitClause0]: core::convert::Into, trait core::convert::Into { parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized - fn into = core::convert::Into::into + fn into = core::convert::Into::into[Self] } impl core::convert::{impl core::convert::Into for T}#3 : core::convert::Into diff --git a/charon/tests/ui/opaque_attribute.out b/charon/tests/ui/opaque_attribute.out index 35c41187..51d9cd8c 100644 --- a/charon/tests/ui/opaque_attribute.out +++ b/charon/tests/ui/opaque_attribute.out @@ -2,7 +2,7 @@ trait test_crate::BoolTrait { - fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self> + fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self>[Self] } fn test_crate::{impl test_crate::BoolTrait for bool}::get_bool<'_0>(@1: &'_0 (bool)) -> bool @@ -65,6 +65,8 @@ fn test_crate::call_fn_in_opaque_module() } fn test_crate::BoolTrait::get_bool<'_0, Self>(@1: &'_0 (Self)) -> bool +where + [@TraitClause0]: test_crate::BoolTrait, diff --git a/charon/tests/ui/polonius_map.out b/charon/tests/ui/polonius_map.out index 66b1a370..053ea638 100644 --- a/charon/tests/ui/polonius_map.out +++ b/charon/tests/ui/polonius_map.out @@ -20,7 +20,7 @@ enum core::option::Option trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::cmp::Eq @@ -30,13 +30,13 @@ trait core::cmp::Eq trait core::hash::Hasher { - fn finish<'_0> = core::hash::Hasher::finish<'_0_0, Self> - fn write<'_0, '_1> = core::hash::Hasher::write<'_0_0, '_0_1, Self> + fn finish<'_0> = core::hash::Hasher::finish<'_0_0, Self>[Self] + fn write<'_0, '_1> = core::hash::Hasher::write<'_0_0, '_0_1, Self>[Self] } trait core::hash::Hash { - fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hasher> = core::hash::Hash::hash<'_0_0, '_0_1, Self, H>[@TraitClause0_0, @TraitClause0_1] + fn hash<'_0, '_1, H, [@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::hash::Hasher> = core::hash::Hash::hash<'_0_0, '_0_1, Self, H>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::hash::BuildHasher @@ -44,12 +44,12 @@ trait core::hash::BuildHasher parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::hash::Hasher type Hasher - fn build_hasher<'_0> = core::hash::BuildHasher::build_hasher<'_0_0, Self> + fn build_hasher<'_0> = core::hash::BuildHasher::build_hasher<'_0_0, Self>[Self] } trait core::borrow::Borrow { - fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed> + fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed>[Self] } fn std::collections::hash::map::{std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#2::get<'_0, '_1, K, V, S, Q>(@1: &'_0 (std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]), @2: &'_1 (Q)) -> core::option::Option<&'_0 (V)>[core::marker::Sized<&'_0 (V)>] @@ -195,12 +195,14 @@ fn test_crate::get_or_insert<'_0>(@1: &'_0 mut (std::collections::hash::map::Has return } -fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> &'_0 (Self::Output) +fn core::ops::index::Index::index<'_0, Self, Idx>(@1: &'_0 (Self), @2: Idx) -> &'_0 (@TraitClause0::Output) +where + [@TraitClause0]: core::ops::index::Index, trait core::ops::index::Index { type Output - fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx> + fn index<'_0> = core::ops::index::Index::index<'_0_0, Self, Idx>[Self] } impl<'_0, K, Q, V, S> std::collections::hash::map::{impl core::ops::index::Index<&'_0 (Q)> for std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#9<'_0, K, Q, V, S> : core::ops::index::Index[@TraitClause0, @TraitClause1, @TraitClause2], &'_0 (Q)> @@ -219,20 +221,31 @@ where fn index<'_0> = std::collections::hash::map::{impl core::ops::index::Index<&'_0 (Q)> for std::collections::hash::map::HashMap[@TraitClause0, @TraitClause1, @TraitClause2]}#9::index<'_0, '_0_0, K, Q, V, S>[@TraitClause0, @TraitClause1, @TraitClause2, @TraitClause3, @TraitClause4, @TraitClause5, @TraitClause6, @TraitClause7, @TraitClause8] } -fn core::hash::BuildHasher::build_hasher<'_0, Self>(@1: &'_0 (Self)) -> Self::Hasher +fn core::hash::BuildHasher::build_hasher<'_0, Self>(@1: &'_0 (Self)) -> @TraitClause0::Hasher +where + [@TraitClause0]: core::hash::BuildHasher, fn core::hash::Hasher::write<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Slice)) +where + [@TraitClause0]: core::hash::Hasher, fn core::hash::Hasher::finish<'_0, Self>(@1: &'_0 (Self)) -> u64 +where + [@TraitClause0]: core::hash::Hasher, fn core::borrow::Borrow::borrow<'_0, Self, Borrowed>(@1: &'_0 (Self)) -> &'_0 (Borrowed) +where + [@TraitClause0]: core::borrow::Borrow, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::hash::Hash::hash<'_0, '_1, Self, H>(@1: &'_0 (Self), @2: &'_1 mut (H)) where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::hash::Hasher, + [@TraitClause0]: core::hash::Hash, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::hash::Hasher, diff --git a/charon/tests/ui/predicates-on-late-bound-vars.out b/charon/tests/ui/predicates-on-late-bound-vars.out index 43ce5fd5..1e22bcf8 100644 --- a/charon/tests/ui/predicates-on-late-bound-vars.out +++ b/charon/tests/ui/predicates-on-late-bound-vars.out @@ -25,7 +25,7 @@ fn test_crate::wrap<'a>(@1: &'a (u32)) -> core::option::Option<&'a (u32)>[core:: trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } fn test_crate::wrap2<'a>(@1: &'a (u32)) -> core::option::Option<&'a (u32)>[core::marker::Sized<&'_ (u32)>] @@ -109,6 +109,8 @@ where } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/quantified-clause.out b/charon/tests/ui/quantified-clause.out index cddafd22..d0ca01a5 100644 --- a/charon/tests/ui/quantified-clause.out +++ b/charon/tests/ui/quantified-clause.out @@ -10,7 +10,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -18,7 +18,7 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } fn test_crate::foo(@1: F) @@ -84,7 +84,7 @@ 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } trait core::iter::traits::collect::IntoIterator @@ -96,13 +96,13 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -118,26 +118,36 @@ where [@TraitClause3]: for<'_0> core::marker::Copy<@TraitClause2::Item>, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, -fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0] +fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: 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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -156,8 +166,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -174,19 +184,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -196,7 +206,7 @@ trait core::iter::traits::exact_size::ExactSizeIterator trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::cmp::Eq @@ -213,28 +223,28 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -244,44 +254,64 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, diff --git a/charon/tests/ui/region-inference-vars.out b/charon/tests/ui/region-inference-vars.out index 1fbd493a..a3b71ecc 100644 --- a/charon/tests/ui/region-inference-vars.out +++ b/charon/tests/ui/region-inference-vars.out @@ -16,7 +16,7 @@ trait test_crate::MyTryFrom parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Error - fn from<[@TraitClause0]: core::marker::Sized> = test_crate::MyTryFrom::from[@TraitClause0_0] + fn from<[@TraitClause0]: core::marker::Sized> = test_crate::MyTryFrom::from[Self, @TraitClause0_0] } fn test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}::from<'_0>(@1: &'_0 (bool)) -> core::result::Result[core::marker::Sized, core::marker::Sized<()>] @@ -39,9 +39,10 @@ impl<'_0> test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}<'_0> : fn from = test_crate::{impl test_crate::MyTryFrom<&'_0 (bool)> for bool}::from<'_0> } -fn test_crate::MyTryFrom::from(@1: T) -> core::result::Result[@TraitClause0, Self::parent_clause1] +fn test_crate::MyTryFrom::from(@1: T) -> core::result::Result[@TraitClause1, @TraitClause0::parent_clause1] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: test_crate::MyTryFrom, + [@TraitClause1]: core::marker::Sized, diff --git a/charon/tests/ui/rename_attribute.out b/charon/tests/ui/rename_attribute.out index b0a3c6c2..6036cb1f 100644 --- a/charon/tests/ui/rename_attribute.out +++ b/charon/tests/ui/rename_attribute.out @@ -2,7 +2,7 @@ trait test_crate::BoolTrait { - fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self> + fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self>[Self] fn ret_true<'_0> = test_crate::BoolTrait::ret_true<'_0_0, Self> } @@ -87,6 +87,8 @@ global test_crate::C: u32 = test_crate::C() type test_crate::Test2 = u32 fn test_crate::BoolTrait::get_bool<'_0, Self>(@1: &'_0 (Self)) -> bool +where + [@TraitClause0]: test_crate::BoolTrait, fn test_crate::BoolTrait::ret_true<'_0, Self>(@1: &'_0 (Self)) -> bool { diff --git a/charon/tests/ui/result-unwrap.out b/charon/tests/ui/result-unwrap.out index 028dfea4..b6b43211 100644 --- a/charon/tests/ui/result-unwrap.out +++ b/charon/tests/ui/result-unwrap.out @@ -43,7 +43,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } fn core::result::unwrap_failed<'_0, '_1>(@1: &'_0 (Str), @2: &'_1 (dyn (exists(TODO)))) -> ! @@ -138,12 +138,16 @@ fn test_crate::unwrap(@1: core::result::Result[core::marker::Sized(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::Debug, fn core::fmt::LowerHex::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::LowerHex, trait core::fmt::LowerHex { - fn fmt<'_0, '_1, '_2> = core::fmt::LowerHex::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::LowerHex::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } impl core::fmt::num::{impl core::fmt::LowerHex for u32}#60 : core::fmt::LowerHex @@ -152,10 +156,12 @@ impl core::fmt::num::{impl core::fmt::LowerHex for u32}#60 : core::fmt::LowerHex } fn core::fmt::Display::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::Display, trait core::fmt::Display { - fn fmt<'_0, '_1, '_2> = core::fmt::Display::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::Display::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } impl core::fmt::num::imp::{impl core::fmt::Display for u32}#10 : core::fmt::Display @@ -164,10 +170,12 @@ impl core::fmt::num::imp::{impl core::fmt::Display for u32}#10 : core::fmt::Disp } fn core::fmt::UpperHex::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::UpperHex, trait core::fmt::UpperHex { - fn fmt<'_0, '_1, '_2> = core::fmt::UpperHex::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::UpperHex::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } impl core::fmt::num::{impl core::fmt::UpperHex for u32}#61 : core::fmt::UpperHex diff --git a/charon/tests/ui/rust-name-matcher-tests.out b/charon/tests/ui/rust-name-matcher-tests.out index 9a4dc430..afed9e78 100644 --- a/charon/tests/ui/rust-name-matcher-tests.out +++ b/charon/tests/ui/rust-name-matcher-tests.out @@ -16,7 +16,7 @@ trait core::marker::Sized trait test_crate::Trait { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn method> = test_crate::Trait::method[@TraitClause0_0] + fn method> = test_crate::Trait::method[Self, @TraitClause0_0] } struct alloc::alloc::Global = {} @@ -97,7 +97,8 @@ where fn test_crate::Trait::method() where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: test_crate::Trait, + [@TraitClause1]: core::marker::Sized, diff --git a/charon/tests/ui/scopes.out b/charon/tests/ui/scopes.out index 342fb6a8..cc634993 100644 --- a/charon/tests/ui/scopes.out +++ b/charon/tests/ui/scopes.out @@ -2,7 +2,7 @@ trait test_crate::Trait<'a, Self> { - fn method<'b> = test_crate::Trait::method<'a, 'b, Self> + fn method<'b> = test_crate::Trait::method<'a, 'b, Self>[Self] } fn test_crate::{impl test_crate::Trait<'a> for &'a (())}::method<'a, 'b>(@1: &'b (&'a (()))) -> &'b (()) @@ -23,6 +23,8 @@ fn test_crate::bar<'_0>(@1: &'_0 (fn<'_0>(&'_0_0 (fn<'_0>(&'_0_0 (u32)) -> u32)) fn test_crate::baz<'a>(@1: &'a (fn<'b>(&'a (u32), &'b (fn<'c>(&'a (u32), &'b (u32), &'c (u32)) -> u32)))) fn test_crate::Trait::method<'a, 'b, Self>(@1: &'b (Self)) -> &'b (()) +where + [@TraitClause0]: test_crate::Trait<'a, Self>, diff --git a/charon/tests/ui/simple/assoc-type-with-fn-bound.out b/charon/tests/ui/simple/assoc-type-with-fn-bound.out index 8f2b8d1d..0243fe1c 100644 --- a/charon/tests/ui/simple/assoc-type-with-fn-bound.out +++ b/charon/tests/ui/simple/assoc-type-with-fn-bound.out @@ -1,6 +1,7 @@ -error: Could not compute the value of Self::Clause1::Clause0::Clause0::Output needed to update generics for item core::ops::function::FnOnce. +error: Could not compute the value of Clause1_0::Clause1::Clause0::Clause0::Output needed to update generics <@TraitClause1_0::Foo, ()> for item core::ops::function::FnOnce. Constraints in scope: - - Self::Foo = @Type0_1 + - Self::Foo = @Type0_2 + - Clause0_0::Foo = @Type0_1 --> tests/ui/simple/assoc-type-with-fn-bound.rs:9:5 | 9 | fn call(&self) -> >::Output; diff --git a/charon/tests/ui/simple/call-method-via-supertrait-bound.out b/charon/tests/ui/simple/call-method-via-supertrait-bound.out index bf372291..ad228d55 100644 --- a/charon/tests/ui/simple/call-method-via-supertrait-bound.out +++ b/charon/tests/ui/simple/call-method-via-supertrait-bound.out @@ -9,7 +9,7 @@ trait test_crate::ImpliesOtherTrait trait test_crate::HasMethod { - fn method<'_0> = test_crate::HasMethod::method<'_0_0, Self> + fn method<'_0> = test_crate::HasMethod::method<'_0_0, Self>[Self] } trait core::marker::Sized @@ -61,6 +61,8 @@ where } fn test_crate::HasMethod::method<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: test_crate::HasMethod, diff --git a/charon/tests/ui/simple/fewer-clauses-in-method-impl.out b/charon/tests/ui/simple/fewer-clauses-in-method-impl.out index 8f3c3db1..5c80be7a 100644 --- a/charon/tests/ui/simple/fewer-clauses-in-method-impl.out +++ b/charon/tests/ui/simple/fewer-clauses-in-method-impl.out @@ -5,7 +5,7 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Copy @@ -15,7 +15,7 @@ trait core::marker::Copy trait test_crate::Trait { - fn method, [@TraitClause1]: core::marker::Copy> = test_crate::Trait::method[@TraitClause0_0, @TraitClause0_1] + fn method, [@TraitClause1]: core::marker::Copy> = test_crate::Trait::method[Self, @TraitClause0_0, @TraitClause0_1] } fn test_crate::{impl test_crate::Trait for ()}::method() @@ -48,10 +48,13 @@ fn test_crate::main() fn test_crate::Trait::method() where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::marker::Copy, + [@TraitClause0]: test_crate::Trait, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Copy, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, diff --git a/charon/tests/ui/simple/generic-impl-with-method.out b/charon/tests/ui/simple/generic-impl-with-method.out index 7e49226a..f36a0835 100644 --- a/charon/tests/ui/simple/generic-impl-with-method.out +++ b/charon/tests/ui/simple/generic-impl-with-method.out @@ -2,7 +2,7 @@ trait test_crate::Trait { - fn method<'_0> = test_crate::Trait::method<'_0_0, Self> + fn method<'_0> = test_crate::Trait::method<'_0_0, Self>[Self] } trait core::marker::Sized @@ -29,6 +29,8 @@ where } fn test_crate::Trait::method<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: test_crate::Trait, diff --git a/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out b/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out index e27e4149..629fd0e1 100644 --- a/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out +++ b/charon/tests/ui/simple/pass-higher-kinded-fn-item-as-closure.out @@ -18,7 +18,7 @@ trait core::ops::function::FnOnce parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -26,7 +26,7 @@ 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, Self_Clause0_Output> + fn call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args, Self_Clause0_Output, Self_Clause0_Output>[Self] } trait core::ops::function::Fn @@ -34,7 +34,7 @@ trait core::ops::function::Fn parent_clause0 : [@TraitClause0]: core::ops::function::FnMut parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output> + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args, Self_Clause0_Clause0_Output, Self_Clause0_Clause0_Output>[Self] } fn test_crate::call<'b, F>(@1: F) @@ -67,11 +67,17 @@ fn test_crate::flibidi() return } -fn core::ops::function::Fn::call<'_0, Self, Args, Self_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Self_Clause0_Clause0_Output +fn core::ops::function::Fn::call<'_0, Self, Args, Clause0_Clause0_Clause0_Output, Self_Clause0_Clause0_Output>(@1: &'_0 (Self), @2: Args) -> Clause0_Clause0_Clause0_Output +where + [@TraitClause0]: core::ops::function::Fn, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Self_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Self_Clause0_Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args, Clause0_Clause0_Output, Self_Clause0_Output>(@1: &'_0 mut (Self), @2: Args) -> Clause0_Clause0_Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self_Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Clause0_Output +where + [@TraitClause0]: core::ops::function::FnOnce, diff --git a/charon/tests/ui/string-literal.out b/charon/tests/ui/string-literal.out index 89e3b63a..382e7f9c 100644 --- a/charon/tests/ui/string-literal.out +++ b/charon/tests/ui/string-literal.out @@ -57,10 +57,12 @@ fn test_crate::main() } fn alloc::string::ToString::to_string<'_0, Self>(@1: &'_0 (Self)) -> alloc::string::String +where + [@TraitClause0]: alloc::string::ToString, trait alloc::string::ToString { - fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self> + fn to_string<'_0> = alloc::string::ToString::to_string<'_0_0, Self>[Self] } impl alloc::string::{impl alloc::string::ToString for Str}#102 : alloc::string::ToString diff --git a/charon/tests/ui/trait-instance-id.out b/charon/tests/ui/trait-instance-id.out new file mode 100644 index 00000000..a3ab6d4c --- /dev/null +++ b/charon/tests/ui/trait-instance-id.out @@ -0,0 +1,1909 @@ +# 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, + +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>[Self] + fn clone_from<'_0, '_1> = core::clone::Clone::clone_from<'_0_0, '_0_1, Self>[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::Copy + parent_clause4 : [@TraitClause4]: core::clone::Clone + parent_clause5 : [@TraitClause5]: core::marker::Sized + 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::num::nonzero::private::{impl core::marker::Copy for core::num::nonzero::private::NonZeroUsizeInner}#27 + parent_clause4 = core::num::nonzero::private::{impl core::clone::Clone for core::num::nonzero::private::NonZeroUsizeInner}#26 + parent_clause5 = core::marker::Sized + 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[Self] +} + +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>[Self] +} + +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[Self] +} + +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[Self] + fn branch = core::ops::try_trait::Try::branch[Self] +} + +trait core::ops::try_trait::Residual +where + Self::parent_clause1::Residual = Self, + Self::parent_clause1::Output = O, +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::ops::try_trait::Try + parent_clause2 : [@TraitClause2]: core::ops::try_trait::FromResidual + parent_clause3 : [@TraitClause3]: core::marker::Sized + type TryType +} + +trait core::default::Default +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + fn default = core::default::Default::default[Self] +} + +trait core::cmp::PartialEq +{ + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] + fn ne<'_0, '_1> = core::cmp::PartialEq::ne<'_0_0, '_0_1, Self, Rhs>[Self] +} + +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>[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>[Self] + fn lt<'_0, '_1> = core::cmp::PartialOrd::lt<'_0_0, '_0_1, Self, Rhs>[Self] + fn le<'_0, '_1> = core::cmp::PartialOrd::le<'_0_0, '_0_1, Self, Rhs>[Self] + fn gt<'_0, '_1> = core::cmp::PartialOrd::gt<'_0_0, '_0_1, Self, Rhs>[Self] + fn ge<'_0, '_1> = core::cmp::PartialOrd::ge<'_0_0, '_0_1, Self, Rhs>[Self] +} + +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>[Self] + fn max<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::max[Self, @TraitClause0_0] + fn min<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::min[Self, @TraitClause0_0] + fn clamp<[@TraitClause0]: core::marker::Sized> = core::cmp::Ord::clamp[Self, @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>[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>[Self, @TraitClause0_0] + fn size_hint<'_0> = core::iter::traits::iterator::Iterator::size_hint<'_0_0, Self>[Self] + fn count<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::count[Self, @TraitClause0_0] + fn last<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::last[Self, @TraitClause0_0] + fn advance_by<'_0> = core::iter::traits::iterator::Iterator::advance_by<'_0_0, Self>[Self] + fn nth<'_0> = core::iter::traits::iterator::Iterator::nth<'_0_0, Self>[Self] + fn step_by<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::step_by[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn zip, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::collect::IntoIterator> = core::iter::traits::iterator::Iterator::zip[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn intersperse<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::intersperse[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn enumerate<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::enumerate[Self, @TraitClause0_0] + fn peekable<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::peekable[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn skip<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::skip[Self, @TraitClause0_0] + fn take<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::take[Self, @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[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn fuse<[@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::fuse[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn by_ref<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::iterator::Iterator::by_ref<'_0_0, Self>[Self, @TraitClause0_0] + fn collect, [@TraitClause1]: core::iter::traits::collect::FromIterator, [@TraitClause2]: core::marker::Sized> = core::iter::traits::iterator::Iterator::collect[Self, @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>[Self, @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>[Self, @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[Self, @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>[Self, @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[Self, @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>[Self, @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>[Self, @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[Self, @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[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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>[Self, @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[Self, @TraitClause0_0, @TraitClause0_1] + fn min<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::cmp::Ord> = core::iter::traits::iterator::Iterator::min[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3, @TraitClause0_4, @TraitClause0_5, @TraitClause0_6, @TraitClause0_7, @TraitClause0_8, @TraitClause0_9] + fn copied<'a, T, [@TraitClause0]: 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>[Self, @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>[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2, @TraitClause0_3] + fn cycle<[@TraitClause0]: core::marker::Sized, [@TraitClause1]: core::clone::Clone> = core::iter::traits::iterator::Iterator::cycle[Self, @TraitClause0_0, @TraitClause0_1] + fn array_chunks> = core::iter::traits::iterator::Iterator::array_chunks[Self, @TraitClause0_0] + fn sum, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Sum> = core::iter::traits::iterator::Iterator::sum[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn product, [@TraitClause1]: core::marker::Sized, [@TraitClause2]: core::iter::traits::accum::Product> = core::iter::traits::iterator::Iterator::product[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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[Self, @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>[Self, @TraitClause0_0] +} + +trait core::iter::traits::collect::IntoIterator +where + Self::parent_clause1::Item = Self::Item, +{ + parent_clause0 : [@TraitClause0]: core::marker::Sized + parent_clause1 : [@TraitClause1]: core::iter::traits::iterator::Iterator + parent_clause2 : [@TraitClause2]: core::marker::Sized + type Item + type IntoIter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] +} + +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[Self, @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>[Self, @TraitClause0_0, @TraitClause0_1] + fn extend_one<'_0> = core::iter::traits::collect::Extend::extend_one<'_0_0, Self, A>[Self] + fn extend_reserve<'_0> = core::iter::traits::collect::Extend::extend_reserve<'_0_0, Self, A>[Self] + fn extend_one_unchecked<'_0, [@TraitClause0]: core::marker::Sized> = core::iter::traits::collect::Extend::extend_one_unchecked<'_0_0, Self, A>[Self, @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>[Self] + fn advance_back_by<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::advance_back_by<'_0_0, Self>[Self] + fn nth_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0_0, Self>[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>[Self, @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[Self, @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>[Self, @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>[Self] + fn is_empty<'_0> = core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0_0, Self>[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[Self, @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[Self, @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>[Self, @TraitClause0_0] +} + +fn core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}::into_iter(@1: Array) -> core::array::iter::{impl core::iter::traits::collect::IntoIterator for Array}[@TraitClause0]::IntoIter +where + [@TraitClause0]: core::marker::Sized, + +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]}#2[@TraitClause0]::Item>[@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]}#2[@TraitClause0]::Item>[@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) -> core::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[@TraitClause0]::Item +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[@TraitClause0]}#182<'_, T>[@TraitClause0]::Item>[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) -> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Iter<'a, T>[@TraitClause0]}#182<'_, T>[@TraitClause0]::Item +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[@TraitClause0]}#71<'_, T>[@TraitClause0]::Item>[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[@TraitClause0]}#71<'_, T>[@TraitClause0]::Item>[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) -> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::Chunks<'a, T>[@TraitClause0]}#71<'_, T>[@TraitClause0]::Item +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[@TraitClause0]}#90<'_, T>[@TraitClause0]::Item>[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[@TraitClause0]}#90<'_, T>[@TraitClause0]::Item>[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) -> core::slice::iter::{impl core::iter::traits::iterator::Iterator for core::slice::iter::ChunksExact<'a, T>[@TraitClause0]}#90<'_, T>[@TraitClause0]::Item +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) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, + +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::array::iter::{impl core::iter::traits::iterator::Iterator for core::array::iter::IntoIter[@TraitClause0]}#2[@TraitClause0] + parent_clause2 = core::marker::Sized[@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 = @TraitClause1 + parent_clause2 = @TraitClause0 + 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<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::ops::arith::AddAssign::add_assign<'_0, Self, Rhs>(@1: &'_0 mut (Self), @2: Rhs) +where + [@TraitClause0]: core::ops::arith::AddAssign, + +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>[Self] +} + +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::iter::traits::iterator::Iterator::next_chunk<'_0, Self, const N : usize>(@1: &'_0 mut (Self)) -> core::result::Result, core::array::iter::IntoIter<@TraitClause0::Item, const N : usize>[@TraitClause0::parent_clause0]>[core::marker::Sized>, core::marker::Sized[@TraitClause0::parent_clause0]>] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::nth<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::iterator::Iterator::step_by(@1: Self, @2: usize) -> core::iter::adapters::step_by::StepBy[@TraitClause1] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::chain(@1: Self, @2: U) -> core::iter::adapters::chain::Chain[@TraitClause2, @TraitClause3::parent_clause2] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + @TraitClause3::Item = @TraitClause0::Item, + +fn core::iter::traits::iterator::Iterator::zip(@1: Self, @2: U) -> core::iter::adapters::zip::Zip[@TraitClause2, @TraitClause3::parent_clause2] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::collect::IntoIterator, + +fn core::iter::traits::iterator::Iterator::intersperse(@1: Self, @2: @TraitClause0::Item) -> core::iter::adapters::intersperse::Intersperse[@TraitClause1, @TraitClause0, @TraitClause2] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::clone::Clone<@TraitClause0::Item>, + +fn core::iter::traits::iterator::Iterator::intersperse_with(@1: Self, @2: G) -> core::iter::adapters::intersperse::IntersperseWith[@TraitClause2, @TraitClause1, @TraitClause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = @TraitClause0::Item, + +fn core::iter::traits::iterator::Iterator::map(@1: Self, @2: F) -> core::iter::adapters::map::Map[@TraitClause3, @TraitClause2] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = B, + +fn core::iter::traits::iterator::Iterator::for_each(@1: Self, @2: F) +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::parent_clause0::Output = (), + +fn core::iter::traits::iterator::Iterator::filter(@1: Self, @2: P) -> core::iter::adapters::filter::Filter[@TraitClause2, @TraitClause1] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized

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

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

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

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

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

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

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause3::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[@TraitClause1] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = core::option::Option[@TraitClause1], + +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) -> @TraitClause5::TryType +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized R>, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::try_trait::Try, + [@TraitClause5]: core::ops::try_trait::Residual<@TraitClause4::Residual, core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0]>, + [@TraitClause6]: for<'_0> core::ops::function::FnMut R, (&'_0_0 (@TraitClause0::Item))>, + @TraitClause4::Output = bool, + for<'_0> @TraitClause6::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::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::ops::function::FnMut, + @TraitClause3::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::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized

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

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::iter::traits::accum::Product, + +fn core::iter::traits::iterator::Iterator::cmp(@1: Self, @2: I) -> core::cmp::Ordering +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::Ord<@TraitClause0::Item>, + [@TraitClause4]: core::marker::Sized, + @TraitClause2::Item = @TraitClause0::Item, + +fn core::iter::traits::iterator::Iterator::cmp_by(@1: Self, @2: I, @3: F) -> core::cmp::Ordering +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::collect::IntoIterator, + [@TraitClause5]: core::ops::function::FnMut, + @TraitClause5::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::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: 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::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::collect::IntoIterator, + [@TraitClause5]: core::ops::function::FnMut, + @TraitClause5::parent_clause0::Output = core::option::Option[core::marker::Sized], + +fn core::iter::traits::iterator::Iterator::eq(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialEq<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::eq_by(@1: Self, @2: I, @3: F) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::iter::traits::collect::IntoIterator, + [@TraitClause5]: core::ops::function::FnMut, + @TraitClause5::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::ne(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialEq<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::lt(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::le(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::gt(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::ge(@1: Self, @2: I) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + [@TraitClause3]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause2::Item>, + [@TraitClause4]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::is_sorted(@1: Self) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::cmp::PartialOrd<@TraitClause0::Item, @TraitClause0::Item>, + +fn core::iter::traits::iterator::Iterator::is_sorted_by(@1: Self, @2: F) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0, '_1> core::ops::function::FnMut, + for<'_0, '_1> @TraitClause3::parent_clause0::Output = bool, + +fn core::iter::traits::iterator::Iterator::is_sorted_by_key(@1: Self, @2: F) -> bool +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + [@TraitClause5]: core::cmp::PartialOrd, + @TraitClause4::parent_clause0::Output = K, + +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, + +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, + +fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, + +fn core::clone::Clone::clone_from<'_0, '_1, Self>(@1: &'_0 mut (Self), @2: &'_1 (Self)) +where + [@TraitClause0]: core::clone::Clone, + +fn core::iter::traits::iterator::Iterator::size_hint<'_0, Self>(@1: &'_0 (Self)) -> (usize, core::option::Option[core::marker::Sized]) +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::iterator::Iterator::count(@1: Self) -> usize +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + +fn core::iter::traits::iterator::Iterator::last(@1: Self) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: 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]>] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::iterator::Iterator::fold(@1: Self, @2: B, @3: F) -> B +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = B, + +unsafe fn core::iter::traits::iterator::Iterator::__iterator_get_unchecked<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> @TraitClause0::Item +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, + [@TraitClause1]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, + +fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, + +fn core::cmp::PartialEq::ne<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, + +fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, + +fn core::cmp::Ord::max(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::cmp::Ord, + [@TraitClause1]: core::marker::Sized, + +fn core::cmp::Ord::min(@1: Self, @2: Self) -> Self +where + [@TraitClause0]: core::cmp::Ord, + [@TraitClause1]: core::marker::Sized, + +fn core::cmp::Ord::clamp(@1: Self, @2: Self, @3: Self) -> Self +where + [@TraitClause0]: core::cmp::Ord, + [@TraitClause1]: core::marker::Sized, + +fn core::cmp::Eq::assert_receiver_is_total_eq<'_0, Self>(@1: &'_0 (Self)) +where + [@TraitClause0]: core::cmp::Eq, + +fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, + +fn core::cmp::PartialOrd::lt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, + +fn core::cmp::PartialOrd::le<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, + +fn core::cmp::PartialOrd::gt<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, + +fn core::cmp::PartialOrd::ge<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialOrd, + +fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, + +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, + +fn core::ops::try_trait::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, + +fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, + +fn core::iter::adapters::zip::TrustedRandomAccessNoCoerce::size<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::adapters::zip::TrustedRandomAccessNoCoerce, + [@TraitClause1]: core::iter::traits::iterator::Iterator, + +fn core::iter::traits::accum::Sum::sum(@1: I) -> Self +where + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::Item = A, + +fn core::iter::traits::accum::Product::product(@1: I) -> Self +where + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::Item = A, + +fn core::iter::traits::collect::FromIterator::from_iter(@1: T) -> Self +where + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::Item = A, + +fn core::iter::traits::collect::Extend::extend<'_0, Self, A, T>(@1: &'_0 mut (Self), @2: T) +where + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::Item = A, + +fn core::iter::traits::collect::Extend::extend_one<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) +where + [@TraitClause0]: core::iter::traits::collect::Extend, + +fn core::iter::traits::collect::Extend::extend_reserve<'_0, Self, A>(@1: &'_0 mut (Self), @2: usize) +where + [@TraitClause0]: core::iter::traits::collect::Extend, + +unsafe fn core::iter::traits::collect::Extend::extend_one_unchecked<'_0, Self, A>(@1: &'_0 mut (Self), @2: A) +where + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + +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]>] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + +fn core::iter::traits::double_ended::DoubleEndedIterator::nth_back<'_0, Self>(@1: &'_0 mut (Self), @2: usize) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + +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::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::marker::Sized, + [@TraitClause5]: core::ops::function::FnMut, + [@TraitClause6]: core::ops::try_trait::Try, + @TraitClause5::parent_clause0::Output = R, + @TraitClause6::Output = B, + +fn core::iter::traits::double_ended::DoubleEndedIterator::rfold(@1: Self, @2: B, @3: F) -> B +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: core::marker::Sized, + [@TraitClause4]: core::ops::function::FnMut, + @TraitClause4::parent_clause0::Output = B, + +fn core::iter::traits::double_ended::DoubleEndedIterator::rfind<'_0, Self, P>(@1: &'_0 mut (Self), @2: P) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, + [@TraitClause1]: core::marker::Sized

, + [@TraitClause2]: core::marker::Sized, + [@TraitClause3]: for<'_0> core::ops::function::FnMut, + for<'_0> @TraitClause3::parent_clause0::Output = bool, + +fn core::iter::traits::exact_size::ExactSizeIterator::len<'_0, Self>(@1: &'_0 (Self)) -> usize +where + [@TraitClause0]: core::iter::traits::exact_size::ExactSizeIterator, + +fn core::iter::traits::exact_size::ExactSizeIterator::is_empty<'_0, Self>(@1: &'_0 (Self)) -> bool +where + [@TraitClause0]: core::iter::traits::exact_size::ExactSizeIterator, + + + diff --git a/charon/tests/ui/traits.out b/charon/tests/ui/traits.out index f2dc0741..72931aeb 100644 --- a/charon/tests/ui/traits.out +++ b/charon/tests/ui/traits.out @@ -2,7 +2,7 @@ trait test_crate::BoolTrait { - fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self> + fn get_bool<'_0> = test_crate::BoolTrait::get_bool<'_0_0, Self>[Self] fn ret_true<'_0> = test_crate::BoolTrait::ret_true<'_0_0, Self> } @@ -131,6 +131,8 @@ where } fn test_crate::BoolTrait::get_bool<'_0, Self>(@1: &'_0 (Self)) -> bool +where + [@TraitClause0]: test_crate::BoolTrait, fn test_crate::test_bool_trait(@1: T) -> bool where @@ -150,7 +152,7 @@ where trait test_crate::ToU64 { - fn to_u64 = test_crate::ToU64::to_u64 + fn to_u64 = test_crate::ToU64::to_u64[Self] } fn test_crate::{impl test_crate::ToU64 for u64}#2::to_u64(@1: u64) -> u64 @@ -168,6 +170,8 @@ impl test_crate::{impl test_crate::ToU64 for u64}#2 : test_crate::ToU64 } fn test_crate::ToU64::to_u64(@1: Self) -> u64 +where + [@TraitClause0]: test_crate::ToU64, fn test_crate::{impl test_crate::ToU64 for (A, A)}#3::to_u64(@1: (A, A)) -> u64 where @@ -309,7 +313,7 @@ where trait test_crate::ToType { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn to_type = test_crate::ToType::to_type + fn to_type = test_crate::ToType::to_type[Self] } fn test_crate::{impl test_crate::ToType for u64}#5::to_type(@1: u64) -> bool @@ -332,14 +336,15 @@ impl test_crate::{impl test_crate::ToType for u64}#5 : test_crate::ToType< trait test_crate::OfType { - fn of_type, [@TraitClause1]: test_crate::ToType, [@TraitClause2]: core::marker::Sized> = test_crate::OfType::of_type[@TraitClause0_0, @TraitClause0_1, @TraitClause0_2] + fn of_type, [@TraitClause1]: test_crate::ToType, [@TraitClause2]: core::marker::Sized> = test_crate::OfType::of_type[Self, @TraitClause0_0, @TraitClause0_1, @TraitClause0_2] } fn test_crate::OfType::of_type(@1: T) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: test_crate::ToType, - [@TraitClause2]: core::marker::Sized, + [@TraitClause0]: test_crate::OfType, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: test_crate::ToType, + [@TraitClause3]: core::marker::Sized, fn test_crate::h3(@1: T2) -> T1 where @@ -364,12 +369,13 @@ trait test_crate::OfTypeBis parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: test_crate::ToType parent_clause2 : [@TraitClause2]: core::marker::Sized - fn of_type<[@TraitClause0]: core::marker::Sized> = test_crate::OfTypeBis::of_type[@TraitClause0_0] + fn of_type<[@TraitClause0]: core::marker::Sized> = test_crate::OfTypeBis::of_type[Self, @TraitClause0_0] } fn test_crate::OfTypeBis::of_type(@1: T) -> Self where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: test_crate::OfTypeBis, + [@TraitClause1]: core::marker::Sized, fn test_crate::h4(@1: T2) -> T1 where @@ -465,6 +471,8 @@ struct test_crate::BoolWrapper = } fn test_crate::ToType::to_type(@1: Self) -> T +where + [@TraitClause0]: test_crate::ToType, fn test_crate::{impl test_crate::ToType for test_crate::BoolWrapper}#7::to_type(@1: test_crate::BoolWrapper) -> T where @@ -509,7 +517,7 @@ trait test_crate::WithConstTy const LEN2 : usize type V type W - fn f<'_0, '_1> = test_crate::WithConstTy::f<'_0_0, '_0_1, Self, const LEN : usize> + fn f<'_0, '_1> = test_crate::WithConstTy::f<'_0_0, '_0_1, Self, const LEN : usize>[Self] } fn test_crate::{impl test_crate::WithConstTy<32 : usize> for bool}#8::LEN1() -> usize @@ -627,8 +635,8 @@ trait test_crate::ParentTrait0 { parent_clause0 : [@TraitClause0]: core::marker::Sized type W - fn get_name<'_0> = test_crate::ParentTrait0::get_name<'_0_0, Self> - fn get_w<'_0> = test_crate::ParentTrait0::get_w<'_0_0, Self> + fn get_name<'_0> = test_crate::ParentTrait0::get_name<'_0_0, Self>[Self] + fn get_w<'_0> = test_crate::ParentTrait0::get_w<'_0_0, Self>[Self] } trait test_crate::ParentTrait1 @@ -640,6 +648,8 @@ trait test_crate::ChildTrait } fn test_crate::ParentTrait0::get_name<'_0, Self>(@1: &'_0 (Self)) -> alloc::string::String +where + [@TraitClause0]: test_crate::ParentTrait0, fn test_crate::test_child_trait1<'_0, T>(@1: &'_0 (T)) -> alloc::string::String where @@ -656,7 +666,9 @@ where return } -fn test_crate::ParentTrait0::get_w<'_0, Self>(@1: &'_0 (Self)) -> Self::W +fn test_crate::ParentTrait0::get_w<'_0, Self>(@1: &'_0 (Self)) -> @TraitClause0::W +where + [@TraitClause0]: test_crate::ParentTrait0, fn test_crate::test_child_trait2<'_0, T>(@1: &'_0 (T)) -> @TraitClause1::parent_clause0::W where @@ -717,7 +729,7 @@ where parent_clause2 : [@TraitClause2]: test_crate::Iterator type Item type IntoIter - fn into_iter = test_crate::IntoIterator::into_iter + fn into_iter = test_crate::IntoIterator::into_iter[Self] } trait test_crate::FromResidual @@ -748,7 +760,7 @@ trait test_crate::ParentTrait2 trait test_crate::ChildTrait2 { parent_clause0 : [@TraitClause0]: test_crate::ParentTrait2 - fn convert = test_crate::ChildTrait2::convert + fn convert = test_crate::ChildTrait2::convert[Self] } impl test_crate::{impl test_crate::WithTarget for u32}#11 : test_crate::WithTarget @@ -784,31 +796,33 @@ trait test_crate::CFnOnce parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Output - fn call_once = test_crate::CFnOnce::call_once + fn call_once = test_crate::CFnOnce::call_once[Self] } trait test_crate::CFnMut { parent_clause0 : [@TraitClause0]: test_crate::CFnOnce parent_clause1 : [@TraitClause1]: core::marker::Sized - fn call_mut<'_0> = test_crate::CFnMut::call_mut<'_0_0, Self, Args> + fn call_mut<'_0> = test_crate::CFnMut::call_mut<'_0_0, Self, Args>[Self] } trait test_crate::CFn { parent_clause0 : [@TraitClause0]: test_crate::CFnMut parent_clause1 : [@TraitClause1]: core::marker::Sized - fn call<'_0> = test_crate::CFn::call<'_0_0, Self, Args> + fn call<'_0> = test_crate::CFn::call<'_0_0, Self, Args>[Self] } trait test_crate::GetTrait { parent_clause0 : [@TraitClause0]: core::marker::Sized type W - fn get_w<'_0> = test_crate::GetTrait::get_w<'_0_0, Self> + fn get_w<'_0> = test_crate::GetTrait::get_w<'_0_0, Self>[Self] } -fn test_crate::GetTrait::get_w<'_0, Self>(@1: &'_0 (Self)) -> Self::W +fn test_crate::GetTrait::get_w<'_0, Self>(@1: &'_0 (Self)) -> @TraitClause0::W +where + [@TraitClause0]: test_crate::GetTrait, fn test_crate::test_get_trait<'_0, T>(@1: &'_0 (T)) -> @TraitClause1::W where @@ -984,7 +998,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -992,7 +1006,7 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[Self] } trait core::ops::function::Fn @@ -1000,7 +1014,7 @@ trait core::ops::function::Fn parent_clause0 : [@TraitClause0]: core::ops::function::FnMut parent_clause1 : [@TraitClause1]: core::marker::Sized parent_clause2 : [@TraitClause2]: core::marker::Tuple - fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args> + fn call<'_0> = core::ops::function::Fn::call<'_0_0, Self, Args>[Self] } fn test_crate::call<'a, F>(@1: F) @@ -1060,10 +1074,12 @@ fn test_crate::BoolTrait::ret_true<'_0, Self>(@1: &'_0 (Self)) -> bool } fn test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait::test<'_0, Self>(@1: &'_0 (Self)) -> bool +where + [@TraitClause0]: test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait, trait test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait { - fn test<'_0> = test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait::test<'_0_0, Self> + fn test<'_0> = test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait::test<'_0_0, Self>[Self] } impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::{impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait for test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestType1} : test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait[@TraitClause0]}#6::test::TestType1> @@ -1071,23 +1087,41 @@ impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::{impl test_cr fn test<'_0> = test_crate::{test_crate::TestType[@TraitClause0]}#6::test::{impl test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestTrait for test_crate::{test_crate::TestType[@TraitClause0]}#6::test::TestType1}::test<'_0_0> } -fn test_crate::WithConstTy::f<'_0, '_1, Self, const LEN : usize>(@1: &'_0 mut (Self::W), @2: &'_1 (Array)) +fn test_crate::WithConstTy::f<'_0, '_1, Self, const LEN : usize>(@1: &'_0 mut (@TraitClause0::W), @2: &'_1 (Array)) +where + [@TraitClause0]: test_crate::WithConstTy, -fn test_crate::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn test_crate::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: test_crate::IntoIterator, -fn test_crate::ChildTrait2::convert(@1: Self::parent_clause0::U) -> Self::parent_clause0::parent_clause1::Target +fn test_crate::ChildTrait2::convert(@1: @TraitClause0::parent_clause0::U) -> @TraitClause0::parent_clause0::parent_clause1::Target +where + [@TraitClause0]: test_crate::ChildTrait2, -fn test_crate::CFnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn test_crate::CFnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: test_crate::CFnOnce, -fn test_crate::CFnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn test_crate::CFnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: test_crate::CFnMut, -fn test_crate::CFn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> Self::parent_clause0::parent_clause0::Output +fn test_crate::CFn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +where + [@TraitClause0]: test_crate::CFn, -fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> Self::parent_clause0::parent_clause0::Output +fn core::ops::function::Fn::call<'_0, Self, Args>(@1: &'_0 (Self), @2: Args) -> @TraitClause0::parent_clause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::Fn, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, diff --git a/charon/tests/ui/traits_special.out b/charon/tests/ui/traits_special.out index 3a19ab0e..0239fe42 100644 --- a/charon/tests/ui/traits_special.out +++ b/charon/tests/ui/traits_special.out @@ -16,7 +16,7 @@ trait test_crate::From parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::marker::Sized type Error - fn from<[@TraitClause0]: core::marker::Sized> = test_crate::From::from[@TraitClause0_0] + fn from<[@TraitClause0]: core::marker::Sized> = test_crate::From::from[Self, @TraitClause0_0] } fn test_crate::{impl test_crate::From<&'_0 (bool)> for bool}::from<'_0>(@1: &'_0 (bool)) -> core::result::Result[core::marker::Sized, core::marker::Sized<()>] @@ -39,9 +39,10 @@ impl<'_0> test_crate::{impl test_crate::From<&'_0 (bool)> for bool}<'_0> : test_ fn from = test_crate::{impl test_crate::From<&'_0 (bool)> for bool}::from<'_0> } -fn test_crate::From::from(@1: T) -> core::result::Result[@TraitClause0, Self::parent_clause1] +fn test_crate::From::from(@1: T) -> core::result::Result[@TraitClause1, @TraitClause0::parent_clause1] where - [@TraitClause0]: core::marker::Sized, + [@TraitClause0]: test_crate::From, + [@TraitClause1]: core::marker::Sized, diff --git a/charon/tests/ui/type_alias.out b/charon/tests/ui/type_alias.out index b509a71b..b1fe2016 100644 --- a/charon/tests/ui/type_alias.out +++ b/charon/tests/ui/type_alias.out @@ -5,12 +5,12 @@ trait core::marker::Sized trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::borrow::Borrow { - fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed> + fn borrow<'_0> = core::borrow::Borrow::borrow<'_0_0, Self, Borrowed>[Self] } trait alloc::borrow::ToOwned @@ -18,7 +18,7 @@ trait alloc::borrow::ToOwned parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::borrow::Borrow type Owned - fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self> + fn to_owned<'_0> = alloc::borrow::ToOwned::to_owned<'_0_0, Self>[Self] } enum alloc::borrow::Cow<'a, B> @@ -78,10 +78,16 @@ struct test_crate::Generic2<'a, T> } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, -fn alloc::borrow::ToOwned::to_owned<'_0, Self>(@1: &'_0 (Self)) -> Self::Owned +fn alloc::borrow::ToOwned::to_owned<'_0, Self>(@1: &'_0 (Self)) -> @TraitClause0::Owned +where + [@TraitClause0]: alloc::borrow::ToOwned, fn core::borrow::Borrow::borrow<'_0, Self, Borrowed>(@1: &'_0 (Self)) -> &'_0 (Borrowed) +where + [@TraitClause0]: core::borrow::Borrow, diff --git a/charon/tests/ui/type_inference_is_order_dependent.out b/charon/tests/ui/type_inference_is_order_dependent.out index 5019a857..94a2217b 100644 --- a/charon/tests/ui/type_inference_is_order_dependent.out +++ b/charon/tests/ui/type_inference_is_order_dependent.out @@ -15,13 +15,13 @@ trait test_crate::Right trait test_crate::Join { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn test = test_crate::Join::test + fn test = test_crate::Join::test[Self] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } opaque type core::fmt::Formatter<'a> @@ -41,7 +41,7 @@ struct core::fmt::Error = {} trait core::fmt::Debug { - fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self> + fn fmt<'_0, '_1, '_2> = core::fmt::Debug::fmt<'_0_0, '_0_1, '_0_2, Self>[Self] } opaque type core::fmt::Arguments<'a> @@ -51,6 +51,8 @@ opaque type core::fmt::Arguments<'a> opaque type core::fmt::rt::Argument<'a> fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, fn core::fmt::rt::{core::fmt::rt::Argument<'_0>}#1::new_debug<'_0, '_1, T>(@1: &'_1 (T)) -> core::fmt::rt::Argument<'_1> where @@ -181,8 +183,12 @@ where } fn test_crate::Join::test() +where + [@TraitClause0]: test_crate::Join, fn core::fmt::Debug::fmt<'_0, '_1, '_2, Self>(@1: &'_0 (Self), @2: &'_1 mut (core::fmt::Formatter<'_2>)) -> core::result::Result<(), core::fmt::Error>[core::marker::Sized<()>, core::marker::Sized] +where + [@TraitClause0]: core::fmt::Debug, diff --git a/charon/tests/ui/ullbc-control-flow.out b/charon/tests/ui/ullbc-control-flow.out index 324dc081..49544db8 100644 --- a/charon/tests/ui/ullbc-control-flow.out +++ b/charon/tests/ui/ullbc-control-flow.out @@ -23,7 +23,7 @@ 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } fn core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1::into_iter(@1: I) -> I @@ -34,12 +34,12 @@ where trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } enum core::cmp::Ordering = @@ -51,7 +51,7 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::iter::range::Step @@ -59,9 +59,9 @@ trait core::iter::range::Step parent_clause0 : [@TraitClause0]: core::marker::Sized parent_clause1 : [@TraitClause1]: core::clone::Clone parent_clause2 : [@TraitClause2]: core::cmp::PartialOrd - fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self> - fn forward_checked = core::iter::range::Step::forward_checked - fn backward_checked = core::iter::range::Step::backward_checked + fn steps_between<'_0, '_1> = core::iter::range::Step::steps_between<'_0_0, '_0_1, Self>[Self] + fn forward_checked = core::iter::range::Step::forward_checked[Self] + fn backward_checked = core::iter::range::Step::backward_checked[Self] } fn core::iter::range::{impl core::iter::traits::iterator::Iterator for core::ops::range::Range[@TraitClause0]}#6::next<'_0, A>(@1: &'_0 mut (core::ops::range::Range[@TraitClause0])) -> core::option::Option[@TraitClause0] @@ -363,7 +363,9 @@ fn test_crate::nested_loops_enum(@1: usize, @2: usize) -> usize } } -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, trait core::iter::traits::collect::IntoIterator where @@ -374,7 +376,7 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } impl core::iter::traits::collect::{impl core::iter::traits::collect::IntoIterator for I}#1 : core::iter::traits::collect::IntoIterator @@ -390,19 +392,33 @@ where 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::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, fn core::iter::range::Step::steps_between<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::iter::range::Step, -fn core::iter::range::Step::forward_checked(@1: Self, @2: usize) -> core::option::Option[Self::parent_clause0] +fn core::iter::range::Step::forward_checked(@1: Self, @2: usize) -> core::option::Option[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::range::Step, -fn core::iter::range::Step::backward_checked(@1: Self, @2: usize) -> core::option::Option[Self::parent_clause0] +fn core::iter::range::Step::backward_checked(@1: Self, @2: usize) -> core::option::Option[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::range::Step, fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, trait core::cmp::Eq { @@ -413,7 +429,7 @@ 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -423,6 +439,8 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, trait core::marker::Tuple @@ -432,7 +450,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -440,20 +458,20 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -472,8 +490,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -490,19 +508,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -519,53 +537,71 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator, diff --git a/charon/tests/ui/unsize.out b/charon/tests/ui/unsize.out index d5878631..017e5591 100644 --- a/charon/tests/ui/unsize.out +++ b/charon/tests/ui/unsize.out @@ -113,11 +113,13 @@ fn test_crate::foo() } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } impl alloc::string::{impl core::clone::Clone for alloc::string::String}#6 : core::clone::Clone diff --git a/charon/tests/ui/unsupported/issue-79-bound-regions.out b/charon/tests/ui/unsupported/issue-79-bound-regions.out index 1331a3ec..fcf49f39 100644 --- a/charon/tests/ui/unsupported/issue-79-bound-regions.out +++ b/charon/tests/ui/unsupported/issue-79-bound-regions.out @@ -61,13 +61,15 @@ fn test_crate::main() return } -fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option[Self::parent_clause0] +fn core::iter::traits::iterator::Iterator::next<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::Item>[@TraitClause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::iterator::Iterator, 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<'_0> = core::iter::traits::iterator::Iterator::next<'_0_0, Self>[Self] } 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]> @@ -88,13 +90,13 @@ where parent_clause2 : [@TraitClause2]: core::iter::traits::iterator::Iterator type Item type IntoIter - fn into_iter = core::iter::traits::collect::IntoIterator::into_iter + fn into_iter = core::iter::traits::collect::IntoIterator::into_iter[Self] } trait core::clone::Clone { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self> + fn clone<'_0> = core::clone::Clone::clone<'_0_0, Self>[Self] } trait core::marker::Tuple @@ -105,7 +107,7 @@ trait core::ops::function::FnOnce parent_clause1 : [@TraitClause1]: core::marker::Tuple parent_clause2 : [@TraitClause2]: core::marker::Sized type Output - fn call_once = core::ops::function::FnOnce::call_once + fn call_once = core::ops::function::FnOnce::call_once[Self] } trait core::ops::function::FnMut @@ -113,20 +115,20 @@ 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 call_mut<'_0> = core::ops::function::FnMut::call_mut<'_0_0, Self, Args>[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] + fn from_iter, [@TraitClause1]: core::iter::traits::collect::IntoIterator, @TraitClause1_1::Item = A> = core::iter::traits::collect::FromIterator::from_iter[Self, @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 + fn from_residual = core::ops::try_trait::FromResidual::from_residual[Self] } enum core::ops::control_flow::ControlFlow @@ -145,8 +147,8 @@ trait core::ops::try_trait::Try 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 + fn from_output = core::ops::try_trait::Try::from_output[Self] + fn branch = core::ops::try_trait::Try::branch[Self] } trait core::ops::try_trait::Residual @@ -163,19 +165,19 @@ where 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<'_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>[Self, @TraitClause0_0, @TraitClause0_1] } trait core::default::Default { parent_clause0 : [@TraitClause0]: core::marker::Sized - fn default = core::default::Default::default + fn default = core::default::Default::default[Self] } 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 next_back<'_0> = core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0_0, Self>[Self] } trait core::iter::traits::exact_size::ExactSizeIterator @@ -185,7 +187,7 @@ trait core::iter::traits::exact_size::ExactSizeIterator trait core::cmp::PartialEq { - fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs> + fn eq<'_0, '_1> = core::cmp::PartialEq::eq<'_0_0, '_0_1, Self, Rhs>[Self] } trait core::cmp::Eq @@ -202,14 +204,14 @@ enum core::cmp::Ordering = 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 partial_cmp<'_0, '_1> = core::cmp::PartialOrd::partial_cmp<'_0_0, '_0_1, Self, Rhs>[Self] } 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 cmp<'_0, '_1> = core::cmp::Ord::cmp<'_0_0, '_0_1, Self>[Self] } trait core::marker::Copy @@ -221,14 +223,14 @@ 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] + fn sum, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Sum::sum[Self, @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] + fn product, [@TraitClause1]: core::iter::traits::iterator::Iterator, @TraitClause1_1::Item = A> = core::iter::traits::accum::Product::product[Self, @TraitClause0_0, @TraitClause0_1] } trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce @@ -238,52 +240,80 @@ trait core::iter::adapters::zip::TrustedRandomAccessNoCoerce } fn core::clone::Clone::clone<'_0, Self>(@1: &'_0 (Self)) -> Self +where + [@TraitClause0]: core::clone::Clone, fn core::cmp::PartialEq::eq<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> bool +where + [@TraitClause0]: core::cmp::PartialEq, fn core::cmp::Ord::cmp<'_0, '_1, Self>(@1: &'_0 (Self), @2: &'_1 (Self)) -> core::cmp::Ordering +where + [@TraitClause0]: core::cmp::Ord, fn core::cmp::PartialOrd::partial_cmp<'_0, '_1, Self, Rhs>(@1: &'_0 (Self), @2: &'_1 (Rhs)) -> core::option::Option[core::marker::Sized] +where + [@TraitClause0]: core::cmp::PartialOrd, fn core::default::Default::default() -> Self +where + [@TraitClause0]: core::default::Default, -fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> Self::parent_clause0::Output +fn core::ops::function::FnMut::call_mut<'_0, Self, Args>(@1: &'_0 mut (Self), @2: Args) -> @TraitClause0::parent_clause0::Output +where + [@TraitClause0]: core::ops::function::FnMut, -fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> Self::Output +fn core::ops::function::FnOnce::call_once(@1: Self, @2: Args) -> @TraitClause0::Output +where + [@TraitClause0]: core::ops::function::FnOnce, -fn core::ops::try_trait::Try::from_output(@1: Self::Output) -> Self +fn core::ops::try_trait::Try::from_output(@1: @TraitClause0::Output) -> Self +where + [@TraitClause0]: core::ops::try_trait::Try, -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::Try::branch(@1: Self) -> core::ops::control_flow::ControlFlow<@TraitClause0::Residual, @TraitClause0::Output>[@TraitClause0::parent_clause0::parent_clause0, @TraitClause0::parent_clause1] +where + [@TraitClause0]: core::ops::try_trait::Try, fn core::ops::try_trait::FromResidual::from_residual(@1: R) -> Self +where + [@TraitClause0]: core::ops::try_trait::FromResidual, fn core::iter::traits::accum::Sum::sum(@1: I) -> Self where - [@TraitClause0]: core::marker::Sized, - [@TraitClause1]: core::iter::traits::iterator::Iterator, - @TraitClause1::Item = A, + [@TraitClause0]: core::iter::traits::accum::Sum, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::accum::Product, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::iterator::Iterator, + @TraitClause2::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, + [@TraitClause0]: core::iter::traits::collect::FromIterator, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::Item = A, -fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> Self::IntoIter +fn core::iter::traits::collect::IntoIterator::into_iter(@1: Self) -> @TraitClause0::IntoIter +where + [@TraitClause0]: core::iter::traits::collect::IntoIterator, 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, + [@TraitClause0]: core::iter::traits::collect::Extend, + [@TraitClause1]: core::marker::Sized, + [@TraitClause2]: core::iter::traits::collect::IntoIterator, + @TraitClause2::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] +fn core::iter::traits::double_ended::DoubleEndedIterator::next_back<'_0, Self>(@1: &'_0 mut (Self)) -> core::option::Option<@TraitClause0::parent_clause0::Item>[@TraitClause0::parent_clause0::parent_clause0] +where + [@TraitClause0]: core::iter::traits::double_ended::DoubleEndedIterator,