Skip to content

ICE: cycle detected when computing function signature of  #110106

Closed
@bvanjoi

Description

@bvanjoi

Code

#![feature(inherent_associated_types)]
#![allow(incomplete_features)]

struct D<T> {
  a: T
}

impl<T: Default> D<T> {
    type Item = T;

    fn next() -> Self::Item {
        Self::Item::default()
    }
}


fn main() {
}

Meta

rustc --version --verbose:

rustc --version --verbose
rustc 1.70.0-nightly (af06dce64 2023-04-08)
binary: rustc
commit-hash: af06dce64bf87ea9206bdf6cff61c144b9ce8458
commit-date: 2023-04-08
host: aarch64-apple-darwin
release: 1.70.0-nightly
LLVM version: 16.0.2

Error output

warning: struct `D` is never constructed
 --> src/main.rs:4:8
  |
4 | struct D<T> {
  |        ^
  |
  = note: `#[warn(dead_code)]` on by default

warning: associated function `next` is never used
  --> src/main.rs:11:8
   |
11 |     fn next() -> Self::Item {
   |        ^^^^

error: internal compiler error: no errors encountered even though `delay_span_bug` issued

error: internal compiler error[E0391]: cycle detected when computing function signature of `<impl at src/main.rs:8:1: 8:22>::next`
  --> src/main.rs:11:5
   |
11 |     fn next() -> Self::Item {
   |     ^^^^^^^^^^^^^^^^^^^^^^^
   |
note: ...which requires computing the variances of `D`...
  --> src/main.rs:4:1
   |
4  | struct D<T> {
   | ^^^^^^^^^^^
   = note: ...which requires computing the variances for items in this crate...
   = note: ...which again requires computing function signature of `<impl at src/main.rs:8:1: 8:22>::next`, completing the cycle
note: cycle used when collecting item types in top-level module
  --> src/main.rs:1:1
   |
1  | / #![feature(inherent_associated_types)]
2  | | #![allow(incomplete_features)]
3  | |
4  | | struct D<T> {
...  |
17 | | fn main() {
18 | | }
   | |_^
Backtrace

delayed at    0: std::backtrace::Backtrace::create
              1: <rustc_errors::HandlerInner>::emit_diagnostic
              2: <rustc_span::ErrorGuaranteed as rustc_errors::diagnostic_builder::EmissionGuarantee>::diagnostic_builder_emit_producing_guarantee
              3: rustc_query_system::query::plumbing::mk_cycle::<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>
              4: rustc_query_system::query::plumbing::cycle_error::<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>
              5: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::fn_sig
              6: <rustc_hir_analysis::variance::constraints::ConstraintContext>::build_constraints_for_item
              7: rustc_hir_analysis::variance::constraints::add_constraints_from_crate
              8: rustc_hir_analysis::variance::crate_variances
              9: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::crate_variances, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
             10: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::crate_variances, rustc_query_impl::plumbing::QueryCtxt>
             11: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::crate_variances
             12: rustc_hir_analysis::variance::variances_of
             13: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::variances_of, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 16]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 16]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
             14: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::variances_of, rustc_query_impl::plumbing::QueryCtxt>
             15: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::variances_of
             16: <rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate_item_substs
             17: rustc_middle::ty::relate::super_relate_tys::<rustc_infer::infer::sub::Sub>
             18: <rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::tys
             19: <rustc_infer::infer::at::At>::sup::<rustc_middle::ty::Ty>
             20: <rustc_infer::infer::InferCtxt>::probe::<core::option::Option<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>)>, <dyn rustc_hir_analysis::astconv::AstConv>::lookup_inherent_assoc_ty::{closure#1}::{closure#3}::{closure#0}>
             21: <alloc::vec::Vec<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>)> as alloc::vec::spec_from_iter::SpecFromIter<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>), core::iter::adapters::filter_map::FilterMap<core::slice::iter::Iter<(rustc_span::def_id::DefId, (rustc_span::def_id::DefId, rustc_span::def_id::DefId))>, <dyn rustc_hir_analysis::astconv::AstConv>::lookup_inherent_assoc_ty::{closure#1}::{closure#3}>>>::from_iter
             22: <rustc_infer::infer::InferCtxt>::probe::<alloc::vec::Vec<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>)>, <dyn rustc_hir_analysis::astconv::AstConv>::lookup_inherent_assoc_ty::{closure#1}>
             23: <dyn rustc_hir_analysis::astconv::AstConv>::associated_path_to_ty::{closure#0}
             24: <dyn rustc_hir_analysis::astconv::AstConv>::ast_ty_to_ty_inner::{closure#0}
             25: <dyn rustc_hir_analysis::astconv::AstConv>::ty_of_fn::{closure#0}
             26: rustc_hir_analysis::collect::infer_return_ty_for_fn_sig
             27: rustc_hir_analysis::collect::fn_sig
             28: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 24]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 24]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
             29: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>
             30: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::fn_sig
             31: <rustc_hir_analysis::collect::CollectItemTypesVisitor as rustc_hir::intravisit::Visitor>::visit_impl_item
             32: <rustc_middle::hir::map::Map>::visit_item_likes_in_module::<rustc_hir_analysis::collect::CollectItemTypesVisitor>
             33: rustc_hir_analysis::collect::collect_mod_item_types
             34: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::collect_mod_item_types, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
             35: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::collect_mod_item_types, rustc_query_impl::plumbing::QueryCtxt>
             36: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::collect_mod_item_types
             37: <rustc_session::session::Session>::track_errors::<rustc_hir_analysis::check_crate::{closure#0}, ()>
             38: rustc_hir_analysis::check_crate
             39: rustc_interface::passes::analysis
             40: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::analysis, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 1]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 1]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
             41: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::analysis, rustc_query_impl::plumbing::QueryCtxt>
             42: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis
             43: <rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>>::enter::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}::{closure#2}::{closure#4}>
             44: <rustc_interface::interface::Compiler>::enter::<rustc_driver_impl::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
             45: rustc_span::set_source_map::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
             46: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
             47: std::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
             48: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
             49: std::sys::unix::thread::Thread::new::thread_start
             50: __pthread_deallocate
           

error: internal compiler error: TyKind::Error constructed but no error reported
  |
  = note: delayed at    0: std::backtrace::Backtrace::create
             1: <rustc_errors::HandlerInner>::emit_diagnostic
             2: <rustc_errors::Handler>::delay_span_bug::<rustc_span::span_encoding::Span, &str>
             3: <rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::FnSig> as rustc_query_system::values::Value<rustc_middle::ty::context::TyCtxt, rustc_middle::dep_graph::dep_node::DepKind>>::from_cycle_error
             4: <rustc_middle::ty::subst::EarlyBinder<rustc_middle::ty::sty::Binder<rustc_middle::ty::sty::FnSig>> as rustc_query_system::values::Value<rustc_middle::ty::context::TyCtxt, rustc_middle::dep_graph::dep_node::DepKind>>::from_cycle_error
             5: rustc_query_system::query::plumbing::mk_cycle::<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>
             6: rustc_query_system::query::plumbing::cycle_error::<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>
             7: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::fn_sig
             8: <rustc_hir_analysis::variance::constraints::ConstraintContext>::build_constraints_for_item
             9: rustc_hir_analysis::variance::constraints::add_constraints_from_crate
            10: rustc_hir_analysis::variance::crate_variances
            11: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::crate_variances, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 8]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
            12: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::crate_variances, rustc_query_impl::plumbing::QueryCtxt>
            13: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::crate_variances
            14: rustc_hir_analysis::variance::variances_of
            15: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::variances_of, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 16]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 16]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
            16: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::variances_of, rustc_query_impl::plumbing::QueryCtxt>
            17: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::variances_of
            18: <rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::relate_item_substs
            19: rustc_middle::ty::relate::super_relate_tys::<rustc_infer::infer::sub::Sub>
            20: <rustc_infer::infer::sub::Sub as rustc_middle::ty::relate::TypeRelation>::tys
            21: <rustc_infer::infer::at::At>::sup::<rustc_middle::ty::Ty>
            22: <rustc_infer::infer::InferCtxt>::probe::<core::option::Option<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>)>, <dyn rustc_hir_analysis::astconv::AstConv>::lookup_inherent_assoc_ty::{closure#1}::{closure#3}::{closure#0}>
            23: <alloc::vec::Vec<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>)> as alloc::vec::spec_from_iter::SpecFromIter<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>), core::iter::adapters::filter_map::FilterMap<core::slice::iter::Iter<(rustc_span::def_id::DefId, (rustc_span::def_id::DefId, rustc_span::def_id::DefId))>, <dyn rustc_hir_analysis::astconv::AstConv>::lookup_inherent_assoc_ty::{closure#1}::{closure#3}>>>::from_iter
            24: <rustc_infer::infer::InferCtxt>::probe::<alloc::vec::Vec<(rustc_span::def_id::DefId, rustc_span::def_id::DefId, &rustc_middle::ty::list::List<rustc_middle::ty::subst::GenericArg>)>, <dyn rustc_hir_analysis::astconv::AstConv>::lookup_inherent_assoc_ty::{closure#1}>
            25: <dyn rustc_hir_analysis::astconv::AstConv>::associated_path_to_ty::{closure#0}
            26: <dyn rustc_hir_analysis::astconv::AstConv>::ast_ty_to_ty_inner::{closure#0}
            27: <dyn rustc_hir_analysis::astconv::AstConv>::ty_of_fn::{closure#0}
            28: rustc_hir_analysis::collect::infer_return_ty_for_fn_sig
            29: rustc_hir_analysis::collect::fn_sig
            30: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 24]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 24]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
            31: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::fn_sig, rustc_query_impl::plumbing::QueryCtxt>
            32: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::fn_sig
            33: <rustc_hir_analysis::collect::CollectItemTypesVisitor as rustc_hir::intravisit::Visitor>::visit_impl_item
            34: <rustc_middle::hir::map::Map>::visit_item_likes_in_module::<rustc_hir_analysis::collect::CollectItemTypesVisitor>
            35: rustc_hir_analysis::collect::collect_mod_item_types
            36: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::collect_mod_item_types, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 0]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
            37: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::collect_mod_item_types, rustc_query_impl::plumbing::QueryCtxt>
            38: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::collect_mod_item_types
            39: <rustc_session::session::Session>::track_errors::<rustc_hir_analysis::check_crate::{closure#0}, ()>
            40: rustc_hir_analysis::check_crate
            41: rustc_interface::passes::analysis
            42: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<rustc_query_system::query::plumbing::execute_job_incr<rustc_query_impl::queries::analysis, rustc_query_impl::plumbing::QueryCtxt>::{closure#2}, (rustc_middle::query::erase::Erased<[u8; 1]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>::{closure#0}, (rustc_middle::query::erase::Erased<[u8; 1]>, rustc_query_system::dep_graph::graph::DepNodeIndex)>
            43: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::analysis, rustc_query_impl::plumbing::QueryCtxt>
            44: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::analysis
            45: <rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>>::enter::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}::{closure#2}::{closure#4}>
            46: <rustc_interface::interface::Compiler>::enter::<rustc_driver_impl::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
            47: rustc_span::set_source_map::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
            48: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
            49: std::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
            50: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
            51: std::sys::unix::thread::Thread::new::thread_start
            52: __pthread_deallocate

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-inherent_associated_types`#![feature(inherent_associated_types)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️I-cycleIssue: A query cycle occurred while none was expectedT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions