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. --(reduced) <details<summary<strongOriginal</strong</summary<p</p</details<!-- 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
Bisects to , but I guess it just made the ICE easier to reach. cc
Nope unfortunately this one only reproduces with statics, and thus can't be reached on stable or before that PR. It's still not useful to look at to figure out why it's ICEing now, as the ICE is happening somewhere else entirely.

Discussion:
if self.tcx.is_thread_local_static(def_id) { self.tcx.dcx().span_bug(span, "tls access is checked in `Rvalue::ThreadLocalRef`"); } <ins> if let Some(def_id) = def_id.as_local() && let Err(guar) = self.tcx.at(span).check_well_formed(hir::OwnerId { def_id }) { self.error_emitted = Some(guar); } </ins> self.check_op_spanned(ops::StaticAccess, span) }

<del> //@ known-bug: #123153 pub struct wl_interface { pub version: str, } pub struct Interface { pub other_interfaces: &'static [&'static Interface], pub c_ptr: Option<&'static wl_interface>, } pub static mut wl_callback_interface: wl_interface = wl_interface { version: 0 }; pub static WL_CALLBACK_INTERFACE: Interface = Interface { other_interfaces: &[], c_ptr: Some(unsafe { &wl_callback_interface }) }; fn main() {} </del>

<ins> //! This test used to actually start evaluating the static even though //! there were errors in typeck. //! issue: rust-lang/rust#123153 pub struct Foo { pub version: str, } pub struct Bar { pub ok: &'static [&'static Bar], pub bad: &'static Foo, } pub static WITH_ERROR: Foo = Foo { version: 0 }; //~^ ERROR the size for values of type `str` cannot be known at compilation time //~| ERROR the size for values of type `str` cannot be known at compilation time //~| ERROR mismatched types pub static USE_WITH_ERROR: Bar = Bar { ok: &[], bad: &WITH_ERROR }; fn main() {} </ins>

<ins> error[E0277]: the size for values of type `str` cannot be known at compilation time --> $DIR/unsized_type2.rs:14:24 | LL | pub static WITH_ERROR: Foo = Foo { version: 0 }; |                        ^^^ doesn't have a size known at compile-time | = help: within `Foo`, the trait `Sized` is not implemented for `str`, which is required by `Foo: Sized` note: required because it appears within the type `Foo` --> $DIR/unsized_type2.rs:5:12 | LL | pub struct Foo { |            ^^^ error[E0277]: the size for values of type `str` cannot be known at compilation time --> $DIR/unsized_type2.rs:14:30 | LL | pub static WITH_ERROR: Foo = Foo { version: 0 }; |                              ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | = help: within `Foo`, the trait `Sized` is not implemented for `str`, which is required by `Foo: Sized` note: required because it appears within the type `Foo` --> $DIR/unsized_type2.rs:5:12 | LL | pub struct Foo { |            ^^^ = note: constant expressions must have a statically known size error[E0308]: mismatched types --> $DIR/unsized_type2.rs:14:45 | LL | pub static WITH_ERROR: Foo = Foo { version: 0 }; |                                             ^ expected `str`, found integer error: aborting due to 3 previous errors Some errors have detailed explanations: E0277, E0308. For more information about an error, try `rustc --explain E0277`. </ins>