Repository: rust
Issue: ICE: `underline_start >= 0 && underline_end >= 0`
Labels: A-diagnostics,I-ICE,T-compiler,C-bug,S-bug-has-test,F-generic_assert

<!--
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
#![feature(generic_assert)]
struct FloatWrapper(f64);

fn main() {
    assert!((0.0 / 0.0 >= 0.0) == (FloatWrapper(0.0 / 0.0) >= FloatWrapper(size_of::<u8>, size_of::<u16>, size_of::<usize> as fn() -> usize)))
}
```


### 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.84.0-nightly (9322d183f 2024-10-14)
binary: rustc
commit-hash: 9322d183f45e0fd5a509820874cc5ff27744a479
commit-date: 2024-10-14
host: x86_64-unknown-linux-gnu
release: 1.84.0-nightly
LLVM version: 19.1.1
```

### Error output

```
error[E0061]: this struct takes 1 argument but 3 arguments were supplied
 --> a.rs:5:63
  |
5 |     assert!((0.0 / 0.0 >= 0.0) == (FloatWrapper(0.0 / 0.0) >= FloatWrapper(size_of::<u8>, size_of::<u16>, size_of::<usize> as fn() -> usize)))
  |                                                               ^^^^^^^^^^^^                --------------  --------------------------------- unexpected argument #3 of type `fn() -> usize`
  |                                                                                           |
  |                                                                                           unexpected argument #2 of type `fn() -> usize {std::mem::size_of::<u16>}`
  |
note: expected `f64`, found fn item
 --> a.rs:5:5
  |
5 |     assert!((0.0 / 0.0 >= 0.0) == (FloatWrapper(0.0 / 0.0) >= FloatWrapper(size_of::<u8>, size_of::<u16>, size_of::<usize> as fn() -> usize)))
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  = note: expected type `f64`
          found fn item `fn() -> usize {std::mem::size_of::<u8>}`
note: tuple struct defined here
 --> a.rs:2:8
  |
2 | struct FloatWrapper(f64);
  |        ^^^^^^^^^^^^
  = note: this error originates in the macro `assert` (in Nightly builds, run with -Z macro-backtrace for more info)
```

<!--
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_errors/src/emitter.rs:2074:21:
assertion failed: underline_start >= 0 && underline_end >= 0
stack backtrace:
   0:     0x7439ed035e8a - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h9d42d62719d070d7
   1:     0x7439ed8038ca - core::fmt::write::he7a421eb4c9a9d75
   2:     0x7439eea24e11 - std::io::Write::write_fmt::h567af23beaa18959
   3:     0x7439ed035ce2 - std::sys::backtrace::BacktraceLock::print::h0f6e88707316b8f0
   4:     0x7439ed0381c6 - std::panicking::default_hook::{{closure}}::h51c0a9b7a1b27603
   5:     0x7439ed038010 - std::panicking::default_hook::h97535dc250d97546
   6:     0x7439ec07ff1f - std[c5cfba72dffabd2d]::panicking::update_hook::<alloc[4954ba58ed17d890]::boxed::Box<rustc_driver_impl[a8f60622b3234adb]::install_ice_hook::{closure#0}>>::{closure#0}
   7:     0x7439ed0388d8 - std::panicking::rust_panic_with_hook::h43f7938156b6bea8
   8:     0x7439ed038676 - std::panicking::begin_panic_handler::{{closure}}::hdd2070c285bd1cc7
   9:     0x7439ed036339 - std::sys::backtrace::__rust_end_short_backtrace::hfdc9b232972de0bd
  10:     0x7439ed03836c - rust_begin_unwind
  11:     0x7439ea9edb00 - core::panicking::panic_fmt::h283601b5555cf015
  12:     0x7439ea59e6bc - core::panicking::panic::hd6ba05c5efd2c5a1
  13:     0x7439ee4bcbf0 - <rustc_errors[de2df449d029e931]::emitter::HumanEmitter>::emit_messages_default
  14:     0x7439ee4aff87 - <rustc_errors[de2df449d029e931]::emitter::HumanEmitter as rustc_errors[de2df449d029e931]::emitter::Emitter>::emit_diagnostic
  15:     0x7439ee4ccc4f - <rustc_errors[de2df449d029e931]::DiagCtxtInner>::emit_diagnostic::{closure#3}
  16:     0x7439ee4f7e2c - rustc_interface[fc73b2d9c9b6253e]::callbacks::track_diagnostic::<core[7b8e24222d1ccc75]::option::Option<rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>
  17:     0x7439ee4f6965 - <rustc_errors[de2df449d029e931]::DiagCtxtInner>::emit_diagnostic
  18:     0x7439ee4f681f - <rustc_errors[de2df449d029e931]::DiagCtxtHandle>::emit_diagnostic
  19:     0x7439ee9f884b - <rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed as rustc_errors[de2df449d029e931]::diagnostic::EmissionGuarantee>::emit_producing_guarantee
  20:     0x7439ec3b1733 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::report_arg_errors
  21:     0x7439e9fb7139 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::confirm_builtin_call
  22:     0x7439ee283639 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  23:     0x7439ed8cacc7 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_overloaded_binop
  24:     0x7439ee285882 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  25:     0x7439ed8ca467 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_overloaded_binop
  26:     0x7439ee285882 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  27:     0x7439ee286b58 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  28:     0x7439e9fb013f - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::confirm_builtin_call
  29:     0x7439ee283639 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  30:     0x7439ee285fb2 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  31:     0x7439ee285a43 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  32:     0x7439ee27ddca - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_block_with_expected
  33:     0x7439ee283f68 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  34:     0x7439ee27ddca - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_block_with_expected
  35:     0x7439ee283f68 - <rustc_hir_typeck[14722519427fb7a4]::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  36:     0x7439ee24dd84 - rustc_hir_typeck[14722519427fb7a4]::check::check_fn
  37:     0x7439ee242257 - rustc_hir_typeck[14722519427fb7a4]::typeck
  38:     0x7439ee241bd3 - rustc_query_impl[d7a38008b76d7199]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[d7a38008b76d7199]::query_impl::typeck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[7cb4f182f827e3bf]::query::erase::Erased<[u8; 8usize]>>
  39:     0x7439edc6cf3a - rustc_query_system[65a76ee4bff6a1cf]::query::plumbing::try_execute_query::<rustc_query_impl[d7a38008b76d7199]::DynamicConfig<rustc_query_system[65a76ee4bff6a1cf]::query::caches::VecCache<rustc_span[fc5c94e8eafc8ab3]::def_id::LocalDefId, rustc_middle[7cb4f182f827e3bf]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[d7a38008b76d7199]::plumbing::QueryCtxt, false>
  40:     0x7439edc6bc8d - rustc_query_impl[d7a38008b76d7199]::query_impl::typeck::get_query_non_incr::__rust_end_short_backtrace
  41:     0x7439edc6b907 - <rustc_middle[7cb4f182f827e3bf]::hir::map::Map>::par_body_owners::<rustc_hir_analysis[d2a803a74dc0eae7]::check_crate::{closure#4}>::{closure#0}
  42:     0x7439edc6981b - rustc_hir_analysis[d2a803a74dc0eae7]::check_crate
  43:     0x7439edc66257 - rustc_interface[fc73b2d9c9b6253e]::passes::run_required_analyses
  44:     0x7439ee67e99e - rustc_interface[fc73b2d9c9b6253e]::passes::analysis
  45:     0x7439ee67e971 - rustc_query_impl[d7a38008b76d7199]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[d7a38008b76d7199]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[7cb4f182f827e3bf]::query::erase::Erased<[u8; 1usize]>>
  46:     0x7439ee6d7bee - rustc_query_system[65a76ee4bff6a1cf]::query::plumbing::try_execute_query::<rustc_query_impl[d7a38008b76d7199]::DynamicConfig<rustc_query_system[65a76ee4bff6a1cf]::query::caches::SingleCache<rustc_middle[7cb4f182f827e3bf]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[d7a38008b76d7199]::plumbing::QueryCtxt, false>
  47:     0x7439ee6d78cf - rustc_query_impl[d7a38008b76d7199]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  48:     0x7439ee5818de - rustc_interface[fc73b2d9c9b6253e]::interface::run_compiler::<core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>, rustc_driver_impl[a8f60622b3234adb]::run_compiler::{closure#0}>::{closure#1}
  49:     0x7439ee630294 - std[c5cfba72dffabd2d]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[fc73b2d9c9b6253e]::util::run_in_thread_with_globals<rustc_interface[fc73b2d9c9b6253e]::util::run_in_thread_pool_with_globals<rustc_interface[fc73b2d9c9b6253e]::interface::run_compiler<core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>, rustc_driver_impl[a8f60622b3234adb]::run_compiler::{closure#0}>::{closure#1}, core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>::{closure#0}, core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>
  50:     0x7439ee6306a8 - <<std[c5cfba72dffabd2d]::thread::Builder>::spawn_unchecked_<rustc_interface[fc73b2d9c9b6253e]::util::run_in_thread_with_globals<rustc_interface[fc73b2d9c9b6253e]::util::run_in_thread_pool_with_globals<rustc_interface[fc73b2d9c9b6253e]::interface::run_compiler<core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>, rustc_driver_impl[a8f60622b3234adb]::run_compiler::{closure#0}>::{closure#1}, core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>::{closure#0}, core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[7b8e24222d1ccc75]::result::Result<(), rustc_span[fc5c94e8eafc8ab3]::ErrorGuaranteed>>::{closure#1} as core[7b8e24222d1ccc75]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  51:     0x7439ee63116b - std::sys::pal::unix::thread::Thread::new::thread_start::h1588e535d4be38db
  52:     0x7439efd8a39d - <unknown>
  53:     0x7439efe0f49c - <unknown>
  54:                0x0 - <unknown>

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 make sure that you have updated to the latest nightly

note: please attach the file at `/tmp/im/rustc-ice-2024-10-15T21_38_35-464516.txt` to your bug report

query stack during panic:
#0 [typeck] type-checking `main`
#1 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0061`.
```

</p>
</details>