Change:
<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>

Discussion:
<!-- 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!

<!-- 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
No longer ICEs since

I get the following ICE with 1.51.0 stable (but not on nightly). The ICE can currently be reproduced on the [playground]. [playground]: (_%3A%20%26mut%20F)%0Awhere%0A%20%20%20%20F%3A%20FnMut()%2C%0A%7B%0A%7D%0A%0Afn%20main()%20%7B%0A%20%20%20%20let%20f%20%3D%20%7C%7C%20%7B%7D%3B%0A%20%20%20%20foo(%26mut%20f)%3B%0A%7D%0A <!-- 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. --: <details<summary<strongBacktrace</strong</summary<p</p</details
Even simpler: [playground]. [playground]: ()%20%7B%0A%20%20%20%20let%20f%20%3D%20%7C%7C%20%7B%7D%3B%0A%20%20%20%20drop(%26mut%20f)%3B%0A%7D%0A
This ICE also does not happen in the 1.52 beta.
Does not seem to ICE modify labels: E-needs-test