Skip to content

ICE when constructing monomorphic vtable in a static in dependent crate. #63226

@rodrimati1992

Description

@rodrimati1992

This is ICE happens when I call ROnce::new from the abi_stable crate in const contexts in dependent crates/doctests,
but not when using the ROnce::NEW associated constant.

Reproducing

It can be reproduced using a doctest in the playground:
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=27b35d06267adeacb7334388600c96be

It can also be reproduced by cloning this repository,and then build lib_1.

Code

The code for the linked repositories is :

lib_0:

pub struct VTable{ state:extern fn(), } impl VTable{ pub const fn vtable()->&'static VTable{ Self::VTABLE } const VTABLE: &'static VTable = &VTable{state}; } extern fn state(){ } 

lib_1:

use lib_0::VTable; static ICE_ICE:&'static VTable=VTable::vtable();

Error

This is the error message:

 Compiling lib_1 v0.1.0 (/home/matias/Documents/eclipse_workspace/tmp/const_fn_ice/lib_1) warning: static item is never used: `ICE_ICE` --> src/lib.rs:3:1 | 3 | static ICE_ICE:&'static VTable=VTable::vtable(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default error: internal compiler error: src/librustc_mir/monomorphize/collector.rs:778: Cannot create local mono-item for DefId(15:17 ~ lib_0[ce77]::state[0]) thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:644:9 stack backtrace: 0: backtrace::backtrace::libunwind::trace at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/src/backtrace/libunwind.rs:88 1: backtrace::backtrace::trace_unsynchronized at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/src/backtrace/mod.rs:66 2: std::sys_common::backtrace::_print at src/libstd/sys_common/backtrace.rs:47 3: std::sys_common::backtrace::print at src/libstd/sys_common/backtrace.rs:36 4: std::panicking::default_hook::{{closure}} at src/libstd/panicking.rs:200 5: std::panicking::default_hook at src/libstd/panicking.rs:214 6: rustc::util::common::panic_hook 7: core::ops::function::Fn::call 8: std::panicking::rust_panic_with_hook at src/libstd/panicking.rs:481 9: std::panicking::begin_panic 10: rustc_errors::Handler::bug 11: rustc::util::bug::opt_span_bug_fmt::{{closure}} 12: rustc::ty::context::tls::with_opt::{{closure}} 13: rustc::ty::context::tls::with_context_opt 14: rustc::ty::context::tls::with_opt 15: rustc::util::bug::opt_span_bug_fmt 16: rustc::util::bug::bug_fmt 17: rustc_mir::monomorphize::collector::should_monomorphize_locally 18: rustc_mir::monomorphize::collector::collect_miri 19: rustc_mir::monomorphize::collector::collect_miri 20: rustc_mir::monomorphize::collector::collect_const 21: rustc_mir::monomorphize::collector::collect_items_rec 22: rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}} 23: rustc::util::common::time 24: rustc_mir::monomorphize::collector::collect_crate_mono_items 25: rustc::util::common::time 26: rustc_mir::monomorphize::partitioning::collect_and_partition_mono_items 27: rustc::ty::query::__query_compute::collect_and_partition_mono_items 28: rustc::dep_graph::graph::DepGraph::with_task_impl 29: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query 30: rustc_codegen_ssa::back::symbol_export::exported_symbols_provider_local 31: rustc::ty::query::__query_compute::exported_symbols 32: rustc::dep_graph::graph::DepGraph::with_task_impl 33: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query 34: rustc_metadata::encoder::EncodeContext::encode_crate_root 35: rustc::dep_graph::graph::DepGraph::with_ignore 36: rustc_metadata::encoder::encode_metadata 37: rustc_metadata::cstore_impl::<impl rustc::middle::cstore::CrateStore for rustc_metadata::cstore::CStore>::encode_metadata 38: rustc::ty::context::TyCtxt::encode_metadata 39: rustc_interface::passes::encode_and_write_metadata 40: rustc::util::common::time 41: rustc_interface::passes::start_codegen 42: rustc::ty::context::tls::enter_global 43: rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}} 44: rustc_interface::passes::create_global_ctxt::{{closure}} 45: rustc_interface::passes::BoxedGlobalCtxt::enter 46: rustc_interface::queries::Query<T>::compute 47: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::ongoing_codegen 48: rustc_interface::interface::run_compiler_in_existing_thread_pool 49: std::thread::local::LocalKey<T>::with 50: syntax::with_globals note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. query stack during panic: #0 [collect_and_partition_mono_items] collect_and_partition_mono_items #1 [exported_symbols] exported_symbols end of query stack error: aborting due to previous error 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: rustc 1.38.0-nightly (435236b88 2019-08-01) running on i686-unknown-linux-gnu note: compiler flags: -C debuginfo=2 -C incremental --crate-type lib note: some of the compiler flags provided by cargo are hidden error: Could not compile `lib_1`. 

Metadata

Metadata

Assignees

Labels

A-codegenArea: Code generationA-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)C-bugCategory: This is a bug.E-easyCall for participation: Easy difficulty. Experience needed to fix: Not much. Good first issue.E-mentorCall for participation: This issue has a mentor. Use #t-compiler/help on Zulip for discussion.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-highHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions