Change:
The bug should be different from , as the stack traces are different. <!-- 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
Bisected:
Weirdly, the ICE only happens when you don't import . I.e., this ICEs: but this gives an appropriate unsized field error:
The error happens when a is involved, which makes the sizedness check for not to be evaluated. A way to side-step the issue is to change to be
Assigning priority as discussed as part of the and removing . label -I-prioritize +P-medium
A potential duplicate. <!-- 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:
for &i in &inverse_memory_index { let field = fields[i as usize]; if !sized { <del> bug!("univariant: field #{} of `{}` comes after unsized field", offsets.len(), ty); </del> <ins> self.tcx.sess.delay_span_bug( DUMMY_SP, &format!( "univariant: field #{} of `{}` comes after unsized field", offsets.len(), ty ), ); </ins> } if field.is_unsized() {

<ins> // See issue #84108 -- this is a test to ensure we do not ICE // on this invalid code. #![crate_type = "lib"] static FOO: (dyn AsRef<OsStr>, u8) = ("hello", 42); //~^ ERROR cannot find type `OsStr` in this scope const BAR: (&Path, [u8], usize) = ("hello", [], 42); //~^ ERROR cannot find type `Path` in this scope //~| ERROR the size for values of type `[u8]` cannot be known at compilation time static BAZ: ([u8], usize) = ([], 0); //~^ ERROR the size for values of type `[u8]` cannot be known at compilation time </ins>

<ins> error[E0412]: cannot find type `OsStr` in this scope --> $DIR/issue-84108.rs:6:24 | LL | static FOO: (dyn AsRef<OsStr>, u8) = ("hello", 42); |                        ^^^^^ not found in this scope | help: consider importing this struct | LL | use std::ffi::OsStr; | error[E0412]: cannot find type `Path` in this scope --> $DIR/issue-84108.rs:9:14 | LL | const BAR: (&Path, [u8], usize) = ("hello", [], 42); |              ^^^^ not found in this scope | help: consider importing this struct | LL | use std::path::Path; | error[E0277]: the size for values of type `[u8]` cannot be known at compilation time --> $DIR/issue-84108.rs:9:12 | LL | const BAR: (&Path, [u8], usize) = ("hello", [], 42); |            ^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time | = help: the trait `Sized` is not implemented for `[u8]` = note: only the last element of a tuple may have a dynamically sized type error[E0277]: the size for values of type `[u8]` cannot be known at compilation time --> $DIR/issue-84108.rs:13:13 | LL | static BAZ: ([u8], usize) = ([], 0); |             ^^^^^^^^^^^^^ doesn't have a size known at compile-time | = help: the trait `Sized` is not implemented for `[u8]` = note: only the last element of a tuple may have a dynamically sized type error: aborting due to 4 previous errors Some errors have detailed explanations: E0277, E0412. For more information about an error, try `rustc --explain E0277`. </ins>