@@ -181,38 +181,36 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
181181 ) ;
182182 }
183183
184- if let Some ( ty) = self . retrieve_type_for_place ( used_place) {
185- let needs_note = match ty. sty {
186- ty:: Closure ( id, _) => {
187- let tables = self . infcx . tcx . typeck_tables_of ( id) ;
188- let node_id = self . infcx . tcx . hir ( ) . as_local_node_id ( id) . unwrap ( ) ;
189- let hir_id = self . infcx . tcx . hir ( ) . node_to_hir_id ( node_id) ;
190-
191- tables. closure_kind_origins ( ) . get ( hir_id) . is_none ( )
192- }
193- _ => true ,
194- } ;
184+ let ty = used_place. ty ( self . mir , self . infcx . tcx ) . to_ty ( self . infcx . tcx ) ;
185+ let needs_note = match ty. sty {
186+ ty:: Closure ( id, _) => {
187+ let tables = self . infcx . tcx . typeck_tables_of ( id) ;
188+ let node_id = self . infcx . tcx . hir ( ) . as_local_node_id ( id) . unwrap ( ) ;
189+ let hir_id = self . infcx . tcx . hir ( ) . node_to_hir_id ( node_id) ;
195190
196- if needs_note {
197- let mpi = self . move_data . moves [ move_out_indices[ 0 ] ] . path ;
198- let place = & self . move_data . move_paths [ mpi] . place ;
199-
200- if let Some ( ty) = self . retrieve_type_for_place ( place) {
201- let note_msg = match self . describe_place_with_options (
202- place,
203- IncludingDowncast ( true ) ,
204- ) {
205- Some ( name) => format ! ( "`{}`" , name) ,
206- None => "value" . to_owned ( ) ,
207- } ;
208-
209- err. note ( & format ! (
210- "move occurs because {} has type `{}`, \
211- which does not implement the `Copy` trait",
212- note_msg, ty
213- ) ) ;
214- }
191+ tables. closure_kind_origins ( ) . get ( hir_id) . is_none ( )
215192 }
193+ _ => true ,
194+ } ;
195+
196+ if needs_note {
197+ let mpi = self . move_data . moves [ move_out_indices[ 0 ] ] . path ;
198+ let place = & self . move_data . move_paths [ mpi] . place ;
199+
200+ let ty = place. ty ( self . mir , self . infcx . tcx ) . to_ty ( self . infcx . tcx ) ;
201+ let note_msg = match self . describe_place_with_options (
202+ place,
203+ IncludingDowncast ( true ) ,
204+ ) {
205+ Some ( name) => format ! ( "`{}`" , name) ,
206+ None => "value" . to_owned ( ) ,
207+ } ;
208+
209+ err. note ( & format ! (
210+ "move occurs because {} has type `{}`, \
211+ which does not implement the `Copy` trait",
212+ note_msg, ty
213+ ) ) ;
216214 }
217215
218216 if let Some ( ( _, mut old_err) ) = self . move_error_reported
@@ -1558,7 +1556,7 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
15581556 ) ?;
15591557 buf. push_str ( "[" ) ;
15601558 if self . append_local_to_string ( index, buf) . is_err ( ) {
1561- buf. push_str ( ".. " ) ;
1559+ buf. push_str ( "_ " ) ;
15621560 }
15631561 buf. push_str ( "]" ) ;
15641562 }
@@ -1663,22 +1661,6 @@ impl<'cx, 'gcx, 'tcx> MirBorrowckCtxt<'cx, 'gcx, 'tcx> {
16631661 }
16641662 }
16651663
1666- /// Retrieve type of a place for the current MIR representation
1667- fn retrieve_type_for_place ( & self , place : & Place < ' tcx > ) -> Option < ty:: Ty > {
1668- match place {
1669- Place :: Local ( local) => {
1670- let local = & self . mir . local_decls [ * local] ;
1671- Some ( local. ty )
1672- }
1673- Place :: Promoted ( ref prom) => Some ( prom. 1 ) ,
1674- Place :: Static ( ref st) => Some ( st. ty ) ,
1675- Place :: Projection ( ref proj) => match proj. elem {
1676- ProjectionElem :: Field ( _, ty) => Some ( ty) ,
1677- _ => None ,
1678- } ,
1679- }
1680- }
1681-
16821664 /// Check if a place is a thread-local static.
16831665 pub fn is_place_thread_local ( & self , place : & Place < ' tcx > ) -> bool {
16841666 if let Place :: Static ( statik) = place {
0 commit comments