@@ -153,11 +153,7 @@ where
153153
154154        // Offset may need adjustment for unsized fields. 
155155        let  ( meta,  offset)  = if  field_layout. is_unsized ( )  { 
156-             if  base. layout ( ) . is_sized ( )  { 
157-                 // An unsized field of a sized type? Sure... 
158-                 // But const-prop actually feeds us such nonsense MIR! (see test `const_prop/issue-86351.rs`) 
159-                 throw_inval ! ( ConstPropNonsense ) ; 
160-             } 
156+             assert ! ( !base. layout( ) . is_sized( ) ) ; 
161157            let  base_meta = base. meta ( ) ; 
162158            // Re-use parent metadata to determine dynamic field layout. 
163159            // With custom DSTS, this *will* execute user-defined code, but the same 
@@ -205,29 +201,26 @@ where
205201        // see https://github.com/rust-lang/rust/issues/93688#issuecomment-1032929496.) 
206202        // So we just "offset" by 0. 
207203        let  layout = base. layout ( ) . for_variant ( self ,  variant) ; 
208-         if  layout. abi . is_uninhabited ( )  { 
209-             // `read_discriminant` should have excluded uninhabited variants... but ConstProp calls 
210-             // us on dead code. 
211-             // In the future we might want to allow this to permit code like this: 
212-             // (this is a Rust/MIR pseudocode mix) 
213-             // ``` 
214-             // enum Option2 { 
215-             //   Some(i32, !), 
216-             //   None, 
217-             // } 
218-             // 
219-             // fn panic() -> ! { panic!() } 
220-             // 
221-             // let x: Option2; 
222-             // x.Some.0 = 42; 
223-             // x.Some.1 = panic(); 
224-             // SetDiscriminant(x, Some); 
225-             // ``` 
226-             // However, for now we don't generate such MIR, and this check here *has* found real 
227-             // bugs (see https://github.com/rust-lang/rust/issues/115145), so we will keep rejecting 
228-             // it. 
229-             throw_inval ! ( ConstPropNonsense ) 
230-         } 
204+         // In the future we might want to allow this to permit code like this: 
205+         // (this is a Rust/MIR pseudocode mix) 
206+         // ``` 
207+         // enum Option2 { 
208+         //   Some(i32, !), 
209+         //   None, 
210+         // } 
211+         // 
212+         // fn panic() -> ! { panic!() } 
213+         // 
214+         // let x: Option2; 
215+         // x.Some.0 = 42; 
216+         // x.Some.1 = panic(); 
217+         // SetDiscriminant(x, Some); 
218+         // ``` 
219+         // However, for now we don't generate such MIR, and this check here *has* found real 
220+         // bugs (see https://github.com/rust-lang/rust/issues/115145), so we will keep rejecting 
221+         // it. 
222+         assert ! ( !layout. abi. is_uninhabited( ) ) ; 
223+ 
231224        // This cannot be `transmute` as variants *can* have a smaller size than the entire enum. 
232225        base. offset ( Size :: ZERO ,  layout,  self ) 
233226    } 
0 commit comments