Skip to content

ICE with (cyclic) default type params #34373

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
ipetkov opened this issue Jun 19, 2016 · 1 comment
Closed

ICE with (cyclic) default type params #34373

ipetkov opened this issue Jun 19, 2016 · 1 comment
Labels
E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@ipetkov
Copy link
Contributor

ipetkov commented Jun 19, 2016

Hit an ICE while working on a project, was able to reduce it to the following (nonsensical) example:

trait Trait<T> {
    fn foo(_: T) {}
} 

pub struct Foo<T = Box<Trait<DefaultFoo>>>;
type DefaultFoo = Foo;

Although an incorrect Rust program, this still triggers the ICE:

trait Trait {}
pub struct Foo<T = Box<Trait<DefaultFoo>>>;
type DefaultFoo = Foo;

The ICE can also be triggered by replacing Box with Rc or Arc for example.

Meta

rustc --version --verbose:
rustc 1.11.0-nightly (bb4a79b 2016-06-15)
binary: rustc
commit-hash: bb4a79b
commit-date: 2016-06-15
host: x86_64-apple-darwin
release: 1.11.0-nightly

Backtrace:

thread 'rustc' panicked at 'Box<Any>', ../src/libsyntax/errors/mod.rs:584
stack backtrace:
   1:        0x107cb40ab - std::sys::backtrace::tracing::imp::write::h6528da8103c51ab9
   2:        0x107cc0a5a - std::panicking::default_hook::_$u7b$$u7b$closure$u7d$$u7d$::hbe741a5cc3c49508
   3:        0x107cc058b - std::panicking::default_hook::he0146e6a74621cb4
   4:        0x107c86368 - std::panicking::rust_panic_with_hook::h983af77c1a2e581b
   5:        0x10507972a - std::panicking::begin_panic::hf9f206df23a555af
   6:        0x10507903c - syntax::errors::Handler::bug::hd25802f012f6858b
   7:        0x1043bf197 - rustc::session::opt_span_bug_fmt::_$u7b$$u7b$closure$u7d$$u7d$::h083e19915ee66466
   8:        0x1043befa3 - rustc::session::opt_span_bug_fmt::h157ddeb5b4622d22
   9:        0x1043d8ae9 - rustc::session::bug_fmt::h166f9667daf4dd54
  10:        0x1046d8d81 - rustc::ty::context::TyCtxt::intern_adt_def::h76d66d2283e5c94e
  11:        0x1037b74d2 - rustc_typeck::collect::type_scheme_of_item::h9364c34f50189fd8
  12:        0x1037a5732 - _<rustc_typeck..collect..ItemCtxt<'a, 'tcx> as rustc_typeck..astconv..AstConv<'tcx, 'tcx>>::get_item_type_scheme::h505a90fb8c62bbc9
  13:        0x10379049c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_path_to_ty::h0c07234d62095e09
  14:        0x1036e9597 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::finish_resolving_def_to_ty::h3d556a35b1618629
  15:        0x1036aaa6c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_ty_to_ty::ha1a7ce8fdda4c74c
  16:        0x1037b774f - rustc_typeck::collect::type_scheme_of_item::h9364c34f50189fd8
  17:        0x1037a5732 - _<rustc_typeck..collect..ItemCtxt<'a, 'tcx> as rustc_typeck..astconv..AstConv<'tcx, 'tcx>>::get_item_type_scheme::h505a90fb8c62bbc9
  18:        0x10379049c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_path_to_ty::h0c07234d62095e09
  19:        0x1036e9597 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::finish_resolving_def_to_ty::h3d556a35b1618629
  20:        0x1036aaa6c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_ty_to_ty::ha1a7ce8fdda4c74c
  21:        0x10378a404 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_ty_arg_to_ty::h438463517bb904f2
  22:        0x10378a01f - _<collections..vec..Vec<T> as core..iter..traits..FromIterator<T>>::from_iter::h46a990e2fe19f9c2
  23:        0x1037880f8 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::convert_angle_bracketed_parameters::h1f49a6121c527de7
  24:        0x10378f1c9 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::create_substs_for_ast_trait_ref::heeb85beb5dac98e0
  25:        0x10378cc4c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_path_to_poly_trait_ref::h36d8cef986cca0d1
  26:        0x1036e9657 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::finish_resolving_def_to_ty::h3d556a35b1618629
  27:        0x1036aaa6c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_ty_to_ty::ha1a7ce8fdda4c74c
  28:        0x10378a404 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_ty_arg_to_ty::h438463517bb904f2
  29:        0x10378a01f - _<collections..vec..Vec<T> as core..iter..traits..FromIterator<T>>::from_iter::h46a990e2fe19f9c2
  30:        0x1037880f8 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::convert_angle_bracketed_parameters::h1f49a6121c527de7
  31:        0x1036a835a - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_path_substs_for_ty::h99fc841f70fc46b6
  32:        0x1037905db - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_path_to_ty::h0c07234d62095e09
  33:        0x1036e9597 - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::finish_resolving_def_to_ty::h3d556a35b1618629
  34:        0x1036aaa6c - _<rustc_typeck..astconv..AstConv<'gcx, 'tcx> $u2b$$u20$$u27$o$GT$::ast_ty_to_ty::ha1a7ce8fdda4c74c
  35:        0x1037c08aa - rustc_typeck::collect::ty_generics::hdc04f67a20114e67
  36:        0x1037b750e - rustc_typeck::collect::type_scheme_of_item::h9364c34f50189fd8
  37:        0x1037af686 - rustc_typeck::collect::convert_typed_item::hc01d0f8d602c5ace
  38:        0x103798fb3 - rustc_typeck::collect::convert_item::hb084d39a484f5b45
  39:        0x1036721a5 - rustc_typeck::collect::collect_item_types::hf61e31ef852175cf
  40:        0x10366ed01 - rustc_typeck::check_crate::h9ad81a238efa1992
  41:        0x10320d600 - rustc_driver::driver::phase_3_run_analysis_passes::_$u7b$$u7b$closure$u7d$$u7d$::hd565ad56c5876a16
  42:        0x10320b8d0 - rustc::ty::context::TyCtxt::create_and_enter::habef58c7230d34f9
  43:        0x1031d5dc1 - rustc_driver::driver::compile_input::hfd60b020f6d0208d
  44:        0x1031c2b94 - rustc_driver::run_compiler::h884d01d12eb76bbb
  45:        0x1031bfb9f - std::panicking::try::call::hd72cf79141f67e60
  46:        0x107cc7b3b - __rust_try
  47:        0x107cc7ad5 - __rust_maybe_catch_panic
  48:        0x1031c06ab - _<F as alloc..boxed..FnBox<A>>::call_box::h589d2091babf223a
  49:        0x107cbf4d8 - std::sys::thread::Thread::new::thread_start::h9c883b6d445ece46
  50:     0x7fff9c3f699c - _pthread_body
  51:     0x7fff9c3f6919 - _pthread_start

error: internal compiler error: ../src/librustc/ty/context.rs:603: Tried to overwrite interned AdtDef: Foo
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: run with `RUST_BACKTRACE=1` for a backtrace
@apasel422 apasel422 added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Jun 20, 2016
@Mark-Simulacrum
Copy link
Member

This no longer ICEs, E-needstest.

error[E0391]: unsupported cyclic reference between types/traits detected
 --> test.rs:6:19
  |
6 | type DefaultFoo = Foo;
  |                   ^^^ cyclic reference
  |
note: the cycle begins when processing `Foo::T`...
 --> test.rs:5:16
  |
5 | pub struct Foo<T = Box<Trait<DefaultFoo>>>;
  |                ^
note: ...which then requires processing `DefaultFoo`...
 --> test.rs:5:30
  |
5 | pub struct Foo<T = Box<Trait<DefaultFoo>>>;
  |                              ^^^^^^^^^^
  = note: ...which then again requires processing `Foo::T`, completing the cycle.

error: aborting due to previous error

@Mark-Simulacrum Mark-Simulacrum added the E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. label May 6, 2017
Mark-Simulacrum added a commit to Mark-Simulacrum/rust that referenced this issue Jun 22, 2017
Add tests for a few issues.

Fixes rust-lang#41998
Fixes rust-lang#38381
Fixes rust-lang#37515
Fixes rust-lang#37510
Fixes rust-lang#37508
Fixes rust-lang#37366
Fixes rust-lang#37323
Fixes rust-lang#37051
Fixes rust-lang#36839
Fixes rust-lang#35570
Fixes rust-lang#34373
Fixes rust-lang#34222

Certainly not all of the E-needstest issues right now, but I started to get bored.
bors added a commit that referenced this issue Jun 24, 2017
Add tests for a few issues.

Fixes #41998
Fixes #38381
Fixes #37515
Fixes #37510
Fixes #37366
Fixes #37323
Fixes #37051
Fixes #36839
Fixes #35570
Fixes #34373
Fixes #34222

Certainly not all of the E-needstest issues right now, but I started to get bored.
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
E-needs-test Call for participation: An issue has been fixed and does not reproduce, but no test has been added. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

3 participants