Skip to content

ICE when existential type is exported from one crate and used in another #53443

Closed
@Arnavion

Description

@Arnavion
rustc 1.30.0-dev
binary: rustc
commit-hash: b5590423e6ceb048dd7d792382e960d66b7615d2
commit-date: 2018-08-16
host: x86_64-pc-windows-msvc
release: 1.30.0-dev
LLVM version: 7.0

a/Cargo.toml

[package]
name = "a"
version = "0.1.0"

a/src/lib.rs

#![feature(existential_type)]

pub existential type Foo: std::fmt::Debug;

pub fn foo() -> Foo {
	5
}

b/Cargo.toml

[package]
name = "b"
version = "0.1.0"

[dependencies]
a = { path = "../a" }

b/src/main.rs

extern crate a;

fn main() {
	let _ = a::foo();
}
ICE
thread 'main' panicked at 'librustc_resolve\build_reduced_graph.rs:741: unexpected definition: Existential(DefId(9/0:3))', librustc\util\bug.rs:47:26
stack backtrace:
   0: std::sys::windows::backtrace::unwind_backtrace
             at C:\Stuff\Sources\rustsrc\src\libstd\sys\windows\backtrace\mod.rs:95
   1: std::sys_common::backtrace::print
             at C:\Stuff\Sources\rustsrc\src\libstd\sys_common\backtrace.rs:59
   2: std::panicking::default_hook::{{closure}}
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:211
   3: std::panicking::default_hook
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:227
   4: rustc::util::common::panic_hook
             at C:\Stuff\Sources\rustsrc\src\librustc\util\common.rs:51
   5: std::panicking::rust_panic_with_hook
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:479
   6: std::panicking::begin_panic<alloc::string::String>
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:409
   7: rustc::util::bug::opt_span_bug_fmt::{{closure}}<syntax_pos::span_encoding::Span>
             at C:\Stuff\Sources\rustsrc\src\librustc\util\bug.rs:47
   8: rustc::ty::context::tls::with_opt::{{closure}}<closure,!>
             at C:\Stuff\Sources\rustsrc\src\librustc\ty\context.rs:2008
   9: rustc::ty::context::tls::with_context_opt<closure,!>
             at C:\Stuff\Sources\rustsrc\src\librustc\ty\context.rs:1939
  10: rustc::ty::context::tls::with_opt<closure,!>
             at C:\Stuff\Sources\rustsrc\src\librustc\ty\context.rs:2008
  11: rustc::util::bug::opt_span_bug_fmt<syntax_pos::span_encoding::Span>
             at C:\Stuff\Sources\rustsrc\src\librustc\util\bug.rs:42
  12: rustc::util::bug::bug_fmt
             at C:\Stuff\Sources\rustsrc\src\librustc\util\bug.rs:22
  13: rustc_resolve::Resolver::populate_module_if_necessary
             at C:\Stuff\Sources\rustsrc\src\librustc_resolve\build_reduced_graph.rs:813
  14: rustc_resolve::Resolver::build_reduced_graph_for_item
             at C:\Stuff\Sources\rustsrc\src\librustc_resolve\build_reduced_graph.rs:441
  15: rustc_resolve::build_reduced_graph::{{impl}}::visit_item
             at C:\Stuff\Sources\rustsrc\src\librustc_resolve\build_reduced_graph.rs:991
  16: syntax::visit::walk_item<rustc_resolve::build_reduced_graph::BuildReducedGraphVisitor>
             at C:\Stuff\Sources\rustsrc\src\libsyntax\visit.rs:245
  17: rustc_resolve::build_reduced_graph::{{impl}}::visit_item
             at C:\Stuff\Sources\rustsrc\src\librustc_resolve\build_reduced_graph.rs:992
  18: syntax::ext::expand::AstFragment::visit_with<rustc_resolve::build_reduced_graph::BuildReducedGraphVisitor>
             at C:\Stuff\Sources\rustsrc\src\libsyntax\ext\expand.rs:120
  19: rustc_resolve::macros::{{impl}}::visit_ast_fragment_with_placeholders
             at C:\Stuff\Sources\rustsrc\src\librustc_resolve\macros.rs:209
  20: syntax::ext::expand::MacroExpander::collect_invocations
             at C:\Stuff\Sources\rustsrc\src\libsyntax\ext\expand.rs:478
  21: syntax::ext::expand::MacroExpander::expand_fragment
             at C:\Stuff\Sources\rustsrc\src\libsyntax\ext\expand.rs:318
  22: syntax::ext::expand::MacroExpander::expand_crate
             at C:\Stuff\Sources\rustsrc\src\libsyntax\ext\expand.rs:292
  23: rustc_driver::driver::phase_2_configure_and_expand_inner::{{closure}}<closure>
             at C:\Stuff\Sources\rustsrc\src\librustc_driver\driver.rs:1006
  24: rustc::util::common::time<syntax::ast::Crate,closure>
             at C:\Stuff\Sources\rustsrc\src\librustc\util\common.rs:157
  25: rustc_driver::driver::phase_2_configure_and_expand<closure>
             at C:\Stuff\Sources\rustsrc\src\librustc_driver\driver.rs:764
  26: rustc_driver::driver::compile_input
             at C:\Stuff\Sources\rustsrc\src\librustc_driver\driver.rs:184
  27: rustc_driver::run_compiler_with_pool
             at C:\Stuff\Sources\rustsrc\src\librustc_driver\lib.rs:562
  28: scoped_tls::ScopedKey<syntax::Globals>::set<syntax::Globals,closure,(core::result::Result<(), rustc::session::CompileIncomplete>, core::option::Option<rustc::session::Session>)>
             at C:\Users\Arnavion\.cargo\registry\src\github.com-1ecc6299db9ec823\scoped-tls-0.1.2\src\lib.rs:155
  29: std::panic::{{impl}}::call_once<(),closure>
             at C:\Stuff\Sources\rustsrc\src\libstd\panic.rs:313
  30: panic_unwind::__rust_maybe_catch_panic
             at C:\Stuff\Sources\rustsrc\src\libpanic_unwind\lib.rs:102
  31: std::panicking::try<(),std::panic::AssertUnwindSafe<closure>>
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:289
  32: rustc_driver::run<closure>
             at C:\Stuff\Sources\rustsrc\src\librustc_driver\lib.rs:187
  33: rustc_driver::main
             at C:\Stuff\Sources\rustsrc\src\librustc_driver\lib.rs:1737
  34: std::rt::lang_start::{{closure}}<()>
             at C:\Stuff\Sources\rustsrc\src\libstd\rt.rs:74
  35: std::panicking::try::do_call<closure,i32>
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:310
  36: panic_unwind::__rust_maybe_catch_panic
             at C:\Stuff\Sources\rustsrc\src\libpanic_unwind\lib.rs:102
  37: std::panicking::try<i32,closure>
             at C:\Stuff\Sources\rustsrc\src\libstd\panicking.rs:289
  38: std::rt::lang_start_internal
             at C:\Stuff\Sources\rustsrc\src\libstd\rt.rs:58
  39: main
  40: __scrt_common_main_seh
             at f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:283
  41: BaseThreadInitThunk
  42: RtlUserThreadStart
query stack during panic:
end of query stack

error: internal compiler error: unexpected panic

_ => bug!("unexpected definition: {:?}", def)

Resolver::build_reduced_graph_for_external_crate_def needs an arm for Def::Existential ? @oli-obk


Edit: Easy playground repro

Metadata

Metadata

Assignees

Labels

A-impl-traitArea: `impl Trait`. Universally / existentially quantified anonymous types with static dispatch.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions