@@ -720,20 +720,33 @@ impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> {
720720 //NOTE(@jroesch): mixed RefCell borrow causes crash
721721 let adj = infcx. adjustments ( ) . get ( & expr. id ) . map ( |x| x. clone ( ) ) ;
722722 if let Some ( adjustment) = adj {
723- match adjustment {
724- adjustment:: AdjustNeverToAny ( .. ) |
725- adjustment:: AdjustReifyFnPointer |
726- adjustment:: AdjustUnsafeFnPointer |
727- adjustment:: AdjustMutToConstPointer => {
723+ match adjustment. kind {
724+ adjustment:: Adjust :: NeverToAny |
725+ adjustment:: Adjust :: ReifyFnPointer |
726+ adjustment:: Adjust :: UnsafeFnPointer |
727+ adjustment:: Adjust :: MutToConstPointer => {
728728 // Creating a closure/fn-pointer or unsizing consumes
729729 // the input and stores it into the resulting rvalue.
730730 debug ! ( "walk_adjustment: trivial adjustment" ) ;
731731 let cmt_unadjusted =
732732 return_if_err ! ( self . mc. cat_expr_unadjusted( expr) ) ;
733733 self . delegate_consume ( expr. id , expr. span , cmt_unadjusted) ;
734734 }
735- adjustment:: AdjustDerefRef ( ref adj) => {
736- self . walk_autoderefref ( expr, adj) ;
735+ adjustment:: Adjust :: DerefRef { autoderefs, autoref, unsize } => {
736+ debug ! ( "walk_adjustment expr={:?} adj={:?}" , expr, adjustment) ;
737+
738+ self . walk_autoderefs ( expr, autoderefs) ;
739+
740+ let cmt_derefd =
741+ return_if_err ! ( self . mc. cat_expr_autoderefd( expr, autoderefs) ) ;
742+
743+ let cmt_refd =
744+ self . walk_autoref ( expr, cmt_derefd, autoref) ;
745+
746+ if unsize {
747+ // Unsizing consumes the thin pointer and produces a fat one.
748+ self . delegate_consume ( expr. id , expr. span , cmt_refd) ;
749+ }
737750 }
738751 }
739752 }
@@ -770,28 +783,6 @@ impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> {
770783 }
771784 }
772785
773- fn walk_autoderefref ( & mut self ,
774- expr : & hir:: Expr ,
775- adj : & adjustment:: AutoDerefRef < ' tcx > ) {
776- debug ! ( "walk_autoderefref expr={:?} adj={:?}" ,
777- expr,
778- adj) ;
779-
780- self . walk_autoderefs ( expr, adj. autoderefs ) ;
781-
782- let cmt_derefd =
783- return_if_err ! ( self . mc. cat_expr_autoderefd( expr, adj. autoderefs) ) ;
784-
785- let cmt_refd =
786- self . walk_autoref ( expr, cmt_derefd, adj. autoref ) ;
787-
788- if adj. unsize . is_some ( ) {
789- // Unsizing consumes the thin pointer and produces a fat one.
790- self . delegate_consume ( expr. id , expr. span , cmt_refd) ;
791- }
792- }
793-
794-
795786 /// Walks the autoref `opt_autoref` applied to the autoderef'd
796787 /// `expr`. `cmt_derefd` is the mem-categorized form of `expr`
797788 /// after all relevant autoderefs have occurred. Because AutoRefs
@@ -803,7 +794,7 @@ impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> {
803794 fn walk_autoref ( & mut self ,
804795 expr : & hir:: Expr ,
805796 cmt_base : mc:: cmt < ' tcx > ,
806- opt_autoref : Option < adjustment:: AutoRef < ' tcx > > )
797+ opt_autoref : Option < adjustment:: AutoBorrow < ' tcx > > )
807798 -> mc:: cmt < ' tcx >
808799 {
809800 debug ! ( "walk_autoref(expr.id={} cmt_derefd={:?} opt_autoref={:?})" ,
@@ -822,7 +813,7 @@ impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> {
822813 } ;
823814
824815 match * autoref {
825- adjustment:: AutoPtr ( r, m) => {
816+ adjustment:: AutoBorrow :: Ref ( r, m) => {
826817 self . delegate . borrow ( expr. id ,
827818 expr. span ,
828819 cmt_base,
@@ -831,7 +822,7 @@ impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> {
831822 AutoRef ) ;
832823 }
833824
834- adjustment:: AutoUnsafe ( m) => {
825+ adjustment:: AutoBorrow :: RawPtr ( m) => {
835826 debug ! ( "walk_autoref: expr.id={} cmt_base={:?}" ,
836827 expr. id,
837828 cmt_base) ;
0 commit comments