rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
96.95k stars 12.53k forks source link

panic at debug model with "Span must not be empty and have no suggestion" #115248

Open thomasyonug opened 1 year ago

thomasyonug commented 1 year ago

This code will panic at debug mode, but not in release version:


struct S;
impl S {
    fn f(&self) -> &'static str {"s"}
}
fn g(s: &S) -> &str {
    s.f()
}

#[derive(Debug)]
struct S<'a> {
    x: &'a u32,
}
impl<'b> S<'b> {
    fn f(&self) -> &'static str {
        "hello"
    }
}
fn g(s: &S<'_>) -> &'static str {
    s.f()
}
```fn main() {}

I expected to see this happen: regular error report

Instead, this happened:

error: unknown start of token: `
   |
22 | ```fn main() {}
   | ^^^
   |
   = note: character appears 2 more times
help: Unicode character '`' (Grave Accent) looks like ''' (Single Quote), but it is not
   |
22 | '''fn main() {}
   | ~~~

error[E0428]: the name `g` is defined multiple times
   |
7  | fn g(s: &S) -> &str {
   | ------------------- previous definition of the value `g` here
...
19 | fn g(s: &S<'_>) -> &'static str {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `g` redefined here
   |
   = note: `g` must be defined only once in the value namespace of this module

error[E0428]: the name `S` is defined multiple times
   |
3  | struct S;
   | --------- previous definition of the type `S` here
...
11 | struct S<'a> {
   | ^^^^^^^^^^^^ `S` redefined here
   |
   = note: `S` must be defined only once in the type namespace of this module

thread 'rustc' panicked at /rust/compiler/rustc_errors/src/diagnostic.rs:706:9:
Span must not be empty and have no suggestion

Meta

commit id:

e286f25ec058276c2c83b809f18eaa7e3db52d99
Backtrace

``` thread 'rustc' panicked at /home/ywz/Ruzzing/rust/compiler/rustc_errors/src/diagnostic.rs:706:9: Span must not be empty and have no suggestion stack backtrace: 0: rust_begin_unwind at /rustc/439d066bcf9496b1b8c8dde8bef3bce607a621bb/library/std/src/panicking.rs:617:5 1: core::panicking::panic_fmt at /rustc/439d066bcf9496b1b8c8dde8bef3bce607a621bb/library/core/src/panicking.rs:67:14 2: rustc_errors::diagnostic::Diagnostic::span_suggestion_with_style at ./rust/compiler/rustc_errors/src/diagnostic.rs:706:9 3: rustc_errors::diagnostic::Diagnostic::span_suggestion at ./rust/compiler/rustc_errors/src/diagnostic.rs:687:9 4: rustc_hir_analysis::structured_errors::wrong_number_of_generic_args::WrongNumberOfGenericArgs::suggest_removing_args_or_generics at ./rust/compiler/rustc_hir_analysis/src/structured_errors/wrong_number_of_generic_args.rs:984:17 5: rustc_hir_analysis::structured_errors::wrong_number_of_generic_args::WrongNumberOfGenericArgs::suggest at ./rust/compiler/rustc_hir_analysis/src/structured_errors/wrong_number_of_generic_args.rs:555:21 6: ::diagnostic_common at ./rust/compiler/rustc_hir_analysis/src/structured_errors/wrong_number_of_generic_args.rs:1070:9 7: rustc_hir_analysis::structured_errors::StructuredDiagnostic::diagnostic at ./rust/compiler/rustc_hir_analysis/src/structured_errors.rs:18:19 8: rustc_hir_analysis::astconv::generics::check_generic_arg_count::{{closure}} at ./rust/compiler/rustc_hir_analysis/src/astconv/generics.rs:472:24 9: rustc_hir_analysis::astconv::generics::check_generic_arg_count at ./rust/compiler/rustc_hir_analysis/src/astconv/generics.rs:491:29 10: ::create_args_for_ast_path::{{closure}} at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:382:25 11: ::create_args_for_ast_path at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:349:5 12: ::ast_path_args_for_ty at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:301:25 13: ::ast_path_to_ty at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:912:20 14: ::res_to_ty at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:2172:17 15: ::ast_ty_to_ty_inner::{{closure}} at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:2452:17 16: ::ast_ty_to_ty_inner at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:2406:5 17: ::ast_ty_to_ty at ./rust/compiler/rustc_hir_analysis/src/astconv/mod.rs:2395:9 18: rustc_hir_analysis::collect::ItemCtxt::to_ty at ./rust/compiler/rustc_hir_analysis/src/collect.rs:344:9 19: rustc_hir_analysis::collect::type_of::type_of at ./rust/compiler/rustc_hir_analysis/src/collect/type_of.rs:425:26 20: rustc_query_impl::query_impl::type_of::dynamic_query::{{closure}}::{{closure}} at ./rust/compiler/rustc_query_impl/src/plumbing.rs:582:47 [... omitted 21 frames ...] 21: rustc_middle::query::plumbing::query_ensure at ./rust/compiler/rustc_middle/src/query/plumbing.rs:171:9 22: rustc_middle::query::::type_of at ./rust/compiler/rustc_middle/src/query/plumbing.rs:346:17 23: rustc_hir_analysis::collect::convert_item at ./rust/compiler/rustc_hir_analysis/src/collect.rs:587:13 24: ::visit_item at ./rust/compiler/rustc_hir_analysis/src/collect.rs:276:9 25: rustc_middle::hir::map::Map::visit_item_likes_in_module at ./rust/compiler/rustc_middle/src/hir/map/mod.rs:605:13 26: rustc_hir_analysis::collect::collect_mod_item_types at ./rust/compiler/rustc_hir_analysis/src/collect.rs:52:5 27: rustc_query_impl::query_impl::collect_mod_item_types::dynamic_query::{{closure}}::{{closure}} at ./rust/compiler/rustc_query_impl/src/plumbing.rs:582:47 [... omitted 21 frames ...] 28: rustc_middle::query::plumbing::query_ensure at ./rust/compiler/rustc_middle/src/query/plumbing.rs:171:9 29: rustc_middle::query::::collect_mod_item_types at ./rust/compiler/rustc_middle/src/query/plumbing.rs:346:17 30: rustc_hir_analysis::check_crate::{{closure}}::{{closure}}::{{closure}} at ./rust/compiler/rustc_hir_analysis/src/lib.rs:195:48 31: rustc_middle::hir::map::Map::for_each_module at ./rust/compiler/rustc_middle/src/hir/map/mod.rs:624:13 32: rustc_hir_analysis::check_crate::{{closure}}::{{closure}} at ./rust/compiler/rustc_hir_analysis/src/lib.rs:195:13 33: rustc_data_structures::profiling::VerboseTimingGuard::run at ./rust/compiler/rustc_data_structures/src/profiling.rs:752:9 34: rustc_session::utils::::time at ./rust/compiler/rustc_session/src/utils.rs:12:9 35: rustc_hir_analysis::check_crate::{{closure}} at ./rust/compiler/rustc_hir_analysis/src/lib.rs:194:9 36: rustc_session::session::Session::track_errors at ./rust/compiler/rustc_session/src/session.rs:626:22 37: rustc_hir_analysis::check_crate at ./rust/compiler/rustc_hir_analysis/src/lib.rs:193:5 38: rustc_interface::passes::analysis at ./rust/compiler/rustc_interface/src/passes.rs:761:5 39: rustc_query_impl::query_impl::analysis::dynamic_query::{{closure}}::{{closure}} at ./rust/compiler/rustc_query_impl/src/plumbing.rs:582:47 [... omitted 21 frames ...] 40: rustc_middle::query::plumbing::query_get_at at ./rust/compiler/rustc_middle/src/query/plumbing.rs:155:17 41: rustc_middle::query::::analysis at ./rust/compiler/rustc_middle/src/query/mod.rs:2213:1 42: rustc_middle::query::::analysis at ./rust/compiler/rustc_middle/src/query/plumbing.rs:376:35 43: rustc_driver_impl::run_compiler::{{closure}}::{{closure}}::{{closure}} at ./rust/compiler/rustc_driver_impl/src/lib.rs:442:52 44: rustc_middle::ty::context::GlobalCtxt::enter::{{closure}} at ./rust/compiler/rustc_middle/src/ty/context.rs:587:37 45: rustc_middle::ty::context::tls::enter_context::{{closure}} at ./rust/compiler/rustc_middle/src/ty/context/tls.rs:82:9 46: std::thread::local::LocalKey::try_with at /rustc/439d066bcf9496b1b8c8dde8bef3bce607a621bb/library/std/src/thread/local.rs:270:16 47: std::thread::local::LocalKey::with at /rustc/439d066bcf9496b1b8c8dde8bef3bce607a621bb/library/std/src/thread/local.rs:246:9 48: rustc_middle::ty::context::tls::enter_context at ./rust/compiler/rustc_middle/src/ty/context/tls.rs:79:9 49: rustc_middle::ty::context::GlobalCtxt::enter at ./rust/compiler/rustc_middle/src/ty/context.rs:587:9 50: rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>::enter at ./rust/compiler/rustc_interface/src/queries.rs:70:9 51: rustc_driver_impl::run_compiler::{{closure}}::{{closure}} at ./rust/compiler/rustc_driver_impl/src/lib.rs:442:13 52: rustc_interface::queries::::enter at ./rust/compiler/rustc_interface/src/queries.rs:406:19 53: rustc_driver_impl::run_compiler::{{closure}} at ./rust/compiler/rustc_driver_impl/src/lib.rs:383:22 54: rustc_interface::interface::run_compiler::{{closure}}::{{closure}} at ./rust/compiler/rustc_interface/src/interface.rs:339:21 55: rustc_span::set_source_map at ./rust/compiler/rustc_span/src/lib.rs:1042:5 56: rustc_interface::interface::run_compiler::{{closure}} at ./rust/compiler/rustc_interface/src/interface.rs:333:13 57: scoped_tls::ScopedKey::set at /home/ywz/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9 58: rustc_span::create_session_globals_then at ./rust/compiler/rustc_span/src/lib.rs:121:5 59: rustc_interface::util::run_in_thread_pool_with_globals::{{closure}}::{{closure}} at ./rust/compiler/rustc_interface/src/util.rs:163:38 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. ```

saethlin commented 1 year ago

I can't reproduce this. Can you confirm that this doesn't reproduce anymore?

Noratrieb commented 1 year ago

This requires debug assertions I think. (remove the label if im wrong)

saethlin commented 1 year ago

Can confirm, reproduces with debug assertions :+1: