Skip to content

ICE when lambda captures unsized local. #88212

Closed
@jesyspa

Description

@jesyspa

Code

This is a simplified example taken from the unstable rust book.

#![feature(unsized_locals)]

trait Example {}

struct Foo();

impl Example for Foo {}

fn example() -> Box<dyn Example> {
    Box::new(Foo())
}

fn main() {
    let x: dyn Example = *example();
    (move || {  // ERROR
        let _y = x;
    })();
}

Meta

I'm getting this both on my system's rustc:
rustc --version --verbose:

rustc 1.56.0-nightly (0035d9dce 2021-08-16)
binary: rustc
commit-hash: 0035d9dcecee49d1f7349932bfa52c05a6f83641
commit-date: 2021-08-16
host: x86_64-unknown-linux-gnu
release: 1.56.0-nightly
LLVM version: 12.0.1

and also the same issue on commit b6e334d.

Error output

From my dev build:

warning: the feature `unsized_locals` is incomplete and may not be safe to use and/or cause compiler crashes
 --> test.rs:1:12
  |
1 | #![feature(unsized_locals)]
  |            ^^^^^^^^^^^^^^
  |
  = note: `#[warn(incomplete_features)]` on by default
  = note: see issue #48055 <https://github.com/rust-lang/rust/issues/48055> for more information

error: internal compiler error: compiler/rustc_mir/src/interpret/eval_context.rs:659:18: size_and_align_of::<[[email protected]:15:5: 17:7]> not supported
  --> test.rs:14:9
   |
14 |     let x: dyn Example = *example();
   |         ^

thread 'rustc' panicked at 'Box<dyn Any>', /home/jesyspa/dev/rust/compiler/rustc_errors/src/lib.rs:1061:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.56.0-dev running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [optimized_mir] optimizing MIR for `main`
#1 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack
error: aborting due to previous error; 1 warning emitted
Backtrace

thread 'rustc' panicked at 'Box<dyn Any>', /home/jesyspa/dev/rust/compiler/rustc_errors/src/lib.rs:1061:9
stack backtrace:
   0: std::panicking::begin_panic
             at /home/jesyspa/dev/rust/library/std/src/panicking.rs:543:12
   1: std::panic::panic_any
             at /home/jesyspa/dev/rust/library/std/src/panic.rs:53:5
   2: rustc_errors::HandlerInner::span_bug
             at /home/jesyspa/dev/rust/compiler/rustc_errors/src/lib.rs:1061:9
   3: rustc_errors::Handler::span_bug
             at /home/jesyspa/dev/rust/compiler/rustc_errors/src/lib.rs:775:9
   4: rustc_middle::util::bug::opt_span_bug_fmt::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/util/bug.rs:33:40
   5: rustc_middle::ty::context::tls::with_opt::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1847:40
   6: rustc_middle::ty::context::tls::with_context_opt
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1799:22
   7: rustc_middle::ty::context::tls::with_opt
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1847:9
   8: rustc_middle::util::bug::opt_span_bug_fmt
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/util/bug.rs:30:5
   9: rustc_middle::util::bug::span_bug_fmt
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/util/bug.rs:21:5
  10: rustc_mir::interpret::eval_context::InterpCx<M>::size_and_align_of
  11: rustc_mir::interpret::place::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::force_allocation_maybe_sized
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/interpret/place.rs:921:45
  12: rustc_mir::interpret::place::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::force_allocation
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/interpret/place.rs:953:12
  13: rustc_mir::interpret::place::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::place_field
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/interpret/place.rs:547:22
  14: rustc_mir::interpret::place::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::place_projection
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/interpret/place.rs:585:32
  15: rustc_mir::interpret::place::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::eval_place
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/interpret/place.rs:610:24
  16: rustc_mir::interpret::step::<impl rustc_mir::interpret::eval_context::InterpCx<M>>::eval_rvalue_into_place
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/interpret/step.rs:160:20
  17: rustc_mir::transform::const_prop::ConstPropagator::const_prop::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/const_prop.rs:730:33
  18: rustc_mir::transform::const_prop::ConstPropagator::use_ecx
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/const_prop.rs:451:15
  19: rustc_mir::transform::const_prop::ConstPropagator::const_prop
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/const_prop.rs:730:13
  20: <rustc_mir::transform::const_prop::ConstPropagator as rustc_middle::mir::visit::MutVisitor>::visit_statement
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/const_prop.rs:1099:31
  21: rustc_middle::mir::visit::MutVisitor::super_basic_block_data
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/mir/visit.rs:312:21
  22: rustc_middle::mir::visit::MutVisitor::visit_basic_block_data
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/mir/visit.rs:84:17
  23: <rustc_mir::transform::const_prop::ConstPropagator as rustc_middle::mir::visit::MutVisitor>::visit_body
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/const_prop.rs:1073:13
  24: <rustc_mir::transform::const_prop::ConstProp as rustc_mir::transform::MirPass>::run_pass
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/const_prop.rs:151:9
  25: rustc_mir::transform::run_passes::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/mod.rs:195:9
  26: rustc_mir::transform::run_passes
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/mod.rs:211:13
  27: rustc_mir::transform::run_optimization_passes
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/mod.rs:558:5
  28: rustc_mir::transform::inner_optimized_mir
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/mod.rs:595:5
  29: rustc_mir::transform::optimized_mir
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/transform/mod.rs:573:21
  30: <rustc_query_impl::plumbing::QueryCtxt as rustc_query_system::query::QueryContext>::start_query::{{closure}}::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:137:17
  31: rustc_middle::ty::context::tls::enter_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1782:50
  32: rustc_middle::ty::context::tls::set_tlv
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1766:9
  33: rustc_middle::ty::context::tls::enter_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1782:9
  34: <rustc_query_impl::plumbing::QueryCtxt as rustc_query_system::query::QueryContext>::start_query::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:136:13
  35: rustc_middle::ty::context::tls::with_related_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1826:13
  36: rustc_middle::ty::context::tls::with_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1810:40
  37: rustc_middle::ty::context::tls::with_context_opt
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1799:22
  38: rustc_middle::ty::context::tls::with_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1810:9
  39: rustc_middle::ty::context::tls::with_related_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1823:9
  40: <rustc_query_impl::plumbing::QueryCtxt as rustc_query_system::query::QueryContext>::start_query
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:125:9
  41: rustc_query_system::query::plumbing::try_execute_query
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:462:22
  42: rustc_query_system::query::plumbing::get_query_impl
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:730:5
  43: rustc_query_system::query::plumbing::get_query
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:853:17
  44: rustc_middle::ty::query::TyCtxtAt::optimized_mir
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/query.rs:203:17
  45: rustc_middle::ty::query::<impl rustc_middle::ty::context::TyCtxt>::optimized_mir
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/query.rs:184:17
  46: rustc_middle::ty::<impl rustc_middle::ty::context::TyCtxt>::instance_mir
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/mod.rs:1857:21
  47: rustc_mir::monomorphize::collector::collect_neighbours
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/collector.rs:1394:16
  48: rustc_mir::monomorphize::collector::collect_items_rec::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/collector.rs:426:17
  49: stacker::maybe_grow
             at /home/jesyspa/.cargo/registry/src/github.com-1ecc6299db9ec823/stacker-0.1.12/src/lib.rs:55:9
  50: rustc_data_structures::stack::ensure_sufficient_stack
             at /home/jesyspa/dev/rust/compiler/rustc_data_structures/src/stack.rs:16:5
  51: rustc_mir::monomorphize::collector::collect_items_rec
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/collector.rs:425:13
  52: rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}}::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/collector.rs:307:17
  53: core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
             at /home/jesyspa/dev/rust/library/core/src/iter/traits/iterator.rs:730:29
  54: core::iter::traits::iterator::Iterator::fold
             at /home/jesyspa/dev/rust/library/core/src/iter/traits/iterator.rs:2170:21
  55: core::iter::traits::iterator::Iterator::for_each
             at /home/jesyspa/dev/rust/library/core/src/iter/traits/iterator.rs:733:9
  56: rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/collector.rs:305:13
  57: rustc_data_structures::profiling::VerboseTimingGuard::run
             at /home/jesyspa/dev/rust/compiler/rustc_data_structures/src/profiling.rs:611:9
  58: rustc_session::utils::<impl rustc_session::session::Session>::time
             at /home/jesyspa/dev/rust/compiler/rustc_session/src/utils.rs:16:9
  59: rustc_mir::monomorphize::collector::collect_crate_mono_items
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/collector.rs:304:9
  60: rustc_mir::monomorphize::partitioning::collect_and_partition_mono_items
             at /home/jesyspa/dev/rust/compiler/rustc_mir/src/monomorphize/partitioning/mod.rs:344:33
  61: rustc_query_system::query::plumbing::try_execute_query::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:462:55
  62: stacker::maybe_grow
             at /home/jesyspa/.cargo/registry/src/github.com-1ecc6299db9ec823/stacker-0.1.12/src/lib.rs:55:9
  63: rustc_data_structures::stack::ensure_sufficient_stack
             at /home/jesyspa/dev/rust/compiler/rustc_data_structures/src/stack.rs:16:5
  64: <rustc_query_impl::plumbing::QueryCtxt as rustc_query_system::query::QueryContext>::start_query::{{closure}}::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:137:17
  65: rustc_middle::ty::context::tls::enter_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1782:50
  66: rustc_middle::ty::context::tls::set_tlv
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1766:9
  67: rustc_middle::ty::context::tls::enter_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1782:9
  68: <rustc_query_impl::plumbing::QueryCtxt as rustc_query_system::query::QueryContext>::start_query::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:136:13
  69: rustc_middle::ty::context::tls::with_related_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1826:13
  70: rustc_middle::ty::context::tls::with_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1810:40
  71: rustc_middle::ty::context::tls::with_context_opt
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1799:22
  72: rustc_middle::ty::context::tls::with_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1810:9
  73: rustc_middle::ty::context::tls::with_related_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1823:9
  74: <rustc_query_impl::plumbing::QueryCtxt as rustc_query_system::query::QueryContext>::start_query
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:125:9
  75: rustc_query_system::query::plumbing::try_execute_query
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:462:22
  76: rustc_query_system::query::plumbing::get_query_impl
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:730:5
  77: rustc_query_system::query::plumbing::get_query
             at /home/jesyspa/dev/rust/compiler/rustc_query_system/src/query/plumbing.rs:853:17
  78: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::collect_and_partition_mono_items
             at /home/jesyspa/dev/rust/compiler/rustc_query_impl/src/plumbing.rs:563:17
  79: rustc_middle::ty::query::TyCtxtAt::collect_and_partition_mono_items
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/query.rs:203:17
  80: rustc_middle::ty::query::<impl rustc_middle::ty::context::TyCtxt>::collect_and_partition_mono_items
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/query.rs:184:17
  81: rustc_codegen_ssa::base::codegen_crate
             at /home/jesyspa/dev/rust/compiler/rustc_codegen_ssa/src/base.rs:518:25
  82: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate
             at /home/jesyspa/dev/rust/compiler/rustc_codegen_llvm/src/lib.rs:256:18
  83: rustc_interface::passes::start_codegen::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/passes.rs:1053:9
  84: rustc_data_structures::profiling::VerboseTimingGuard::run
             at /home/jesyspa/dev/rust/compiler/rustc_data_structures/src/profiling.rs:611:9
  85: rustc_session::utils::<impl rustc_session::session::Session>::time
             at /home/jesyspa/dev/rust/compiler/rustc_session/src/utils.rs:16:9
  86: rustc_interface::passes::start_codegen
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/passes.rs:1052:19
  87: rustc_interface::queries::Queries::ongoing_codegen::{{closure}}::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/queries.rs:254:20
  88: rustc_interface::passes::QueryContext::enter::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/passes.rs:779:42
  89: rustc_middle::ty::context::tls::enter_context::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1782:50
  90: rustc_middle::ty::context::tls::set_tlv
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1766:9
  91: rustc_middle::ty::context::tls::enter_context
             at /home/jesyspa/dev/rust/compiler/rustc_middle/src/ty/context.rs:1782:9
  92: rustc_interface::passes::QueryContext::enter
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/passes.rs:779:9
  93: rustc_interface::queries::Queries::ongoing_codegen::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/queries.rs:245:13
  94: rustc_interface::queries::Query<T>::compute
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/queries.rs:38:28
  95: rustc_interface::queries::Queries::ongoing_codegen
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/queries.rs:243:9
  96: rustc_driver::run_compiler::{{closure}}::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_driver/src/lib.rs:407:13
  97: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/queries.rs:390:19
  98: rustc_driver::run_compiler::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_driver/src/lib.rs:312:22
  99: rustc_interface::interface::create_compiler_and_run::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/interface.rs:209:13
 100: rustc_span::with_source_map
             at /home/jesyspa/dev/rust/compiler/rustc_span/src/lib.rs:911:5
 101: rustc_interface::interface::create_compiler_and_run
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/interface.rs:203:5
 102: rustc_interface::interface::run_compiler::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/interface.rs:225:12
 103: rustc_interface::util::setup_callbacks_and_run_in_thread_pool_with_globals::{{closure}}::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/util.rs:157:13
 104: scoped_tls::ScopedKey<T>::set
             at /home/jesyspa/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137:9
 105: rustc_span::create_session_globals_then
             at /home/jesyspa/dev/rust/compiler/rustc_span/src/lib.rs:105:5
 106: rustc_interface::util::setup_callbacks_and_run_in_thread_pool_with_globals::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/util.rs:155:9
 107: rustc_interface::util::scoped_thread::{{closure}}
             at /home/jesyspa/dev/rust/compiler/rustc_interface/src/util.rs:130:24
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

This looks interesting, so I'd be happy to see if I can fix it :)

@rustbot claim

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.F-unsized_locals`#![feature(unsized_locals)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.requires-nightlyThis issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions