@@ -5,13 +5,16 @@ use rustc_middle::ty::{
55 self ,  ConstVid ,  FloatVid ,  IntVid ,  RegionVid ,  Ty ,  TyCtxt ,  TyVid ,  TypeFoldable ,  TypeFolder , 
66 TypeSuperFoldable ,  TypeVisitableExt , 
77} ; 
8+ use  rustc_span:: Span ; 
89use  tracing:: instrument; 
910use  ut:: UnifyKey ; 
1011
1112use  super :: VariableLengths ; 
1213use  crate :: infer:: type_variable:: TypeVariableOrigin ; 
1314use  crate :: infer:: unify_key:: { ConstVariableValue ,  ConstVidKey } ; 
14- use  crate :: infer:: { ConstVariableOrigin ,  InferCtxt ,  RegionVariableOrigin ,  UnificationTable } ; 
15+ use  crate :: infer:: { 
16+  ConstVariableOrigin ,  InferCtxt ,  InferCtxtInner ,  RegionVariableOrigin ,  UnificationTable , 
17+ } ; 
1518
1619fn  vars_since_snapshot < ' tcx ,  T > ( 
1720 table :  & UnificationTable < ' _ ,  ' tcx ,  T > , 
2427 T :: from_index ( snapshot_var_len as  u32 ) ..T :: from_index ( table. len ( )  as  u32 ) 
2528} 
2629
30+ fn  float_vars_since_snapshot ( 
31+  inner :  & mut  InferCtxtInner < ' _ > , 
32+  snapshot_var_len :  usize , 
33+ )  -> ( Range < FloatVid > ,  Vec < Span > )  { 
34+  let  range = vars_since_snapshot ( & inner. float_unification_table ( ) ,  snapshot_var_len) ; 
35+  ( range. clone ( ) ,  range. map ( |index| inner. float_origin_span_storage [ index] ) . collect ( ) ) 
36+ } 
37+ 
2738fn  const_vars_since_snapshot < ' tcx > ( 
2839 table :  & mut  UnificationTable < ' _ ,  ' tcx ,  ConstVidKey < ' tcx > > , 
2940 snapshot_var_len :  usize , 
@@ -128,7 +139,7 @@ struct SnapshotVarData {
128139 region_vars :  ( Range < RegionVid > ,  Vec < RegionVariableOrigin > ) , 
129140 type_vars :  ( Range < TyVid > ,  Vec < TypeVariableOrigin > ) , 
130141 int_vars :  Range < IntVid > , 
131-  float_vars :  Range < FloatVid > , 
142+  float_vars :  ( Range < FloatVid > ,   Vec < Span > ) , 
132143 const_vars :  ( Range < ConstVid > ,  Vec < ConstVariableOrigin > ) , 
133144} 
134145
@@ -141,8 +152,7 @@ impl SnapshotVarData {
141152 let  type_vars = inner. type_variables ( ) . vars_since_snapshot ( vars_pre_snapshot. type_var_len ) ; 
142153 let  int_vars =
143154 vars_since_snapshot ( & inner. int_unification_table ( ) ,  vars_pre_snapshot. int_var_len ) ; 
144-  let  float_vars =
145-  vars_since_snapshot ( & inner. float_unification_table ( ) ,  vars_pre_snapshot. float_var_len ) ; 
155+  let  float_vars = float_vars_since_snapshot ( & mut  inner,  vars_pre_snapshot. float_var_len ) ; 
146156
147157 let  const_vars = const_vars_since_snapshot ( 
148158 & mut  inner. const_unification_table ( ) , 
@@ -156,7 +166,7 @@ impl SnapshotVarData {
156166 region_vars. 0 . is_empty ( ) 
157167 && type_vars. 0 . is_empty ( ) 
158168 && int_vars. is_empty ( ) 
159-  && float_vars. is_empty ( ) 
169+  && float_vars. 0 . is_empty ( ) 
160170 && const_vars. 0 . is_empty ( ) 
161171 } 
162172} 
@@ -201,8 +211,10 @@ impl<'a, 'tcx> TypeFolder<TyCtxt<'tcx>> for InferenceFudger<'a, 'tcx> {
201211 } 
202212 } 
203213 ty:: FloatVar ( vid)  => { 
204-  if  self . snapshot_vars . float_vars . contains ( & vid)  { 
205-  self . infcx . next_float_var ( ) 
214+  if  self . snapshot_vars . float_vars . 0 . contains ( & vid)  { 
215+  let  idx = vid. as_usize ( )  - self . snapshot_vars . float_vars . 0 . start . as_usize ( ) ; 
216+  let  span = self . snapshot_vars . float_vars . 1 [ idx] ; 
217+  self . infcx . next_float_var ( span) 
206218 }  else  { 
207219 ty
208220 } 
0 commit comments