@@ -270,9 +270,10 @@ impl<'tcx> ValueAnalysis<'tcx> for ConstAnalysis<'_, 'tcx> {
270
270
val
271
271
}
272
272
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) ) ,
276
277
FlatSet :: Bottom => FlatSet :: Bottom ,
277
278
FlatSet :: Top => FlatSet :: Top ,
278
279
} ,
@@ -420,9 +421,9 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
420
421
& mut |place, op| {
421
422
if let Ok ( imm) = self . ecx . read_immediate_raw ( op)
422
423
&& let Some ( imm) = imm. right ( )
423
- && let Immediate :: Scalar ( scalar) = * imm
424
424
{
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 ) ;
426
427
}
427
428
} ,
428
429
) ;
@@ -492,10 +493,9 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
492
493
FlatSet :: Top => FlatSet :: Top ,
493
494
FlatSet :: Elem ( scalar) => {
494
495
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
+ } )
499
499
}
500
500
FlatSet :: Bottom => FlatSet :: Bottom ,
501
501
}
@@ -514,13 +514,10 @@ impl<'a, 'tcx> ConstAnalysis<'a, 'tcx> {
514
514
fn wrap_immediate ( & self , imm : Immediate ) -> FlatSet < Scalar > {
515
515
match imm {
516
516
Immediate :: Scalar ( scalar) => FlatSet :: Elem ( scalar) ,
517
+ Immediate :: Uninit => FlatSet :: Bottom ,
517
518
_ => FlatSet :: Top ,
518
519
}
519
520
}
520
-
521
- fn wrap_immty ( & self , val : ImmTy < ' tcx > ) -> FlatSet < Scalar > {
522
- self . wrap_immediate ( * val)
523
- }
524
521
}
525
522
526
523
struct CollectAndPatch < ' tcx , ' locals > {
0 commit comments