diff --git a/compiler/rustc_borrowck/src/region_infer/opaque_types/mod.rs b/compiler/rustc_borrowck/src/region_infer/opaque_types/mod.rs index a154078b7ad86..dd378b75fa588 100644 --- a/compiler/rustc_borrowck/src/region_infer/opaque_types/mod.rs +++ b/compiler/rustc_borrowck/src/region_infer/opaque_types/mod.rs @@ -2,17 +2,18 @@ use std::iter; use std::rc::Rc; use rustc_data_structures::frozen::Frozen; -use rustc_data_structures::fx::FxIndexMap; +use rustc_data_structures::fx::{FxHashMap, FxIndexMap}; use rustc_hir::def_id::{DefId, LocalDefId}; use rustc_infer::infer::outlives::env::RegionBoundPairs; use rustc_infer::infer::{InferCtxt, NllRegionVariableOrigin, OpaqueTypeStorageEntries}; use rustc_infer::traits::ObligationCause; use rustc_macros::extension; +use rustc_middle::middle::resolve_bound_vars::ResolvedArg; use rustc_middle::mir::{Body, ConstraintCategory}; use rustc_middle::ty::{ self, DefiningScopeKind, DefinitionSiteHiddenType, FallibleTypeFolder, Flags, GenericArg, GenericArgsRef, OpaqueTypeKey, ProvisionalHiddenType, Region, RegionVid, Ty, TyCtxt, - TypeFoldable, TypeSuperFoldable, TypeVisitableExt, Unnormalized, fold_regions, + TypeFoldable, TypeFolder, TypeSuperFoldable, TypeVisitableExt, Unnormalized, fold_regions, }; use rustc_mir_dataflow::points::DenseLocationMap; use rustc_span::Span; @@ -20,6 +21,7 @@ use rustc_trait_selection::opaque_types::{ NonDefiningUseReason, opaque_type_has_defining_use_args, }; use rustc_trait_selection::solve::NoSolution; +use rustc_trait_selection::traits::ObligationCtxt; use rustc_trait_selection::traits::query::type_op::custom::CustomTypeOp; use tracing::{debug, instrument}; @@ -186,12 +188,17 @@ struct DefiningUse<'tcx> { /// to interact with code outside of `rustc_borrowck`. opaque_type_key: OpaqueTypeKey<'tcx>, arg_regions: Vec, + /// The hidden type used for pre-member candidate equality. Unknown regions in + /// intentionally non-member positions are replaced by fresh existentials. + equality_hidden_type: Ty<'tcx>, hidden_type: ProvisionalHiddenType<'tcx>, } /// This computes the actual hidden types of the opaque types and maps them to their -/// definition sites. Outside of registering the computed hidden types this function -/// does not mutate the current borrowck state. +/// definition sites. While preparing compatible defining uses, it allocates +/// equality-only existential region variables and registers equality constraints +/// between their hidden types. It otherwise does not mutate the current borrowck +/// state outside of registering the computed hidden types. /// /// While it may fail to infer the hidden type and return errors, we always apply /// the computed hidden type to all opaque type uses to check whether they @@ -203,24 +210,51 @@ struct DefiningUse<'tcx> { pub(crate) fn compute_definition_site_hidden_types<'tcx>( def_id: LocalDefId, infcx: &BorrowckInferCtxt<'tcx>, + body: &Body<'tcx>, universal_region_relations: &Frozen>, - constraints: &MirTypeckRegionConstraints<'tcx>, + region_bound_pairs: &RegionBoundPairs<'tcx>, + known_type_outlives_obligations: &[ty::PolyTypeOutlivesClause<'tcx>], + constraints: &mut MirTypeckRegionConstraints<'tcx>, location_map: Rc, hidden_types: &mut FxIndexMap>, unconstrained_hidden_type_errors: &mut Vec>, opaque_types: &[(OpaqueTypeKey<'tcx>, ProvisionalHiddenType<'tcx>)], ) -> Vec> { let mut errors = Vec::new(); - // When computing the hidden type we need to track member constraints. - // We don't mutate the region graph used by `fn compute_regions` but instead - // manually track region information via a `RegionCtxt`. We discard this - // information at the end of this function. - let mut rcx = RegionCtxt::new(infcx, universal_region_relations, location_map, constraints); - // We start by checking each use of an opaque type during type check and // check whether the generic arguments of the opaque type are fully // universal, if so, it's a defining use. - let defining_uses = collect_defining_uses(&mut rcx, hidden_types, opaque_types, &mut errors); + let defining_uses = { + let mut rcx = RegionCtxt::new( + infcx, + universal_region_relations, + Rc::clone(&location_map), + constraints, + ); + let mut defining_uses = + collect_defining_uses(&mut rcx, hidden_types, opaque_types, &mut errors); + prepare_candidate_equality_types(&rcx, &mut defining_uses); + defining_uses + }; + + // Member constraints need equality information from all hidden-type candidates + // for the same opaque instantiation. Query responses may freshen non-captured + // parent regions, so raw `OpaqueTypeKey` equality is too strict here. + // `iter_captured_args()` keeps the invariant arguments which identify the + // instantiation. + equate_hidden_types_for_same_opaque_instantiation( + infcx, + body, + &universal_region_relations.universal_regions, + region_bound_pairs, + known_type_outlives_obligations, + constraints, + &defining_uses, + ); + + // Candidate equality can add region constraints, so rebuild the region context + // before computing member constraints. + let mut rcx = RegionCtxt::new(infcx, universal_region_relations, location_map, constraints); // We now compute and apply member constraints for all regions in the hidden // types of each defining use. This mutates the region values of the `rcx` which @@ -241,6 +275,247 @@ pub(crate) fn compute_definition_site_hidden_types<'tcx>( errors } +fn equate_hidden_types_for_same_opaque_instantiation<'tcx>( + infcx: &BorrowckInferCtxt<'tcx>, + body: &Body<'tcx>, + universal_regions: &UniversalRegions<'tcx>, + region_bound_pairs: &RegionBoundPairs<'tcx>, + known_type_outlives_obligations: &[ty::PolyTypeOutlivesClause<'tcx>], + constraints: &mut MirTypeckRegionConstraints<'tcx>, + defining_uses: &[DefiningUse<'tcx>], +) { + for (index, defining_use) in defining_uses.iter().enumerate() { + // Leave incompatible candidates for the definition-site merge to diagnose. + let cause = ObligationCause::misc( + defining_use.hidden_type.span, + body.source.def_id().expect_local(), + ); + // Ambiguity can make a probe fail, so keep looking for another compatible + // candidate in the same instantiation. + let Some(previous) = defining_uses[..index].iter().find(|previous| { + same_opaque_instantiation(infcx.tcx, previous, defining_use) + && infcx.probe(|_| { + let ocx = ObligationCtxt::new(infcx); + equate_hidden_type_candidates( + &ocx, + &cause, + infcx.param_env, + previous.equality_hidden_type, + defining_use.equality_hidden_type, + ) + .is_ok() + && ocx.evaluate_obligations_error_on_ambiguity().no_errors() + }) + }) else { + continue; + }; + + let locations = Locations::All(defining_use.hidden_type.span); + let result = fully_perform_op_raw( + infcx, + body, + universal_regions, + region_bound_pairs, + known_type_outlives_obligations, + constraints, + locations, + ConstraintCategory::OpaqueType, + CustomTypeOp::new( + |ocx| { + equate_hidden_type_candidates( + ocx, + &cause, + infcx.param_env, + previous.equality_hidden_type, + defining_use.equality_hidden_type, + ) + }, + "equating defining opaque type uses", + ), + ); + if let Err(guar) = result { + // The probe above succeeded, so preserve an unexpected failure rather + // than silently ignoring it. + infcx.set_tainted_by_errors(guar); + return; + } + } +} + +fn same_opaque_instantiation<'tcx>( + tcx: TyCtxt<'tcx>, + a: &DefiningUse<'tcx>, + b: &DefiningUse<'tcx>, +) -> bool { + a.opaque_type_key.def_id == b.opaque_type_key.def_id + && a.opaque_type_key + .iter_captured_args(tcx) + .map(|(_, arg)| arg) + .eq(b.opaque_type_key.iter_captured_args(tcx).map(|(_, arg)| arg)) +} + +fn prepare_candidate_equality_types<'tcx>( + rcx: &RegionCtxt<'_, 'tcx>, + defining_uses: &mut [DefiningUse<'tcx>], +) { + for index in 0..defining_uses.len() { + if !defining_uses.iter().enumerate().any(|(other, defining_use)| { + other != index + && same_opaque_instantiation(rcx.infcx.tcx, &defining_uses[index], defining_use) + }) { + continue; + } + + let defining_use = &mut defining_uses[index]; + defining_use.equality_hidden_type = replace_regions_in_non_member_args( + rcx, + defining_use.opaque_type_key.def_id, + &defining_use.arg_regions, + defining_use.hidden_type.ty, + ); + } +} + +fn equate_hidden_type_candidates<'tcx>( + ocx: &ObligationCtxt<'_, 'tcx>, + cause: &ObligationCause<'tcx>, + param_env: ty::ParamEnv<'tcx>, + previous: Ty<'tcx>, + current: Ty<'tcx>, +) -> Result<(), NoSolution> { + // Type equality is invariant here, including closure/coroutine arguments and + // bivariant alias arguments. Non-member regions in those positions were replaced + // with equality-local NLL variables, so this cannot constrain the originals. + let previous = ocx.normalize(cause, param_env, Unnormalized::new_wip(previous)); + let current = ocx.normalize(cause, param_env, Unnormalized::new_wip(current)); + ocx.eq(cause, param_env, previous, current).map_err(|_| NoSolution) +} + +fn replace_regions_in_non_member_args<'tcx>( + rcx: &RegionCtxt<'_, 'tcx>, + opaque_def_id: LocalDefId, + arg_regions: &[RegionVid], + ty: Ty<'tcx>, +) -> Ty<'tcx> { + // Use NLL variables instead of `ReErased`: normalization may emit region + // obligations for these types, and MIR constraint conversion requires every + // free region in such an obligation to have a region vid. + ty.fold_with(&mut ReplaceNonMemberRegions { + rcx, + opaque_def_id, + arg_regions, + replacements: Default::default(), + replace_regions: false, + }) +} + +/// Mirrors the non-member positions used by `CollectMemberConstraintsVisitor` +/// and `ToArgRegionsFolder`. +struct ReplaceNonMemberRegions<'a, 'tcx> { + rcx: &'a RegionCtxt<'a, 'tcx>, + opaque_def_id: LocalDefId, + arg_regions: &'a [RegionVid], + replacements: FxHashMap>, + replace_regions: bool, +} + +impl<'tcx> ReplaceNonMemberRegions<'_, 'tcx> { + fn fold_non_member_arg(&mut self, arg: GenericArg<'tcx>) -> GenericArg<'tcx> { + let prev = self.replace_regions; + self.replace_regions = true; + let result = arg.fold_with(self); + self.replace_regions = prev; + result + } + + fn fold_closure_args( + &mut self, + def_id: DefId, + args: GenericArgsRef<'tcx>, + ) -> GenericArgsRef<'tcx> { + let generics = self.cx().generics_of(def_id); + self.cx().mk_args_from_iter(args.iter().enumerate().map(|(index, arg)| { + // Parent arguments are normally non-members. Keep captured lifetime + // arguments intact so candidate equality can still share member information. + if index < generics.parent_count && !self.is_captured_parent_arg(def_id, index) { + self.fold_non_member_arg(arg) + } else { + arg.fold_with(self) + } + })) + } + + fn is_captured_parent_arg(&self, def_id: DefId, index: usize) -> bool { + let tcx = self.cx(); + let generics = tcx.generics_of(def_id); + tcx.opaque_captured_lifetimes(self.opaque_def_id).iter().any(|&(resolved_arg, _)| { + let param = match resolved_arg { + ResolvedArg::EarlyBound(param) + | ResolvedArg::LateBound(_, _, param) + | ResolvedArg::Free(_, param) => param, + ResolvedArg::StaticLifetime | ResolvedArg::Error(_) => return false, + }; + generics.param_def_id_to_index(tcx, param.to_def_id()) == Some(index as u32) + }) + } +} + +impl<'tcx> TypeFolder> for ReplaceNonMemberRegions<'_, 'tcx> { + fn cx(&self) -> TyCtxt<'tcx> { + self.rcx.infcx.tcx + } + + fn fold_region(&mut self, region: Region<'tcx>) -> Region<'tcx> { + let ty::ReVar(vid) = region.kind() else { return region }; + if !self.replace_regions + || self.arg_regions.iter().any(|&arg_region| self.rcx.eval_equal(vid, arg_region)) + { + return region; + } + + *self.replacements.entry(vid).or_insert_with(|| { + self.rcx + .infcx + .next_nll_region_var(NllRegionVariableOrigin::Existential { name: None }, || { + crate::RegionCtxt::Existential(None) + }) + }) + } + + fn fold_ty(&mut self, ty: Ty<'tcx>) -> Ty<'tcx> { + if !ty.flags().intersects(ty::TypeFlags::HAS_FREE_REGIONS) { + return ty; + } + + match *ty.kind() { + ty::Closure(def_id, args) => { + Ty::new_closure(self.cx(), def_id, self.fold_closure_args(def_id, args)) + } + ty::CoroutineClosure(def_id, args) => { + Ty::new_coroutine_closure(self.cx(), def_id, self.fold_closure_args(def_id, args)) + } + ty::Coroutine(def_id, args) => { + Ty::new_coroutine(self.cx(), def_id, self.fold_closure_args(def_id, args)) + } + ty::Alias(is_rigid, ty::AliasTy { kind, args, .. }) + if let Some(variances) = self.cx().opt_alias_variances(kind) => + { + let args = self.cx().mk_args_from_iter(std::iter::zip(variances, args).map( + |(&variance, arg)| { + if variance == ty::Bivariant { + self.fold_non_member_arg(arg) + } else { + arg.fold_with(self) + } + }, + )); + ty::AliasTy::new_from_args(self.cx(), kind, args).to_ty(self.cx(), is_rigid) + } + _ => ty.super_fold_with(self), + } + } +} + #[instrument(level = "debug", skip_all, ret)] fn collect_defining_uses<'tcx>( rcx: &mut RegionCtxt<'_, 'tcx>, @@ -283,7 +558,7 @@ fn collect_defining_uses<'tcx>( } // We use the original `opaque_type_key` to compute the `arg_regions`. - let arg_regions = iter::once(rcx.universal_regions().fr_static) + let arg_regions: Vec<_> = iter::once(rcx.universal_regions().fr_static) .chain( opaque_type_key .iter_captured_args(infcx.tcx) @@ -294,6 +569,7 @@ fn collect_defining_uses<'tcx>( defining_uses.push(DefiningUse { opaque_type_key: non_nll_opaque_type_key, arg_regions, + equality_hidden_type: hidden_type.ty, hidden_type, }); } @@ -314,7 +590,7 @@ fn compute_definition_site_hidden_types_from_defining_uses<'tcx>( let tcx = infcx.tcx; let mut decls_modulo_regions: FxIndexMap, (OpaqueTypeKey<'tcx>, Span)> = FxIndexMap::default(); - for &DefiningUse { opaque_type_key, ref arg_regions, hidden_type } in defining_uses { + for &DefiningUse { opaque_type_key, ref arg_regions, hidden_type, .. } in defining_uses { debug!(?opaque_type_key, ?arg_regions, ?hidden_type); // After applying member constraints, we now map all regions in the hidden type // to the `arg_regions` of this defining use. In case a region in the hidden type diff --git a/compiler/rustc_borrowck/src/root_cx.rs b/compiler/rustc_borrowck/src/root_cx.rs index b1aca758d64ae..e14ed069241db 100644 --- a/compiler/rustc_borrowck/src/root_cx.rs +++ b/compiler/rustc_borrowck/src/root_cx.rs @@ -108,8 +108,11 @@ impl<'diag, 'tcx> BorrowCheckRootCtxt<'diag, 'tcx> { input.deferred_opaque_type_errors = compute_definition_site_hidden_types( *def_id, &input.infcx, + &input.body_owned, &input.universal_region_relations, - &input.constraints, + &input.region_bound_pairs, + &input.known_type_outlives_obligations, + &mut input.constraints, Rc::clone(&input.location_map), &mut self.hidden_types, &mut self.unconstrained_hidden_type_errors, diff --git a/tests/mir-opt/nll/opaque_non_member_candidate_equality.closure.nll.0.mir b/tests/mir-opt/nll/opaque_non_member_candidate_equality.closure.nll.0.mir new file mode 100644 index 0000000000000..07426956810b3 --- /dev/null +++ b/tests/mir-opt/nll/opaque_non_member_candidate_equality.closure.nll.0.mir @@ -0,0 +1,221 @@ +// MIR for `closure` 0 nll + +| Free Region Mapping +| '?0 | Global | ['?3, '?2, '?0, '?4, '?1] +| '?1 | Local | ['?4, '?1] +| '?2 | Local | ['?2, '?4] +| '?3 | Local | ['?3, '?4] +| '?4 | Local | ['?4] +| +| Inferred Region Values +| '?0 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?0, '?1, '?2, '?3, '?4} +| '?1 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?2 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?3 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?4 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?4} +| '?5 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?6 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?7 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?8 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?9 | U0 | {bb0[1]} +| '?10 | U0 | {bb0[1]} +| '?11 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?12 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?13 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?14 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?15 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?16 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?17 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?18 | U0 | {bb1[2]} +| '?19 | U0 | {bb1[2]} +| '?20 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?21 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?22 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?23 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?24 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?25 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?26 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?27 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?28 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?29 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?30 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?31 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?32 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?33 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?34 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?35 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?36 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?37 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?38 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?39 | U0 | {bb0[1]} +| '?40 | U0 | {bb0[1]} +| '?41 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?42 | U0 | {bb1[2]} +| '?43 | U0 | {bb1[2]} +| '?44 | U0 | {} +| '?45 | U0 | {} +| '?46 | U0 | {} +| '?47 | U0 | {} +| '?48 | U0 | {} +| '?49 | U0 | {} +| '?50 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?51 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?52 | U0 | {bb0[1]} +| '?53 | U0 | {bb0[1]} +| '?54 | U0 | {bb1[2]} +| '?55 | U0 | {bb1[2]} +| +| Inference Constraints +| '?0 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?1 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?2 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?3 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?4 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?5 live at {bb0[1]} +| '?6 live at {bb0[1]} +| '?7 live at {bb0[1]} +| '?8 live at {bb0[1]} +| '?9 live at {bb0[1]} +| '?10 live at {bb0[1]} +| '?11 live at {bb0[1]} +| '?12 live at {bb0[1]} +| '?13 live at {bb0[1]} +| '?14 live at {bb1[2]} +| '?15 live at {bb1[2]} +| '?16 live at {bb1[2]} +| '?17 live at {bb1[2]} +| '?18 live at {bb1[2]} +| '?19 live at {bb1[2]} +| '?20 live at {bb1[2]} +| '?21 live at {bb1[2]} +| '?22 live at {bb1[2]} +| '?23 live at {bb2[1]} +| '?24 live at {bb2[1]} +| '?25 live at {bb2[1]} +| '?1: '?23 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?1: '?29 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43) ($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43 (#0) +| '?1: '?32 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43) ($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43 (#0) +| '?1: '?35 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62 (#0) +| '?2: '?24 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?2: '?30 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43) ($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43 (#0) +| '?2: '?34 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43) ($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43 (#0) +| '?3: '?25 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?3: '?31 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43) ($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43 (#0) +| '?3: '?33 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43) ($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43 (#0) +| '?5: '?11 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?5: '?38 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?6: '?12 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?7: '?13 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?8: '?38 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?9: '?39 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?10: '?40 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?11: '?5 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?11: '?29 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?12: '?6 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?12: '?30 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?13: '?7 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?13: '?31 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?14: '?20 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?14: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?15: '?21 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?16: '?22 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?17: '?41 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?18: '?42 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?19: '?43 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?20: '?14 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?20: '?32 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?21: '?15 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?21: '?33 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?22: '?16 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:7 ~ opaque_non_member_candidate_equality[f00c]::closure), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Closure(DefId(0:12 ~ opaque_non_member_candidate_equality[f00c]::closure::{closure#0}), ['{erased}, '{erased}, '{erased}, i8, Binder { value: extern "RustCall" fn(()), bound_vars: [] }, ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?22: '?34 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?23: '?1 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?23: '?26 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?24: '?2 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?24: '?27 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?25: '?3 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?25: '?28 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?26: '?23 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?26: '?35 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62 (#0) +| '?27: '?24 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?27: '?36 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62 (#0) +| '?28: '?25 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:17:5: 17:10 (#0) +| '?28: '?37 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62 (#0) +| '?29: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43) ($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43 (#0) +| '?29: '?11 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?30: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43) ($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43 (#0) +| '?30: '?12 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?31: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43) ($DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43 (#0) +| '?31: '?13 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?32: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43) ($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43 (#0) +| '?32: '?20 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?33: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43) ($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43 (#0) +| '?33: '?21 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?34: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43) ($DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43 (#0) +| '?34: '?22 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?35: '?1 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62 (#0) +| '?35: '?26 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62 (#0) +| '?35: '?38 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?35: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?36: '?27 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62 (#0) +| '?36: '?50 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62 (#0) +| '?37: '?28 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:42: 14:62 (#0) +| '?37: '?51 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62 (#0) +| '?38: '?5 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?38: '?8 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?38: '?35 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?39: '?9 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?39: '?52 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?40: '?10 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?40: '?53 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?41: '?14 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?41: '?17 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?41: '?35 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?42: '?18 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?42: '?54 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?43: '?19 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?43: '?55 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?44: '?46 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?44: '?48 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?45: '?47 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?45: '?49 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?46: '?44 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?47: '?45 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?48: '?44 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?49: '?45 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?50: '?36 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62 (#0) +| '?51: '?37 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62) ($DIR/opaque_non_member_candidate_equality.rs:14:1: 14:62 (#0) +| '?52: '?39 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?53: '?40 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44) ($DIR/opaque_non_member_candidate_equality.rs:15:5: 15:44 (#0) +| '?54: '?42 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| '?55: '?43 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44) ($DIR/opaque_non_member_candidate_equality.rs:16:5: 16:44 (#0) +| +| User Type Annotations +| 0: user_ty: Canonical { value: TypeOf(closure<'a, 'b, 'c>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:15:22: 15:43, inferred_ty: fn(()) -> impl Sized {closure::<'_, '_, '_>} +| 1: user_ty: Canonical { value: TypeOf(closure<'a, 'c, 'b>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:16:22: 16:43, inferred_ty: fn(()) -> impl Sized {closure::<'_, '_, '_>} +| +fn closure(_1: ()) -> {closure@$DIR/opaque_non_member_candidate_equality.rs:17:5: 17:7} { + let mut _0: {closure@$DIR/opaque_non_member_candidate_equality.rs:17:5: 17:7}; + let _2: (); + let _3: (); + + bb0: { + StorageLive(_2); + _2 = new_defining_use:: impl Sized {closure::<'_, '_, '_>}, (), {closure@$DIR/opaque_non_member_candidate_equality.rs:17:5: 17:7}>(closure::<'_, '_, '_>) -> [return: bb1, unwind: bb3]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + _3 = new_defining_use:: impl Sized {closure::<'_, '_, '_>}, (), {closure@$DIR/opaque_non_member_candidate_equality.rs:17:5: 17:7}>(closure::<'_, '_, '_>) -> [return: bb2, unwind: bb3]; + } + + bb2: { + StorageDead(_3); + _0 = {closure@$DIR/opaque_non_member_candidate_equality.rs:17:5: 17:7}; + return; + } + + bb3 (cleanup): { + resume; + } +} diff --git a/tests/mir-opt/nll/opaque_non_member_candidate_equality.coroutine.nll.0.mir b/tests/mir-opt/nll/opaque_non_member_candidate_equality.coroutine.nll.0.mir new file mode 100644 index 0000000000000..431d28a064aea --- /dev/null +++ b/tests/mir-opt/nll/opaque_non_member_candidate_equality.coroutine.nll.0.mir @@ -0,0 +1,221 @@ +// MIR for `coroutine` 0 nll + +| Free Region Mapping +| '?0 | Global | ['?3, '?2, '?0, '?4, '?1] +| '?1 | Local | ['?4, '?1] +| '?2 | Local | ['?2, '?4] +| '?3 | Local | ['?3, '?4] +| '?4 | Local | ['?4] +| +| Inferred Region Values +| '?0 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?0, '?1, '?2, '?3, '?4} +| '?1 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?2 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?3 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?4 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?4} +| '?5 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?6 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?7 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?8 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?9 | U0 | {bb0[1]} +| '?10 | U0 | {bb0[1]} +| '?11 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?12 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?13 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?14 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?15 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?16 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?17 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?18 | U0 | {bb1[2]} +| '?19 | U0 | {bb1[2]} +| '?20 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?21 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?22 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?23 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?24 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?25 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?26 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?27 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?28 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?29 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?30 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?31 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?32 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?33 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?34 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?35 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?36 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?37 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?38 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?39 | U0 | {bb0[1]} +| '?40 | U0 | {bb0[1]} +| '?41 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?1} +| '?42 | U0 | {bb1[2]} +| '?43 | U0 | {bb1[2]} +| '?44 | U0 | {} +| '?45 | U0 | {} +| '?46 | U0 | {} +| '?47 | U0 | {} +| '?48 | U0 | {} +| '?49 | U0 | {} +| '?50 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?2} +| '?51 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0], '?3} +| '?52 | U0 | {bb0[1]} +| '?53 | U0 | {bb0[1]} +| '?54 | U0 | {bb1[2]} +| '?55 | U0 | {bb1[2]} +| +| Inference Constraints +| '?0 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?1 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?2 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?3 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?4 live at {bb0[0..=1], bb1[0..=2], bb2[0..=2], bb3[0]} +| '?5 live at {bb0[1]} +| '?6 live at {bb0[1]} +| '?7 live at {bb0[1]} +| '?8 live at {bb0[1]} +| '?9 live at {bb0[1]} +| '?10 live at {bb0[1]} +| '?11 live at {bb0[1]} +| '?12 live at {bb0[1]} +| '?13 live at {bb0[1]} +| '?14 live at {bb1[2]} +| '?15 live at {bb1[2]} +| '?16 live at {bb1[2]} +| '?17 live at {bb1[2]} +| '?18 live at {bb1[2]} +| '?19 live at {bb1[2]} +| '?20 live at {bb1[2]} +| '?21 live at {bb1[2]} +| '?22 live at {bb1[2]} +| '?23 live at {bb2[1]} +| '?24 live at {bb2[1]} +| '?25 live at {bb2[1]} +| '?1: '?23 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?1: '?29 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45) ($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45 (#0) +| '?1: '?32 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45) ($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45 (#0) +| '?1: '?35 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64 (#0) +| '?2: '?24 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?2: '?30 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45) ($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45 (#0) +| '?2: '?34 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45) ($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45 (#0) +| '?3: '?25 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?3: '?31 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45) ($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45 (#0) +| '?3: '?33 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45) ($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45 (#0) +| '?5: '?11 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?5: '?38 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?6: '?12 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?7: '?13 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?8: '?38 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?9: '?39 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?10: '?40 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?11: '?5 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?11: '?29 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?12: '?6 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?12: '?30 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?13: '?7 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?13: '?31 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?14: '?20 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?14: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?15: '?21 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?16: '?22 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?17: '?41 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?18: '?42 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?19: '?43 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?20: '?14 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?20: '?32 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?21: '?15 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?21: '?33 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?22: '?16 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:13 ~ opaque_non_member_candidate_equality[f00c]::coroutine), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Coroutine(DefId(0:18 ~ opaque_non_member_candidate_equality[f00c]::coroutine::{closure#0}), ['{erased}, '{erased}, '{erased}, (), (), (), (), ()])], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?22: '?34 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?23: '?1 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?23: '?26 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?24: '?2 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?24: '?27 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?25: '?3 due to BoringNoLocation at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?25: '?28 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?26: '?23 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?26: '?35 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64 (#0) +| '?27: '?24 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?27: '?36 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64 (#0) +| '?28: '?25 due to Return(Normal) at Single(bb2[1]) ($DIR/opaque_non_member_candidate_equality.rs:25:5: 25:13 (#0) +| '?28: '?37 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64 (#0) +| '?29: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45) ($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45 (#0) +| '?29: '?11 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?30: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45) ($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45 (#0) +| '?30: '?12 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?31: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45) ($DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45 (#0) +| '?31: '?13 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?32: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45) ($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45 (#0) +| '?32: '?20 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?33: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45) ($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45 (#0) +| '?33: '?21 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?34: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45) ($DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45 (#0) +| '?34: '?22 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?35: '?1 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64 (#0) +| '?35: '?26 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64 (#0) +| '?35: '?38 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?35: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?36: '?27 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64 (#0) +| '?36: '?50 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64 (#0) +| '?37: '?28 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:44: 21:64 (#0) +| '?37: '?51 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64 (#0) +| '?38: '?5 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?38: '?8 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?38: '?35 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?39: '?9 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?39: '?52 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?40: '?10 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?40: '?53 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?41: '?14 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?41: '?17 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?41: '?35 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?42: '?18 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?42: '?54 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?43: '?19 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?43: '?55 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?44: '?46 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?44: '?48 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?45: '?47 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?45: '?49 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?46: '?44 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?47: '?45 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?48: '?44 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?49: '?45 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?50: '?36 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64 (#0) +| '?51: '?37 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64) ($DIR/opaque_non_member_candidate_equality.rs:21:1: 21:64 (#0) +| '?52: '?39 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?53: '?40 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46) ($DIR/opaque_non_member_candidate_equality.rs:22:5: 22:46 (#0) +| '?54: '?42 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| '?55: '?43 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46) ($DIR/opaque_non_member_candidate_equality.rs:23:5: 23:46 (#0) +| +| User Type Annotations +| 0: user_ty: Canonical { value: TypeOf(coroutine<'a, 'b, 'c>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:22:22: 22:45, inferred_ty: fn(()) -> impl Sized {coroutine::<'_, '_, '_>} +| 1: user_ty: Canonical { value: TypeOf(coroutine<'a, 'c, 'b>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:23:22: 23:45, inferred_ty: fn(()) -> impl Sized {coroutine::<'_, '_, '_>} +| +fn coroutine(_1: ()) -> {coroutine@$DIR/opaque_non_member_candidate_equality.rs:25:5: 25:7} { + let mut _0: {coroutine@$DIR/opaque_non_member_candidate_equality.rs:25:5: 25:7}; + let _2: (); + let _3: (); + + bb0: { + StorageLive(_2); + _2 = new_defining_use:: impl Sized {coroutine::<'_, '_, '_>}, (), {coroutine@$DIR/opaque_non_member_candidate_equality.rs:25:5: 25:7}>(coroutine::<'_, '_, '_>) -> [return: bb1, unwind: bb3]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + _3 = new_defining_use:: impl Sized {coroutine::<'_, '_, '_>}, (), {coroutine@$DIR/opaque_non_member_candidate_equality.rs:25:5: 25:7}>(coroutine::<'_, '_, '_>) -> [return: bb2, unwind: bb3]; + } + + bb2: { + StorageDead(_3); + _0 = {coroutine@$DIR/opaque_non_member_candidate_equality.rs:25:5: 25:7 (#0)}; + return; + } + + bb3 (cleanup): { + resume; + } +} diff --git a/tests/mir-opt/nll/opaque_non_member_candidate_equality.nested_alias.nll.0.mir b/tests/mir-opt/nll/opaque_non_member_candidate_equality.nested_alias.nll.0.mir new file mode 100644 index 0000000000000..d77f2f5c81254 --- /dev/null +++ b/tests/mir-opt/nll/opaque_non_member_candidate_equality.nested_alias.nll.0.mir @@ -0,0 +1,285 @@ +// MIR for `nested_alias` 0 nll + +| Free Region Mapping +| '?0 | Global | ['?3, '?2, '?0, '?4, '?1] +| '?1 | Local | ['?4, '?1] +| '?2 | Local | ['?2, '?4] +| '?3 | Local | ['?3, '?4] +| '?4 | Local | ['?4] +| +| Inferred Region Values +| '?0 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?0, '?1, '?2, '?3, '?4} +| '?1 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?2 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?3 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?4 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?4} +| '?5 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?6 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?7 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?8 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?9 | U0 | {bb0[1]} +| '?10 | U0 | {bb0[1]} +| '?11 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?12 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?13 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?14 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?15 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?16 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?17 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?18 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?19 | U0 | {bb1[2]} +| '?20 | U0 | {bb1[2]} +| '?21 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?22 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?23 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?24 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?25 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?26 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?27 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?28 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?29 | U0 | {} +| '?30 | U0 | {} +| '?31 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?32 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?33 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?34 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?35 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?36 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?37 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?38 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?39 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?2} +| '?40 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?3} +| '?41 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?42 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?43 | U0 | {} +| '?44 | U0 | {} +| '?45 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?46 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?47 | U0 | {bb0[1]} +| '?48 | U0 | {bb0[1]} +| '?49 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?50 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?51 | U0 | {bb1[2]} +| '?52 | U0 | {bb1[2]} +| '?53 | U0 | {} +| '?54 | U0 | {} +| '?55 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?56 | U0 | {} +| '?57 | U0 | {} +| '?58 | U0 | {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0], '?1} +| '?59 | U0 | {} +| '?60 | U0 | {} +| '?61 | U0 | {} +| '?62 | U0 | {} +| '?63 | U0 | {bb0[1]} +| '?64 | U0 | {bb0[1]} +| '?65 | U0 | {bb1[2]} +| '?66 | U0 | {bb1[2]} +| +| Inference Constraints +| '?0 live at {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0]} +| '?1 live at {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0]} +| '?2 live at {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0]} +| '?3 live at {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0]} +| '?4 live at {bb0[0..=1], bb1[0..=2], bb2[0..=3], bb3[0..=1], bb4[0]} +| '?5 live at {bb0[1]} +| '?6 live at {bb0[1]} +| '?7 live at {bb0[1]} +| '?8 live at {bb0[1]} +| '?9 live at {bb0[1]} +| '?10 live at {bb0[1]} +| '?11 live at {bb0[1]} +| '?12 live at {bb0[1]} +| '?13 live at {bb0[1]} +| '?14 live at {bb0[1]} +| '?15 live at {bb1[2]} +| '?16 live at {bb1[2]} +| '?17 live at {bb1[2]} +| '?18 live at {bb1[2]} +| '?19 live at {bb1[2]} +| '?20 live at {bb1[2]} +| '?21 live at {bb1[2]} +| '?22 live at {bb1[2]} +| '?23 live at {bb1[2]} +| '?24 live at {bb1[2]} +| '?25 live at {bb2[3]} +| '?26 live at {bb2[3]} +| '?27 live at {bb2[3]} +| '?31 live at {bb3[0..=1]} +| '?1: '?32 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48) ($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48 (#0) +| '?1: '?35 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48) ($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48 (#0) +| '?1: '?38 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26 (#0) +| '?1: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?1: '?42 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?2: '?33 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48) ($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48 (#0) +| '?2: '?37 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48) ($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48 (#0) +| '?2: '?39 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26 (#0) +| '?3: '?34 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48) ($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48 (#0) +| '?3: '?36 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48) ($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48 (#0) +| '?3: '?40 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26 (#0) +| '?5: '?12 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?5: '?45 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?5: '?46 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?6: '?13 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?7: '?14 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?8: '?11 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?8: '?11 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?8: '?11 due to BoringNoLocation at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?8: '?45 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?9: '?47 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?10: '?48 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?11: '?8 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?11: '?8 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?11: '?8 due to BoringNoLocation at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?11: '?46 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?12: '?5 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?12: '?32 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?13: '?6 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?13: '?33 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?14: '?7 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?14: '?34 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?15: '?22 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?15: '?49 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?15: '?50 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?16: '?23 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?17: '?24 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?18: '?21 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?18: '?21 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?18: '?21 due to BoringNoLocation at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?18: '?49 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?19: '?51 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?20: '?52 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?21: '?18 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?21: '?18 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?21: '?18 due to BoringNoLocation at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?21: '?50 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?22: '?15 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?22: '?35 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?23: '?16 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?23: '?36 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?24: '?17 due to CallArgument(Some(FnDef(DefId(0:3 ~ opaque_non_member_candidate_equality[f00c]::new_defining_use), Binder { value: [FnDef(DefId(0:19 ~ opaque_non_member_candidate_equality[f00c]::nested_alias), Binder { value: ['{erased}, '{erased}, '{erased}], bound_vars: [] }), (), Alias(Yes, Alias { kind: Opaque { def_id: DefId(0:11 ~ opaque_non_member_candidate_equality[f00c]::closure::{opaque#0}) }, args: ['{erased}, '{erased}, '{erased}, '{erased}], .. })], bound_vars: [] }))) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?24: '?37 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?25: '?31 due to Return(Normal) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?25: '?38 due to TypeAnnotation(GenericArg) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?26: '?39 due to TypeAnnotation(GenericArg) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?27: '?40 due to TypeAnnotation(GenericArg) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?28: '?41 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?29: '?43 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?30: '?44 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?31: '?25 due to Return(Normal) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?31: '?42 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?32: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48) ($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48 (#0) +| '?32: '?12 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?33: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48) ($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48 (#0) +| '?33: '?13 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?34: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48) ($DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48 (#0) +| '?34: '?14 due to TypeAnnotation(GenericArg) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?35: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48) ($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48 (#0) +| '?35: '?22 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?36: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48) ($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48 (#0) +| '?36: '?23 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?37: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48) ($DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48 (#0) +| '?37: '?24 due to TypeAnnotation(GenericArg) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?38: '?1 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26 (#0) +| '?38: '?25 due to TypeAnnotation(GenericArg) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?39: '?2 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26 (#0) +| '?39: '?26 due to TypeAnnotation(GenericArg) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?40: '?3 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26 (#0) +| '?40: '?27 due to TypeAnnotation(GenericArg) at Single(bb2[3]) ($DIR/opaque_non_member_candidate_equality.rs:32:5: 32:30 (#0) +| '?41: '?1 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?41: '?28 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?41: '?42 due to Internal at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?41: '?42 due to Internal at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?41: '?55 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?41: '?58 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?42: '?1 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?42: '?31 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?42: '?41 due to Internal at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?42: '?41 due to Internal at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?42: '?46 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?42: '?50 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?43: '?29 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?43: '?61 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?44: '?30 due to BoringNoLocation at All($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:47: 29:67 (#0) +| '?44: '?62 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?45: '?5 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?45: '?8 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?45: '?46 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?45: '?46 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?46: '?5 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?46: '?11 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?46: '?42 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?46: '?45 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?46: '?45 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?47: '?9 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?47: '?63 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?48: '?10 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb0[1]) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?48: '?64 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?49: '?15 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?49: '?18 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?49: '?50 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?49: '?50 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?50: '?15 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?50: '?21 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?50: '?42 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?50: '?49 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?50: '?49 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:24: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?51: '?19 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?51: '?65 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?52: '?20 due to Predicate($DIR/opaque_non_member_candidate_equality.rs:7:37: 7:38 (#0)) at Single(bb1[2]) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?52: '?66 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?53: '?56 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?53: '?59 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?54: '?57 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?54: '?60 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?55: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?56: '?53 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?57: '?54 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?58: '?41 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?59: '?53 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?60: '?54 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?61: '?43 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?62: '?44 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67) ($DIR/opaque_non_member_candidate_equality.rs:29:1: 29:67 (#0) +| '?63: '?47 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?64: '?48 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49) ($DIR/opaque_non_member_candidate_equality.rs:30:5: 30:49 (#0) +| '?65: '?51 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| '?66: '?52 due to OpaqueType at All($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49) ($DIR/opaque_non_member_candidate_equality.rs:31:5: 31:49 (#0) +| +| User Type Annotations +| 0: user_ty: Canonical { value: TypeOf(nested_alias<'a, 'b, 'c>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:30:22: 30:48, inferred_ty: fn(()) -> impl Sized {nested_alias::<'_, '_, '_>} +| 1: user_ty: Canonical { value: TypeOf(nested_alias<'a, 'c, 'b>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:31:22: 31:48, inferred_ty: fn(()) -> impl Sized {nested_alias::<'_, '_, '_>} +| 2: user_ty: Canonical { value: TypeOf(closure<'a, 'b, 'c>), max_universe: U0, var_kinds: [] }, span: $DIR/opaque_non_member_candidate_equality.rs:32:5: 32:26, inferred_ty: fn(()) -> impl Sized {closure::<'_, '_, '_>} +| +fn nested_alias(_1: ()) -> impl Sized { + let mut _0: impl Sized; + let _2: (); + let _3: (); + let mut _4: (); + + bb0: { + StorageLive(_2); + _2 = new_defining_use:: impl Sized {nested_alias::<'_, '_, '_>}, (), impl Sized>(nested_alias::<'_, '_, '_>) -> [return: bb1, unwind: bb4]; + } + + bb1: { + StorageDead(_2); + StorageLive(_3); + _3 = new_defining_use:: impl Sized {nested_alias::<'_, '_, '_>}, (), impl Sized>(nested_alias::<'_, '_, '_>) -> [return: bb2, unwind: bb4]; + } + + bb2: { + StorageDead(_3); + StorageLive(_4); + _4 = (); + _0 = closure::<'_, '_, '_>(move _4) -> [return: bb3, unwind: bb4]; + } + + bb3: { + StorageDead(_4); + return; + } + + bb4 (cleanup): { + resume; + } +} diff --git a/tests/mir-opt/nll/opaque_non_member_candidate_equality.rs b/tests/mir-opt/nll/opaque_non_member_candidate_equality.rs new file mode 100644 index 0000000000000..a0b63f320a175 --- /dev/null +++ b/tests/mir-opt/nll/opaque_non_member_candidate_equality.rs @@ -0,0 +1,36 @@ +//@ skip-filecheck +//@ compile-flags: -Znext-solver + +#![feature(coroutines)] +#![allow(warnings)] + +fn new_defining_use R, T, R>(_: F) {} + +// These defining uses share captured `'a`, but have different unrelated parent +// lifetimes. The NLL dumps check that candidate equality uses fresh local regions +// instead of constraining non-member closure/coroutine or alias arguments. + +// EMIT_MIR opaque_non_member_candidate_equality.closure.nll.0.mir +fn closure<'a, 'b: 'b, 'c: 'c>(_: ()) -> impl Sized + use<'a> { + new_defining_use(closure::<'a, 'b, 'c>); + new_defining_use(closure::<'a, 'c, 'b>); + || {} +} + +// EMIT_MIR opaque_non_member_candidate_equality.coroutine.nll.0.mir +fn coroutine<'a, 'b: 'b, 'c: 'c>(_: ()) -> impl Sized + use<'a> { + new_defining_use(coroutine::<'a, 'b, 'c>); + new_defining_use(coroutine::<'a, 'c, 'b>); + #[coroutine] + || yield +} + +// EMIT_MIR opaque_non_member_candidate_equality.nested_alias.nll.0.mir +fn nested_alias<'a, 'b: 'b, 'c: 'c>(_: ()) -> impl Sized + use<'a> { + new_defining_use(nested_alias::<'a, 'b, 'c>); + new_defining_use(nested_alias::<'a, 'c, 'b>); + closure::<'a, 'b, 'c>(()) +} + +fn main() {} +//@ ignore-32bit diff --git a/tests/ui/impl-trait/member-constraints/incomplete-constraint.rs b/tests/ui/impl-trait/member-constraints/incomplete-constraint.rs index 4c085cc1eedf8..31d2b9c020133 100644 --- a/tests/ui/impl-trait/member-constraints/incomplete-constraint.rs +++ b/tests/ui/impl-trait/member-constraints/incomplete-constraint.rs @@ -1,14 +1,17 @@ //@ check-pass -// FIXME(-Znext-solver): enable this test +//@ revisions: current next +//@ ignore-compare-mode-next-solver (explicit revisions) +//@[next] compile-flags: -Znext-solver -// These functions currently do not normalize the opaque type but will do -// so in the future. At this point we've got a new use of the opaque with fully -// universal arguments but for which lifetimes in the hidden type are unconstrained. +// The next solver can create extra uses of these opaques with fresh non-captured +// parent regions. They are still the same opaque instantiation, but their hidden +// regions may be unconstrained. // -// Applying the member constraints would then incompletely infer `'unconstrained` to `'static`. +// If member constraints run before those candidates are related, an unconstrained +// region can be assigned a valid but wrong member such as `'static`. fn new_defining_use R, T, R>(_: F) {} -fn rpit1<'a, 'b: 'b>(x: &'b ()) -> impl Sized + use<'a, 'b> { +fn rpit1<'a, 'b: 'b>(x: &'b ()) -> impl Sized + use<'a, 'b> { new_defining_use(rpit1::<'a, 'b>); x }