@@ -2504,32 +2504,32 @@ impl<'tcx> LateLintPass<'tcx> for InvalidValue {
2504
2504
} ) ;
2505
2505
2506
2506
// Check if this ADT has a constrained layout (like `NonNull` and friends).
2507
- let layout = cx. tcx . layout_of ( cx. param_env . and ( ty) ) . unwrap ( ) ;
2508
-
2509
- match & layout. abi {
2510
- Abi :: Scalar ( scalar) | Abi :: ScalarPair ( scalar, _) => {
2511
- let range = scalar. valid_range ( cx) ;
2512
- if !range. contains ( 0 ) {
2513
- Some (
2514
- InitError :: from ( format ! ( "`{}` must be non-null" , ty) ) . nested ( field_err) ,
2515
- )
2516
- } else if init == InitKind :: Uninit && !scalar. is_always_valid ( cx) {
2517
- // Prefer reporting on the fields over the entire struct for uninit,
2518
- // as the information bubbles out and it may be unclear why the type can't
2519
- // be null from just its outside signature.
2520
- Some (
2521
- InitError :: from ( format ! (
2522
- "`{}` must be initialized inside its custom valid range" ,
2523
- ty,
2524
- ) )
2525
- . nested ( field_err) ,
2526
- )
2527
- } else {
2528
- field_err
2507
+ if let Ok ( layout) = cx. tcx . layout_of ( cx. param_env . and ( ty) ) {
2508
+ match & layout. abi {
2509
+ Abi :: Scalar ( scalar) | Abi :: ScalarPair ( scalar, _) => {
2510
+ let range = scalar. valid_range ( cx) ;
2511
+ if !range. contains ( 0 ) {
2512
+ return Some (
2513
+ InitError :: from ( format ! ( "`{}` must be non-null" , ty) )
2514
+ . nested ( field_err) ,
2515
+ ) ;
2516
+ } else if init == InitKind :: Uninit && !scalar. is_always_valid ( cx) {
2517
+ // Prefer reporting on the fields over the entire struct for uninit,
2518
+ // as the information bubbles out and it may be unclear why the type can't
2519
+ // be null from just its outside signature.
2520
+ return Some (
2521
+ InitError :: from ( format ! (
2522
+ "`{}` must be initialized inside its custom valid range" ,
2523
+ ty,
2524
+ ) )
2525
+ . nested ( field_err) ,
2526
+ ) ;
2527
+ }
2529
2528
}
2529
+ _ => { }
2530
2530
}
2531
- _ => field_err,
2532
2531
}
2532
+ field_err
2533
2533
}
2534
2534
2535
2535
/// Return `Some` only if we are sure this type does *not*
0 commit comments