Repository: rust
Issue: ice: infer: `None`
Labels: I-ICE,T-compiler,C-bug,A-parallel-queries,requires-nightly,WG-compiler-parallel

<!--
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.
http://blog.pnkfx.org/blog/2019/11/18/rust-bug-minimization-patterns/
-->

### Code

```Rust
fn no_err() {
    |x: u32, y| x;
    let _ = String::from("x");
}

fn err() {
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
}

fn arg_pat_closure_err() {
    |x| String::from("x".as_ref()); //~ ERROR type annotations needed
    //~| ERROR type annotations needed
}

fn local_pat_closure_err() {
    let _ = "x".as_ref(); //~ ERROR type annotations needed
}

fn err_first_arg_pat() {
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
    |x: String| x;
}

fn err_second_arg_pat() {
    |x: String| x;
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
}

fn err_mid_arg_pat() {
    |x: String| x;
    |x: String| x;
    |x: String| x;
    |x: String| x;
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
    |x: String| x;
    |x: String| x;
    |x: String| x;
    |x: String| x;
}

fn err_first_local_pat() {
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
    let _ = String::from("x");
}

fn err_second_local_pat() {
    let _ = String::from("x");
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
}

fn err_mid_local_pat() {
    let _ = String::from("x");
    let _ = String::from("x");
    let _ = String::from("x");
    let _ = String::from("x");
    String::from("x".as_ref()); //~ ERROR type annotations needed
    //~^ ERROR type annotations needed
    let _ = String::from("x");
    let _ = String::from("x");
    let _ = String::from("x");
    let _ = String::from("x");
}

fn main() {}
```


### Meta
<!--
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.
-->

`rustc --version --verbose`:
```
rustc 1.78.0-nightly (8ace7ea1f 2024-02-07)
binary: rustc
commit-hash: 8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6
commit-date: 2024-02-07
host: x86_64-unknown-linux-gnu
release: 1.78.0-nightly
LLVM version: 17.0.6
```

### Error output
`rustc -Zthreads=50 file.rs`
```
<output>
```

<!--
Include a backtrace in the code block by setting `RUST_BACKTRACE=1` in your
environment. E.g. `RUST_BACKTRACE=1 cargo build`.
-->
<details><summary><strong>Backtrace</strong></summary>
<p>

```
thread 'rustc' panicked at compiler/rustc_infer/src/infer/mod.rs:1278:45:
called `Option::unwrap()` on a `None` value
stack backtrace:
error[E0282]: type annotations needed
 --> /home/matthias/vcs/github/rust_misc_stuff/tests/ui/inference/icemaker_omni/83A8D26775DFE61B5ACEB8F5BBBCC9118160C06359A9F9CE6876FB0542C02E8B.rs:2:14
  |
2 |     |x: u32, y| x;
  |              ^
  |
help: consider giving this closure parameter an explicit type
  |
2 |     |x: u32, y: /* Type */| x;
  |               ++++++++++++

   0:     0x7f366b78bdd6 - std::backtrace_rs::backtrace::libunwind::trace::h3831425a8c62a633
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:     0x7f366b78bdd6 - std::backtrace_rs::backtrace::trace_unsynchronized::h2fc724c88ff08839
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f366b78bdd6 - std::sys_common::backtrace::_print_fmt::h95f916a0967460aa
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7f366b78bdd6 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h6cd68701047c0caa
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f366b7de830 - core::fmt::rt::Argument::fmt::h22a3e18db30b5f5c
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/core/src/fmt/rt.rs:142:9
   5:     0x7f366b7de830 - core::fmt::write::h51c6cab738a5636e
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/core/src/fmt/mod.rs:1120:17
   6:     0x7f366b77f64f - std::io::Write::write_fmt::h0e7b1c53ac5d599c
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/io/mod.rs:1854:15
   7:     0x7f366b78bbb4 - std::sys_common::backtrace::_print::he764b65827afec48
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7f366b78bbb4 - std::sys_common::backtrace::print::h226a34223202b222
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7f366b78e947 - std::panicking::default_hook::{{closure}}::h4c4a976f47b9412f
  10:     0x7f366b78e6a9 - std::panicking::default_hook::hc9a358e8ba986d56
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/panicking.rs:292:9
  11:     0x7f366e5461dc - std[73a469d20558648b]::panicking::update_hook::<alloc[2e68a68d8689d34a]::boxed::Box<rustc_driver_impl[f8352181a07c1cd]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7f366b78f096 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h78b006c40953b959
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/alloc/src/boxed.rs:2029:9
  13:     0x7f366b78f096 - std::panicking::rust_panic_with_hook::h6afbbd1388602f36
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/panicking.rs:785:13
  14:     0x7f366b78eda9 - std::panicking::begin_panic_handler::{{closure}}::h7a0fdbd05ed23de2
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/panicking.rs:651:13
  15:     0x7f366b78c2d6 - std::sys_common::backtrace::__rust_end_short_backtrace::h746afb5c969401c8
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/sys_common/backtrace.rs:171:18
  16:     0x7f366b78eb34 - rust_begin_unwind
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/panicking.rs:647:5
  17:     0x7f366b7daf35 - core::panicking::panic_fmt::h905601d0f533eda2
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/core/src/panicking.rs:72:14
  18:     0x7f366b7daff3 - core::panicking::panic::heeb173fb9d23c6e8
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/core/src/panicking.rs:144:5
  19:     0x7f366b7dac76 - core::option::unwrap_failed::h00f0c8f2574f719c
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/core/src/option.rs:1978:5
  20:     0x7f366e8116ab - <rustc_infer[7671e5ca5155ec05]::infer::InferCtxt>::tainted_by_errors
  21:     0x7f366f057dee - <rustc_infer[7671e5ca5155ec05]::infer::error_reporting::TypeErrCtxt as rustc_trait_selection[41b0846030f76e18]::traits::error_reporting::type_err_ctxt_ext::InferCtxtPrivExt>::maybe_report_ambiguity
  22:     0x7f366f02755d - <rustc_infer[7671e5ca5155ec05]::infer::error_reporting::TypeErrCtxt as rustc_trait_selection[41b0846030f76e18]::traits::error_reporting::type_err_ctxt_ext::TypeErrCtxtExt>::report_fulfillment_errors
  23:     0x7f366f99f94e - rustc_hir_typeck[a4b0ebaebf994b96]::typeck
  24:     0x7f366f99b425 - rustc_query_impl[b5308dd618a6aaad]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[b5308dd618a6aaad]::query_impl::typeck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[23db07fc9493ca4d]::query::erase::Erased<[u8; 8usize]>>
  25:     0x7f366f99a43a - rustc_query_system[822ffd8c0bece46]::query::plumbing::try_execute_query::<rustc_query_impl[b5308dd618a6aaad]::DynamicConfig<rustc_query_system[822ffd8c0bece46]::query::caches::VecCache<rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId, rustc_middle[23db07fc9493ca4d]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[b5308dd618a6aaad]::plumbing::QueryCtxt, false>
  26:     0x7f366f99a010 - rustc_query_impl[b5308dd618a6aaad]::query_impl::typeck::get_query_non_incr::__rust_end_short_backtrace
  27:     0x7f366f9997d6 - <rustc_middle[23db07fc9493ca4d]::hir::map::Map>::par_body_owners::<rustc_hir_analysis[994101d8878d4c5e]::check_crate::{closure#5}>::{closure#0}
  28:     0x7f366e611a7a - rayon[33b8fa4f0eaed63f]::iter::plumbing::bridge_producer_consumer::helper::<rayon[33b8fa4f0eaed63f]::slice::IterProducer<rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId>, rayon[33b8fa4f0eaed63f]::iter::for_each::ForEachConsumer<rustc_data_structures[36259d92a3c67969]::sync::parallel::enabled::par_for_each_in<&rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId, &[rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId], <rustc_middle[23db07fc9493ca4d]::hir::map::Map>::par_body_owners<rustc_hir_analysis[994101d8878d4c5e]::check_crate::{closure#5}>::{closure#0}>::{closure#0}::{closure#0}>>
  29:     0x7f366e62176f - rayon_core[5ca6c2e1d288545f]::join::join_context::<rayon[33b8fa4f0eaed63f]::iter::plumbing::bridge_producer_consumer::helper<rayon[33b8fa4f0eaed63f]::slice::IterProducer<rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId>, rayon[33b8fa4f0eaed63f]::iter::for_each::ForEachConsumer<rustc_data_structures[36259d92a3c67969]::sync::parallel::enabled::par_for_each_in<&rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId, &[rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId], <rustc_middle[23db07fc9493ca4d]::hir::map::Map>::par_body_owners<rustc_hir_analysis[994101d8878d4c5e]::check_crate::{closure#5}>::{closure#0}>::{closure#0}::{closure#0}>>::{closure#0}, rayon[33b8fa4f0eaed63f]::iter::plumbing::bridge_producer_consumer::helper<rayon[33b8fa4f0eaed63f]::slice::IterProducer<rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId>, rayon[33b8fa4f0eaed63f]::iter::for_each::ForEachConsumer<rustc_data_structures[36259d92a3c67969]::sync::parallel::enabled::par_for_each_in<&rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId, &[rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId], <rustc_middle[23db07fc9493ca4d]::hir::map::Map>::par_body_owners<rustc_hir_analysis[994101d8878d4c5e]::check_crate::{closure#5}>::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}, (), ()>::{closure#0}
  30:     0x7f366e611c19 - rayon[33b8fa4f0eaed63f]::iter::plumbing::bridge_producer_consumer::helper::<rayon[33b8fa4f0eaed63f]::slice::IterProducer<rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId>, rayon[33b8fa4f0eaed63f]::iter::for_each::ForEachConsumer<rustc_data_structures[36259d92a3c67969]::sync::parallel::enabled::par_for_each_in<&rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId, &[rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId], <rustc_middle[23db07fc9493ca4d]::hir::map::Map>::par_body_owners<rustc_hir_analysis[994101d8878d4c5e]::check_crate::{closure#5}>::{closure#0}>::{closure#0}::{closure#0}>>
  31:     0x7f366e634222 - <rayon_core[5ca6c2e1d288545f]::job::StackJob<rayon_core[5ca6c2e1d288545f]::latch::SpinLatch, rayon_core[5ca6c2e1d288545f]::join::join_context::call_b<(), rayon[33b8fa4f0eaed63f]::iter::plumbing::bridge_producer_consumer::helper<rayon[33b8fa4f0eaed63f]::slice::IterProducer<rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId>, rayon[33b8fa4f0eaed63f]::iter::for_each::ForEachConsumer<rustc_data_structures[36259d92a3c67969]::sync::parallel::enabled::par_for_each_in<&rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId, &[rustc_span[e47623fb3a0ceb98]::def_id::LocalDefId], <rustc_middle[23db07fc9493ca4d]::hir::map::Map>::par_body_owners<rustc_hir_analysis[994101d8878d4c5e]::check_crate::{closure#5}>::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}>::{closure#0}, ()> as rayon_core[5ca6c2e1d288545f]::job::Job>::execute
  32:     0x7f366e14ffc5 - <rayon_core[5ca6c2e1d288545f]::registry::WorkerThread>::wait_until_cold
  33:     0x7f366e14cab3 - <rayon_core[5ca6c2e1d288545f]::registry::ThreadBuilder>::run
  34:     0x7f366e547fd7 - <<crossbeam_utils[3cdb94695fbaee98]::thread::ScopedThreadBuilder>::spawn<<rayon_core[5ca6c2e1d288545f]::ThreadPoolBuilder>::build_scoped<rustc_interface[293475760fb3c74a]::util::run_in_thread_pool_with_globals<rustc_interface[293475760fb3c74a]::interface::run_compiler<core[fe50002e4d8ebebd]::result::Result<(), rustc_span[e47623fb3a0ceb98]::ErrorGuaranteed>, rustc_driver_impl[f8352181a07c1cd]::run_compiler::{closure#0}>::{closure#0}, core[fe50002e4d8ebebd]::result::Result<(), rustc_span[e47623fb3a0ceb98]::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}, rustc_interface[293475760fb3c74a]::util::run_in_thread_pool_with_globals<rustc_interface[293475760fb3c74a]::interface::run_compiler<core[fe50002e4d8ebebd]::result::Result<(), rustc_span[e47623fb3a0ceb98]::ErrorGuaranteed>, rustc_driver_impl[f8352181a07c1cd]::run_compiler::{closure#0}>::{closure#0}, core[fe50002e4d8ebebd]::result::Result<(), rustc_span[e47623fb3a0ceb98]::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#1}, core[fe50002e4d8ebebd]::result::Result<(), rustc_span[e47623fb3a0ceb98]::ErrorGuaranteed>>::{closure#0}::{closure#0}::{closure#0}, ()>::{closure#0} as core[fe50002e4d8ebebd]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  35:     0x7f366e53db8e - std[73a469d20558648b]::sys_common::backtrace::__rust_begin_short_backtrace::<alloc[2e68a68d8689d34a]::boxed::Box<dyn core[fe50002e4d8ebebd]::ops::function::FnOnce<(), Output = ()> + core[fe50002e4d8ebebd]::marker::Send>, ()>
  36:     0x7f366e547c73 - <<std[73a469d20558648b]::thread::Builder>::spawn_unchecked_<alloc[2e68a68d8689d34a]::boxed::Box<dyn core[fe50002e4d8ebebd]::ops::function::FnOnce<(), Output = ()> + core[fe50002e4d8ebebd]::marker::Send>, ()>::{closure#1} as core[fe50002e4d8ebebd]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  37:     0x7f366b798735 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hd5f2878fbdddc1bc
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/alloc/src/boxed.rs:2015:9
  38:     0x7f366b798735 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h843757700f5b7304
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/alloc/src/boxed.rs:2015:9
  39:     0x7f366b798735 - std::sys::pal::unix::thread::Thread::new::thread_start::h7e00931ca7a3dfa0
                               at /rustc/870a01a30e45d73b8e922a91850919e03f772636/library/std/src/sys/pal/unix/thread.rs:108:17
  40:     0x7f366b5839eb - <unknown>
  41:     0x7f366b6077cc - <unknown>
  42:                0x0 - <unknown>

error[E0283]: type annotations needed for `&T`
  --> /home/matthias/vcs/github/rust_misc_stuff/tests/ui/inference/icemaker_omni/83A8D26775DFE61B5ACEB8F5BBBCC9118160C06359A9F9CE6876FB0542C02E8B.rs:17:9
   |
17 |     let _ = "x".as_ref(); //~ ERROR type annotations needed
   |         ^       ------ type must be known at this point
   |
   = note: multiple `impl`s satisfying `str: AsRef<_>` found in the following crates: `core`, `std`:
           - impl AsRef<OsStr> for str;
           - impl AsRef<Path> for str;
           - impl AsRef<[u8]> for str;
           - impl AsRef<str> for str;
help: consider giving this pattern a type, where the type for type parameter `T` is specified
   |
17 |     let _: &T = "x".as_ref(); //~ ERROR type annotations needed
   |          ++++

error[E0283]: type annotations needed
  --> /home/matthias/vcs/github/rust_misc_stuff/tests/ui/inference/icemaker_omni/83A8D26775DFE61B5ACEB8F5BBBCC9118160C06359A9F9CE6876FB0542C02E8B.rs:12:26
   |
12 |     |x| String::from("x".as_ref()); //~ ERROR type annotations needed
   |                          ^^^^^^
   |
   = note: multiple `impl`s satisfying `str: AsRef<_>` found in the following crates: `core`, `std`:
           - impl AsRef<OsStr> for str;
           - impl AsRef<Path> for str;
           - impl AsRef<[u8]> for str;
           - impl AsRef<str> for str;
help: try using a fully qualified path to specify the expected types
   |
12 |     |x| String::from(<str as AsRef<T>>::as_ref("x")); //~ ERROR type annotations needed
   |                      ++++++++++++++++++++++++++   ~

error: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: please attach the file at `/tmp/rustc-ice-2024-02-08T12_24_12-2986714.txt` to your bug report

note: compiler flags: -Z threads=50

query stack during panic:
#0 [typeck] type-checking `err`
#1 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 3 previous errors

Some errors have detailed explanations: E0282, E0283.
For more information about an error, try `rustc --explain E0282`.
```

</p>
</details>