@@ -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