@@ -311,43 +311,39 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
311311 ty:: BoundRegionKind :: BrEnv => {
312312 let def_ty = self . regioncx . universal_regions ( ) . defining_ty ;
313313
314- if let DefiningTy :: Closure ( _, substs) = def_ty {
315- let args_span = if let hir:: ExprKind :: Closure ( _, _, _, span, _) =
316- tcx. hir ( ) . expect_expr ( self . mir_hir_id ( ) ) . kind
317- {
318- span
319- } else {
320- bug ! ( "Closure is not defined by a closure expr" ) ;
321- } ;
322- let region_name = self . synthesize_region_name ( ) ;
323-
324- let closure_kind_ty = substs. as_closure ( ) . kind_ty ( ) ;
325- let note = match closure_kind_ty. to_opt_closure_kind ( ) {
326- Some ( ty:: ClosureKind :: Fn ) => {
327- "closure implements `Fn`, so references to captured variables \
328- can't escape the closure"
329- }
330- Some ( ty:: ClosureKind :: FnMut ) => {
331- "closure implements `FnMut`, so references to captured variables \
332- can't escape the closure"
333- }
334- Some ( ty:: ClosureKind :: FnOnce ) => {
335- bug ! ( "BrEnv in a `FnOnce` closure" ) ;
336- }
337- None => bug ! ( "Closure kind not inferred in borrow check" ) ,
338- } ;
339-
340- Some ( RegionName {
341- name : region_name,
342- source : RegionNameSource :: SynthesizedFreeEnvRegion (
343- args_span,
344- note. to_string ( ) ,
345- ) ,
346- } )
347- } else {
314+ let DefiningTy :: Closure ( _, substs) = def_ty else {
348315 // Can't have BrEnv in functions, constants or generators.
349316 bug ! ( "BrEnv outside of closure." ) ;
350- }
317+ } ;
318+ let hir:: ExprKind :: Closure ( _, _, _, args_span, _) =
319+ tcx. hir ( ) . expect_expr ( self . mir_hir_id ( ) ) . kind else {
320+ bug ! ( "Closure is not defined by a closure expr" ) ;
321+ } ;
322+ let region_name = self . synthesize_region_name ( ) ;
323+
324+ let closure_kind_ty = substs. as_closure ( ) . kind_ty ( ) ;
325+ let note = match closure_kind_ty. to_opt_closure_kind ( ) {
326+ Some ( ty:: ClosureKind :: Fn ) => {
327+ "closure implements `Fn`, so references to captured variables \
328+ can't escape the closure"
329+ }
330+ Some ( ty:: ClosureKind :: FnMut ) => {
331+ "closure implements `FnMut`, so references to captured variables \
332+ can't escape the closure"
333+ }
334+ Some ( ty:: ClosureKind :: FnOnce ) => {
335+ bug ! ( "BrEnv in a `FnOnce` closure" ) ;
336+ }
337+ None => bug ! ( "Closure kind not inferred in borrow check" ) ,
338+ } ;
339+
340+ Some ( RegionName {
341+ name : region_name,
342+ source : RegionNameSource :: SynthesizedFreeEnvRegion (
343+ args_span,
344+ note. to_string ( ) ,
345+ ) ,
346+ } )
351347 }
352348
353349 ty:: BoundRegionKind :: BrAnon ( _) => None ,
@@ -765,48 +761,45 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
765761 fn get_future_inner_return_ty ( & self , hir_ty : & ' tcx hir:: Ty < ' tcx > ) -> & ' tcx hir:: Ty < ' tcx > {
766762 let hir = self . infcx . tcx . hir ( ) ;
767763
768- if let hir:: TyKind :: OpaqueDef ( id, _) = hir_ty. kind {
769- let opaque_ty = hir. item ( id) ;
770- if let hir:: ItemKind :: OpaqueTy ( hir:: OpaqueTy {
771- bounds :
772- [
773- hir:: GenericBound :: LangItemTrait (
774- hir:: LangItem :: Future ,
775- _,
776- _,
777- hir:: GenericArgs {
778- bindings :
779- [
780- hir:: TypeBinding {
781- ident : Ident { name : sym:: Output , .. } ,
782- kind :
783- hir:: TypeBindingKind :: Equality {
784- term : hir:: Term :: Ty ( ty) ,
785- } ,
786- ..
787- } ,
788- ] ,
789- ..
790- } ,
791- ) ,
792- ] ,
793- ..
794- } ) = opaque_ty. kind
795- {
796- ty
797- } else {
798- span_bug ! (
799- hir_ty. span,
800- "bounds from lowered return type of async fn did not match expected format: {:?}" ,
801- opaque_ty
802- ) ;
803- }
804- } else {
764+ let hir:: TyKind :: OpaqueDef ( id, _) = hir_ty. kind else {
805765 span_bug ! (
806766 hir_ty. span,
807767 "lowered return type of async fn is not OpaqueDef: {:?}" ,
808768 hir_ty
809769 ) ;
770+ } ;
771+ let opaque_ty = hir. item ( id) ;
772+ if let hir:: ItemKind :: OpaqueTy ( hir:: OpaqueTy {
773+ bounds :
774+ [
775+ hir:: GenericBound :: LangItemTrait (
776+ hir:: LangItem :: Future ,
777+ _,
778+ _,
779+ hir:: GenericArgs {
780+ bindings :
781+ [
782+ hir:: TypeBinding {
783+ ident : Ident { name : sym:: Output , .. } ,
784+ kind :
785+ hir:: TypeBindingKind :: Equality { term : hir:: Term :: Ty ( ty) } ,
786+ ..
787+ } ,
788+ ] ,
789+ ..
790+ } ,
791+ ) ,
792+ ] ,
793+ ..
794+ } ) = opaque_ty. kind
795+ {
796+ ty
797+ } else {
798+ span_bug ! (
799+ hir_ty. span,
800+ "bounds from lowered return type of async fn did not match expected format: {:?}" ,
801+ opaque_ty
802+ ) ;
810803 }
811804 }
812805
0 commit comments