Change:
<!-- Thank you for finding an Internal Compiler Error! If possible, try to provide a minimal verifiable example. You can read "Rust Bug Minimization Patterns" for how to create smaller examples. --<!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. --: (latest nightly as of today) </p</details<!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
label: +F-inline_const
Note the missing bound. requires , and should throw a lifetime bounds error, but I think the inline const block is tripping something up. It works fine if you require or without the inline const block.
claim

Discussion:
// modify their locations. let all_facts = &mut None; let mut constraints = Default::default(); <ins> let mut type_tests = Default::default(); </ins> let mut closure_bounds = Default::default(); let mut liveness_constraints = LivenessValues::new(Rc::new(RegionValueElements::new(&promoted_body)));

&mut this.cx.borrowck_context.constraints.outlives_constraints, &mut constraints, ); <ins> mem::swap(&mut this.cx.borrowck_context.constraints.type_tests, &mut type_tests); </ins> mem::swap( &mut this.cx.borrowck_context.constraints.closure_bounds_mapping, &mut closure_bounds,

swap_constraints(self); let locations = location.to_locations(); <ins> // Use location of promoted const in collected constraints for type_test in type_tests.iter() { let mut type_test = type_test.clone(); type_test.locations = locations; self.cx.borrowck_context.constraints.type_tests.push(type_test) } </ins> for constraint in constraints.outlives().iter() { let mut constraint = constraint.clone(); constraint.locations = locations;

<ins> #![feature(inline_const, const_type_id)] use std::alloc::Layout; use std::any::TypeId; use std::mem::transmute; use std::ptr::drop_in_place; pub struct VTable { layout: Layout, type_id: TypeId, drop_in_place: unsafe fn(*mut ()), } impl VTable { pub fn new<T>() -> &'static Self { const { //~^ ERROR the parameter type `T` may not live long enough //~| ERROR the parameter type `T` may not live long enough &VTable { layout: Layout::new::<T>(), type_id: TypeId::of::<T>(), drop_in_place: unsafe { transmute::<unsafe fn(*mut T), unsafe fn(*mut ())>(drop_in_place::<T>) }, } } } } fn main() {} </ins>

<ins> error[E0310]: the parameter type `T` may not live long enough --> $DIR/issue-102117.rs:16:9 | LL | /         const { LL | | LL | | LL | |             &VTable { ...  | LL | |             } LL | |         } | |_________^ ...so that the type `T` will meet its required lifetime bounds | help: consider adding an explicit lifetime bound... | LL |     pub fn new<T: 'static>() -> &'static Self { |                 +++++++++ error[E0310]: the parameter type `T` may not live long enough --> $DIR/issue-102117.rs:16:9 | LL | /         const { LL | | LL | | LL | |             &VTable { ...  | LL | |             } LL | |         } | |_________^ ...so that the type `T` will meet its required lifetime bounds | help: consider adding an explicit lifetime bound... | LL |     pub fn new<T: 'static>() -> &'static Self { |                 +++++++++ error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0310`. </ins>