@@ -543,54 +543,47 @@ pub fn eval_const_expr_partial<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
543543    let  result = match  e. node  { 
544544      hir:: ExprUnary ( hir:: UnNeg ,  ref  inner)  => { 
545545        // unary neg literals already got their sign during creation 
546-         match  inner. node  { 
547-             hir:: ExprLit ( ref  lit)  => { 
548-                 use  syntax:: ast:: * ; 
549-                 use  syntax:: ast:: LitIntType :: * ; 
550-                 const  I8_OVERFLOW :  u64  = :: std:: i8:: MAX  as  u64  + 1 ; 
551-                 const  I16_OVERFLOW :  u64  = :: std:: i16:: MAX  as  u64  + 1 ; 
552-                 const  I32_OVERFLOW :  u64  = :: std:: i32:: MAX  as  u64  + 1 ; 
553-                 const  I64_OVERFLOW :  u64  = :: std:: i64:: MAX  as  u64  + 1 ; 
554-                 match  ( & lit. node ,  ety. map ( |t| & t. sty ) )  { 
555-                     ( & LitKind :: Int ( I8_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I8 ) ) )  |
556-                     ( & LitKind :: Int ( I8_OVERFLOW ,  Signed ( IntTy :: I8 ) ) ,  _)  => { 
557-                         return  Ok ( Integral ( I8 ( :: std:: i8:: MIN ) ) ) 
558-                     } , 
559-                     ( & LitKind :: Int ( I16_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I16 ) ) )  |
560-                     ( & LitKind :: Int ( I16_OVERFLOW ,  Signed ( IntTy :: I16 ) ) ,  _)  => { 
561-                         return  Ok ( Integral ( I16 ( :: std:: i16:: MIN ) ) ) 
562-                     } , 
563-                     ( & LitKind :: Int ( I32_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I32 ) ) )  |
564-                     ( & LitKind :: Int ( I32_OVERFLOW ,  Signed ( IntTy :: I32 ) ) ,  _)  => { 
565-                         return  Ok ( Integral ( I32 ( :: std:: i32:: MIN ) ) ) 
566-                     } , 
567-                     ( & LitKind :: Int ( I64_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I64 ) ) )  |
568-                     ( & LitKind :: Int ( I64_OVERFLOW ,  Signed ( IntTy :: I64 ) ) ,  _)  => { 
569-                         return  Ok ( Integral ( I64 ( :: std:: i64:: MIN ) ) ) 
570-                     } , 
571-                     ( & LitKind :: Int ( n,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: Is ) ) )  |
572-                     ( & LitKind :: Int ( n,  Signed ( IntTy :: Is ) ) ,  _)  => { 
573-                         match  tcx. sess . target . int_type  { 
574-                             IntTy :: I16  => if  n == I16_OVERFLOW  { 
575-                                 return  Ok ( Integral ( Isize ( Is16 ( :: std:: i16:: MIN ) ) ) ) ; 
576-                             } , 
577-                             IntTy :: I32  => if  n == I32_OVERFLOW  { 
578-                                 return  Ok ( Integral ( Isize ( Is32 ( :: std:: i32:: MIN ) ) ) ) ; 
579-                             } , 
580-                             IntTy :: I64  => if  n == I64_OVERFLOW  { 
581-                                 return  Ok ( Integral ( Isize ( Is64 ( :: std:: i64:: MIN ) ) ) ) ; 
582-                             } , 
583-                             _ => bug ! ( ) , 
584-                         } 
585-                     } , 
586-                     _ => { } , 
587-                 } 
588-             } , 
589-             hir:: ExprUnary ( hir:: UnNeg ,  ref  inner)  => { 
590-                 // skip `--$expr` 
591-                 return  eval_const_expr_partial ( tcx,  inner,  ty_hint,  fn_args) ; 
592-             } , 
593-             _ => { } , 
546+         if  let  hir:: ExprLit ( ref  lit)  = inner. node  { 
547+             use  syntax:: ast:: * ; 
548+             use  syntax:: ast:: LitIntType :: * ; 
549+             const  I8_OVERFLOW :  u64  = :: std:: i8:: MAX  as  u64  + 1 ; 
550+             const  I16_OVERFLOW :  u64  = :: std:: i16:: MAX  as  u64  + 1 ; 
551+             const  I32_OVERFLOW :  u64  = :: std:: i32:: MAX  as  u64  + 1 ; 
552+             const  I64_OVERFLOW :  u64  = :: std:: i64:: MAX  as  u64  + 1 ; 
553+             match  ( & lit. node ,  ety. map ( |t| & t. sty ) )  { 
554+                 ( & LitKind :: Int ( I8_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I8 ) ) )  |
555+                 ( & LitKind :: Int ( I8_OVERFLOW ,  Signed ( IntTy :: I8 ) ) ,  _)  => { 
556+                     return  Ok ( Integral ( I8 ( :: std:: i8:: MIN ) ) ) 
557+                 } , 
558+                 ( & LitKind :: Int ( I16_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I16 ) ) )  |
559+                 ( & LitKind :: Int ( I16_OVERFLOW ,  Signed ( IntTy :: I16 ) ) ,  _)  => { 
560+                     return  Ok ( Integral ( I16 ( :: std:: i16:: MIN ) ) ) 
561+                 } , 
562+                 ( & LitKind :: Int ( I32_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I32 ) ) )  |
563+                 ( & LitKind :: Int ( I32_OVERFLOW ,  Signed ( IntTy :: I32 ) ) ,  _)  => { 
564+                     return  Ok ( Integral ( I32 ( :: std:: i32:: MIN ) ) ) 
565+                 } , 
566+                 ( & LitKind :: Int ( I64_OVERFLOW ,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: I64 ) ) )  |
567+                 ( & LitKind :: Int ( I64_OVERFLOW ,  Signed ( IntTy :: I64 ) ) ,  _)  => { 
568+                     return  Ok ( Integral ( I64 ( :: std:: i64:: MIN ) ) ) 
569+                 } , 
570+                 ( & LitKind :: Int ( n,  Unsuffixed ) ,  Some ( & ty:: TyInt ( IntTy :: Is ) ) )  |
571+                 ( & LitKind :: Int ( n,  Signed ( IntTy :: Is ) ) ,  _)  => { 
572+                     match  tcx. sess . target . int_type  { 
573+                         IntTy :: I16  => if  n == I16_OVERFLOW  { 
574+                             return  Ok ( Integral ( Isize ( Is16 ( :: std:: i16:: MIN ) ) ) ) ; 
575+                         } , 
576+                         IntTy :: I32  => if  n == I32_OVERFLOW  { 
577+                             return  Ok ( Integral ( Isize ( Is32 ( :: std:: i32:: MIN ) ) ) ) ; 
578+                         } , 
579+                         IntTy :: I64  => if  n == I64_OVERFLOW  { 
580+                             return  Ok ( Integral ( Isize ( Is64 ( :: std:: i64:: MIN ) ) ) ) ; 
581+                         } , 
582+                         _ => bug ! ( ) , 
583+                     } 
584+                 } , 
585+                 _ => { } , 
586+             } 
594587        } 
595588        match  eval_const_expr_partial ( tcx,  & inner,  ty_hint,  fn_args) ? { 
596589          Float ( f)  => Float ( -f) , 
0 commit comments