@@ -270,6 +270,10 @@ impl<'tcx> TyCtxt<'tcx> {
270270    /// Returns the deeply last field of nested structures, or the same type if 
271271     /// not a structure at all. Corresponds to the only possible unsized field, 
272272     /// and its type can be used to determine unsizing strategy. 
273+      /// 
274+      /// Should only be called if `ty` has no inference variables and does not 
275+      /// need its lifetimes preserved (e.g. as part of codegen); otherwise 
276+      /// normalization attempt may cause compiler bugs. 
273277     pub  fn  struct_tail_erasing_lifetimes ( self , 
274278                                         ty :  Ty < ' tcx > , 
275279                                         param_env :  ty:: ParamEnv < ' tcx > ) 
@@ -287,8 +291,8 @@ impl<'tcx> TyCtxt<'tcx> {
287291     /// handle `<T as Trait>::Assoc` and `impl Trait`); pass the identity 
288292     /// function to indicate no normalization should take place. 
289293     /// 
290-      /// See also `struct_tail_erasing_lifetimes`, which is what callers running  
291-      /// after type checking should use . 
294+      /// See also `struct_tail_erasing_lifetimes`, which is suitable for use  
295+      /// during codegen . 
292296     pub  fn  struct_tail_with_normalize ( self , 
293297                                      mut  ty :  Ty < ' tcx > , 
294298                                      normalize :  impl  Fn ( Ty < ' tcx > )  -> Ty < ' tcx > ) 
@@ -337,7 +341,8 @@ impl<'tcx> TyCtxt<'tcx> {
337341     /// For `(Foo<Foo<T>>, Foo<dyn Trait>)`, the result will be `(Foo<T>, Trait)`, 
338342     /// whereas struct_tail produces `T`, and `Trait`, respectively. 
339343     /// 
340-      /// Must only be called after type-checking is complete; otherwise 
344+      /// Should only be called if the types have no inference variables and do 
345+      /// not need their lifetimes preserved (e.g. as part of codegen); otherwise 
341346     /// normalization attempt may cause compiler bugs. 
342347     pub  fn  struct_lockstep_tails_erasing_lifetimes ( self , 
343348                                                   source :  Ty < ' tcx > , 
@@ -356,8 +361,8 @@ impl<'tcx> TyCtxt<'tcx> {
356361     /// For `(Foo<Foo<T>>, Foo<dyn Trait>)`, the result will be `(Foo<T>, Trait)`, 
357362     /// whereas struct_tail produces `T`, and `Trait`, respectively. 
358363     /// 
359-      /// See also struct_lockstep_tails_erasing_lifetimes, which 
360-      /// is what callers running after type checking should use . 
364+      /// See also ` struct_lockstep_tails_erasing_lifetimes` , which is suitable for use  
365+      /// during codegen . 
361366     pub  fn  struct_lockstep_tails_with_normalize ( self , 
362367                                                source :  Ty < ' tcx > , 
363368                                                target :  Ty < ' tcx > , 
0 commit comments