@@ -270,9 +270,10 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'_, 'tcx> {
270270 val
271271 }
272272 Rvalue :: UnaryOp ( op, operand) => match self . eval_operand ( operand, state) {
273- FlatSet :: Elem ( value) => {
274- self . ecx . unary_op ( * op, & value) . map_or ( FlatSet :: Top , |val| self . wrap_immty ( val) )
275- }
273+ FlatSet :: Elem ( value) => self
274+ . ecx
275+ . unary_op ( * op, & value)
276+ . map_or ( FlatSet :: Top , |val| self . wrap_immediate ( * val) ) ,
276277 FlatSet :: Bottom => FlatSet :: Bottom ,
277278 FlatSet :: Top => FlatSet :: Top ,
278279 } ,
@@ -420,9 +421,9 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
420421 & mut |place, op| {
421422 if let Ok ( imm) = self . ecx . read_immediate_raw ( op)
422423 && let Some ( imm) = imm. right ( )
423- && let Immediate :: Scalar ( scalar) = * imm
424424 {
425- state. insert_value_idx ( place, FlatSet :: Elem ( scalar) , & self . map ) ;
425+ let elem = self . wrap_immediate ( * imm) ;
426+ state. insert_value_idx ( place, elem, & self . map ) ;
426427 }
427428 } ,
428429 ) ;
@@ -492,10 +493,9 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
492493 FlatSet :: Top => FlatSet :: Top ,
493494 FlatSet :: Elem ( scalar) => {
494495 let ty = op. ty ( self . local_decls , self . tcx ) ;
495- self . tcx
496- . layout_of ( self . param_env . and ( ty) )
497- . map ( |layout| FlatSet :: Elem ( ImmTy :: from_scalar ( scalar. into ( ) , layout) ) )
498- . unwrap_or ( FlatSet :: Top )
496+ self . tcx . layout_of ( self . param_env . and ( ty) ) . map_or ( FlatSet :: Top , |layout| {
497+ FlatSet :: Elem ( ImmTy :: from_scalar ( scalar. into ( ) , layout) )
498+ } )
499499 }
500500 FlatSet :: Bottom => FlatSet :: Bottom ,
501501 }
@@ -514,13 +514,10 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
514514 fn wrap_immediate ( & self , imm : Immediate ) -> FlatSet < Scalar > {
515515 match imm {
516516 Immediate :: Scalar ( scalar) => FlatSet :: Elem ( scalar) ,
517+ Immediate :: Uninit => FlatSet :: Bottom ,
517518 _ => FlatSet :: Top ,
518519 }
519520 }
520-
521- fn wrap_immty ( & self , val : ImmTy < ' tcx > ) -> FlatSet < Scalar > {
522- self . wrap_immediate ( * val)
523- }
524521}
525522
526523struct CollectAndPatch < ' tcx , ' locals > {
0 commit comments