@@ -76,6 +76,15 @@ pub trait MirVisitor {
7676 self . super_place ( place, ptx, location)
7777 }
7878
79+ fn visit_projection_elem (
80+ & mut self ,
81+ elem : & ProjectionElem ,
82+ ptx : PlaceContext ,
83+ location : Location ,
84+ ) {
85+ self . super_projection_elem ( elem, ptx, location) ;
86+ }
87+
7988 fn visit_local ( & mut self , local : & Local , ptx : PlaceContext , location : Location ) {
8089 let _ = ( local, ptx, location) ;
8190 }
@@ -264,7 +273,29 @@ pub trait MirVisitor {
264273 fn super_place ( & mut self , place : & Place , ptx : PlaceContext , location : Location ) {
265274 let _ = location;
266275 let _ = ptx;
267- visit_opaque ( & Opaque ( place. projection . clone ( ) ) ) ;
276+ self . visit_local ( & place. local , ptx, location) ;
277+
278+ for elem in & place. projection {
279+ self . visit_projection_elem ( elem, ptx, location) ;
280+ }
281+ }
282+
283+ fn super_projection_elem (
284+ & mut self ,
285+ elem : & ProjectionElem ,
286+ ptx : PlaceContext ,
287+ location : Location ,
288+ ) {
289+ match elem {
290+ ProjectionElem :: Deref => { }
291+ ProjectionElem :: Field ( _idx, ty) => self . visit_ty ( ty, location) ,
292+ ProjectionElem :: Index ( local) => self . visit_local ( local, ptx, location) ,
293+ ProjectionElem :: ConstantIndex { offset : _, min_length : _, from_end : _ } => { }
294+ ProjectionElem :: Subslice { from : _, to : _, from_end : _ } => { }
295+ ProjectionElem :: Downcast ( _idx) => { }
296+ ProjectionElem :: OpaqueCast ( ty) => self . visit_ty ( ty, location) ,
297+ ProjectionElem :: Subtype ( ty) => self . visit_ty ( ty, location) ,
298+ }
268299 }
269300
270301 fn super_rvalue ( & mut self , rvalue : & Rvalue , location : Location ) {
0 commit comments