@@ -30,7 +30,7 @@ use rustc::ty::Instance;
3030use rustc:: ty:: { self , AdtKind , ParamEnv , Ty , TyCtxt } ;
3131use rustc:: ty:: layout:: { self , Align , Integer , IntegerExt , LayoutOf ,
3232 PrimitiveExt , Size , TyLayout , VariantIdx } ;
33- use rustc:: ty:: subst:: GenericArgKind ;
33+ use rustc:: ty:: subst:: { GenericArgKind , SubstsRef } ;
3434use rustc:: session:: config:: { self , DebugInfo } ;
3535use rustc:: util:: nodemap:: FxHashMap ;
3636use rustc_fs_util:: path_to_c_string;
@@ -692,9 +692,10 @@ pub fn type_metadata(
692692 Some ( containing_scope) ) . finalize ( cx)
693693 }
694694 ty:: Generator ( def_id, substs, _) => {
695- let upvar_tys : Vec < _ > = substs. prefix_tys ( def_id, cx. tcx ) . map ( |t| {
696- cx. tcx . normalize_erasing_regions ( ParamEnv :: reveal_all ( ) , t)
697- } ) . collect ( ) ;
695+ let upvar_tys : Vec < _ > = substs
696+ . as_generator ( ) . prefix_tys ( def_id, cx. tcx ) . map ( |t| {
697+ cx. tcx . normalize_erasing_regions ( ParamEnv :: reveal_all ( ) , t)
698+ } ) . collect ( ) ;
698699 prepare_enum_metadata ( cx,
699700 t,
700701 def_id,
@@ -1338,7 +1339,7 @@ impl EnumMemberDescriptionFactory<'ll, 'tcx> {
13381339 ty:: Adt ( adt, _) => VariantInfo :: Adt ( & adt. variants [ index] ) ,
13391340 ty:: Generator ( def_id, substs, _) => {
13401341 let generator_layout = cx. tcx . generator_layout ( * def_id) ;
1341- VariantInfo :: Generator ( * substs, generator_layout, index)
1342+ VariantInfo :: Generator ( substs, generator_layout, index)
13421343 }
13431344 _ => bug ! ( ) ,
13441345 }
@@ -1611,15 +1612,15 @@ enum EnumDiscriminantInfo<'ll> {
16111612#[ derive( Copy , Clone ) ]
16121613enum VariantInfo < ' tcx > {
16131614 Adt ( & ' tcx ty:: VariantDef ) ,
1614- Generator ( ty :: GeneratorSubsts < ' tcx > , & ' tcx GeneratorLayout < ' tcx > , VariantIdx ) ,
1615+ Generator ( SubstsRef < ' tcx > , & ' tcx GeneratorLayout < ' tcx > , VariantIdx ) ,
16151616}
16161617
16171618impl < ' tcx > VariantInfo < ' tcx > {
16181619 fn map_struct_name < R > ( & self , f : impl FnOnce ( & str ) -> R ) -> R {
16191620 match self {
16201621 VariantInfo :: Adt ( variant) => f ( & variant. ident . as_str ( ) ) ,
16211622 VariantInfo :: Generator ( substs, _, variant_index) =>
1622- f ( & substs. variant_name ( * variant_index) ) ,
1623+ f ( & substs. as_generator ( ) . variant_name ( * variant_index) ) ,
16231624 }
16241625 }
16251626
@@ -1763,9 +1764,10 @@ fn prepare_enum_metadata(
17631764 } )
17641765 . collect ( ) ,
17651766 ty:: Generator ( _, substs, _) => substs
1767+ . as_generator ( )
17661768 . variant_range ( enum_def_id, cx. tcx )
17671769 . map ( |variant_index| {
1768- let name = SmallCStr :: new ( & substs. variant_name ( variant_index) ) ;
1770+ let name = SmallCStr :: new ( & substs. as_generator ( ) . variant_name ( variant_index) ) ;
17691771 unsafe {
17701772 Some ( llvm:: LLVMRustDIBuilderCreateEnumerator (
17711773 DIB ( cx) ,
0 commit comments