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. --I'm a complete Rust newbie and most of the time I have no idea of what I'm doing. So my source code is probably completely weird and fcked up by the standards of a seasoned Rust developer. Still, I don't think my compiler should be panicking :) Also please note that the source code is definitely not even supposed to compile, it DOES* have a number of syntax errors, however, I would expect a reasonable error message explaining what I'm doing wrong. Big thanks to who has minimized the code to a very simple test case that crashes the compiler: I also found several similar bugs reported but I'm still not sure if this is a duplicate or not. Similar bug reports: To reproduce: The bug does exist in the current nightly build. : <!-- Include a backtrace in the code block by setting in your environment. E.g. . --<details<summary<strongBacktrace</strong</summary<p</p</details
Minimized: () Note: I used for reducing most of the unneeded code, and to put everything in one big file.
Thanks for doing that, I'll edit my original post to link to your reply to see a code example. P.S. I did open the code reduction tools you linked, but I still am not sure how you got to this minimized state, great job :D
Triage: It now returns some compiler errors and is no longer ICE, fixed by , I guess. Marking as .
Just in case, if you could check your code with the latest nightly, it'd be great.
Indeed, tested with the latest nightly this produces various compiler errors and no ICE. Thank you!

Discussion:
<ins> // #84044: This used to ICE. fn main() { let f = || {}; drop(&mut f); //~ ERROR cannot borrow `f` as mutable, as it is not declared as mutable } </ins>

<ins> error[E0596]: cannot borrow `f` as mutable, as it is not declared as mutable --> $DIR/issue-84044-drop-non-mut.rs:5:10 | LL |     let f = || {}; |         - help: consider changing this to be mutable: `mut f` LL |     drop(&mut f); |          ^^^^^^ cannot borrow as mutable error: aborting due to previous error For more information about this error, try `rustc --explain E0596`. </ins>

<ins> // compile-flags: -Zsave-analysis // Check that this does not ICE. // Stolen from src/test/ui/const-generics/generic_arg_infer/infer-arg-test.rs #![feature(generic_arg_infer)] struct All<'a, T, const N: usize> { v: &'a T, } struct BadInfer<_>; //~^ ERROR expected identifier //~| ERROR parameter `_` is never used fn all_fn<'a, T, const N: usize>() {} fn bad_infer_fn<_>() {} //~^ ERROR expected identifier fn main() { let a: All<_, _, _>; //~^ ERROR this struct takes 2 generic arguments but 3 generic arguments were supplied all_fn(); let v: [u8; _]; let v: [u8; 10] = [0; _]; } </ins>

<ins> error: expected identifier, found reserved identifier `_` --> $DIR/issue-89066.rs:12:17 | LL | struct BadInfer<_>; |                 ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` --> $DIR/issue-89066.rs:18:17 | LL | fn bad_infer_fn<_>() {} |                 ^ expected identifier, found reserved identifier error[E0392]: parameter `_` is never used --> $DIR/issue-89066.rs:12:17 | LL | struct BadInfer<_>; |                 ^ unused parameter | = help: consider removing `_`, referring to it in a field, or using a marker such as `PhantomData` = help: if you intended `_` to be a const parameter, use `const _: usize` instead error[E0107]: this struct takes 2 generic arguments but 3 generic arguments were supplied --> $DIR/issue-89066.rs:23:10 | LL |   let a: All<_, _, _>; |          ^^^       - help: remove this generic argument |          | |          expected 2 generic arguments | note: struct defined here, with 2 generic parameters: `T`, `N` --> $DIR/issue-89066.rs:8:8 | LL | struct All<'a, T, const N: usize> { |        ^^^     -        - error: aborting due to 4 previous errors Some errors have detailed explanations: E0107, E0392. For more information about an error, try `rustc --explain E0107`. </ins>

<ins> // #91594: This used to ICE. trait Component<M> { type Interface; } trait HasComponent<I> {} struct Foo; impl HasComponent<<Foo as Component<Foo>>::Interface> for Foo {} //~^ ERROR the trait bound `Foo: HasComponent<()>` is not satisfied impl<M: HasComponent<()>> Component<M> for Foo { type Interface = u8; } fn main() {} </ins>

<ins> error[E0277]: the trait bound `Foo: HasComponent<()>` is not satisfied --> $DIR/issue-91594.rs:10:6 | LL | impl HasComponent<<Foo as Component<Foo>>::Interface> for Foo {} |      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `HasComponent<()>` is not implemented for `Foo` | = help: the following implementations were found: <Foo as HasComponent<<Foo as Component<Foo>>::Interface>> note: required because of the requirements on the impl of `Component<Foo>` for `Foo` --> $DIR/issue-91594.rs:13:27 | LL | impl<M: HasComponent<()>> Component<M> for Foo { |                           ^^^^^^^^^^^^     ^^^ error: aborting due to previous error For more information about this error, try `rustc --explain E0277`. </ins>