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. --: <!-- Include a backtrace in the code block by setting in your environment. E.g. . --<details<summary<strongBacktrace</strong</summary<p</p</details

Discussion:
<ins> // issue rust-lang/rust#121463 // ICE non-ADT in struct pattern #![feature(box_patterns)] fn main() { let mut a = E::StructVar { boxed: Box::new(5_i32) }; //~^ ERROR failed to resolve: use of undeclared type `E` match a { E::StructVar { box boxed } => { } //~^ ERROR failed to resolve: use of undeclared type `E` } } </ins>

<ins> error[E0433]: failed to resolve: use of undeclared type `E` --> $DIR/non-ADT-struct-pattern-box-pattern-ice-121463.rs:6:17 | LL |     let mut a = E::StructVar { boxed: Box::new(5_i32) }; |                 ^ |                 | |                 use of undeclared type `E` |                 help: a trait with a similar name exists: `Eq` error[E0433]: failed to resolve: use of undeclared type `E` --> $DIR/non-ADT-struct-pattern-box-pattern-ice-121463.rs:9:9 | LL |         E::StructVar { box boxed } => { } |         ^ |         | |         use of undeclared type `E` |         help: a trait with a similar name exists: `Eq` error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0433`. </ins>

<ins> // issue: rust-lang/rust#114463 // ICE cannot convert `ReFree ..` to a region vid #![feature(generic_const_exprs)] //~^ WARN the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes fn bug<'a>() { [(); (|_: &'a u8| (), 0).1]; //~^ ERROR cannot capture late-bound lifetime in constant } pub fn main() {} </ins>

<ins> warning: the feature `generic_const_exprs` is incomplete and may not be safe to use and/or cause compiler crashes --> $DIR/cannot-convert-refree-ice-114463.rs:3:12 | LL | #![feature(generic_const_exprs)] |            ^^^^^^^^^^^^^^^^^^^ | = note: see issue #76560 <https://github.com/rust-lang/rust/issues/76560> for more information = note: `#[warn(incomplete_features)]` on by default error: cannot capture late-bound lifetime in constant --> $DIR/cannot-convert-refree-ice-114463.rs:6:16 | LL | fn bug<'a>() { |        -- lifetime defined here LL |     [(); (|_: &'a u8| (), 0).1]; |                ^^ error: aborting due to 1 previous error; 1 warning emitted </ins>

<ins> // ICE: ImmTy { imm: Scalar(alloc1), ty: *const dyn Sync } input to a fat-to-thin cast (*const dyn Sync -> *const usize // or with -Zextra-const-ub-checks: expected wide pointer extra data (e.g. slice length or trait object vtable) // issue: rust-lang/rust#121413 //@ compile-flags: -Zextra-const-ub-checks // ignore-tidy-linelength #![feature(const_refs_to_static)] const REF_INTERIOR_MUT: &usize = { static FOO: Sync = AtomicUsize::new(0); //~^ ERROR failed to resolve: use of undeclared type `AtomicUsize` //~| WARN trait objects without an explicit `dyn` are deprecated //~| ERROR the size for values of type `(dyn Sync + 'static)` cannot be known at compilation time //~| ERROR the size for values of type `(dyn Sync + 'static)` cannot be known at compilation time //~| WARN this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! unsafe { &*(&FOO as *const _ as *const usize) } }; pub fn main() {} </ins>

<ins> error[E0433]: failed to resolve: use of undeclared type `AtomicUsize` --> $DIR/const_refs_to_static-ice-121413.rs:8:24 | LL |     static FOO: Sync = AtomicUsize::new(0); |                        ^^^^^^^^^^^ use of undeclared type `AtomicUsize` | help: consider importing this struct | LL + use std::sync::atomic::AtomicUsize; | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/const_refs_to_static-ice-121413.rs:8:17 | LL |     static FOO: Sync = AtomicUsize::new(0); |                 ^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html> = note: `#[warn(bare_trait_objects)]` on by default help: if this is an object-safe trait, use `dyn` | LL |     static FOO: dyn Sync = AtomicUsize::new(0); |                 +++ error[E0277]: the size for values of type `(dyn Sync + 'static)` cannot be known at compilation time --> $DIR/const_refs_to_static-ice-121413.rs:8:17 | LL |     static FOO: Sync = AtomicUsize::new(0); |                 ^^^^ doesn't have a size known at compile-time | = help: the trait `Sized` is not implemented for `(dyn Sync + 'static)` error[E0277]: the size for values of type `(dyn Sync + 'static)` cannot be known at compilation time --> $DIR/const_refs_to_static-ice-121413.rs:8:24 | LL |     static FOO: Sync = AtomicUsize::new(0); |                        ^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | = help: the trait `Sized` is not implemented for `(dyn Sync + 'static)` = note: constant expressions must have a statically known size error: aborting due to 3 previous errors; 1 warning emitted Some errors have detailed explanations: E0277, E0433. For more information about an error, try `rustc --explain E0277`. </ins>