Skip to content

[ICE]: Broken MIR in drop glue with specialization #107228

Closed

Description

@Noratrieb

This requires -Zvalidate-mir

Code

#![feature(specialization)]

pub(crate) trait SpecTrait {
    type Assoc;
}

impl<C> SpecTrait for C {
    default type Assoc = Vec<Self>;
}

pub(crate) struct AssocWrap<C: SpecTrait> {
    _assoc: C::Assoc,
}

fn instantiate<C: SpecTrait>() -> AssocWrap<C> {
    loop {}
}

pub fn trigger() {
    instantiate::<()>();
}

Affected release channels

  • Previous Stable
  • Current Stable
  • Current Beta
  • Current Nightly

Rust Version

rustc 1.69.0-nightly (5e37043d6 2023-01-22)
binary: rustc
commit-hash: 5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d
commit-date: 2023-01-22
host: x86_64-unknown-linux-gnu
release: 1.69.0-nightly
LLVM version: 15.0.7

Current error output

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

error: internal compiler error: broken MIR in DropGlue(DefId(2:2154 ~ core[df84]::ptr::drop_in_place), Some(AssocWrap<()>)) (before pass AddMovesForPackedDrops) at bb4[0]:
                                Field projection `(*_1).field[0]` specified type `std::vec::Vec<()>`, but actual type is `<() as SpecTrait>::Assoc`

Backtrace

warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes
 --> aa.rs:1:12
  |
1 | #![feature(specialization)]
  |            ^^^^^^^^^^^^^^
  |
  = note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
  = help: consider using `min_specialization` instead, which is more stable and complete
  = note: `#[warn(incomplete_features)]` on by default

warning: 1 warning emitted

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

error: internal compiler error: broken MIR in DropGlue(DefId(2:2154 ~ core[df84]::ptr::drop_in_place), Some(AssocWrap<()>)) (before pass AddMovesForPackedDrops) at bb4[0]:
                                Field projection `(*_1).field[0]` specified type `std::vec::Vec<()>`, but actual type is `<() as SpecTrait>::Assoc`
   --> /home/nilsh/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:490:1
    |
490 | pub unsafe fn drop_in_place<T: ?Sized>(to_drop: *mut T) {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: delayed at    0: <rustc_errors::HandlerInner>::emit_diagnostic
               1: <rustc_errors::Handler>::delay_span_bug::<rustc_span::span_encoding::Span, &alloc::string::String>
               2: <rustc_const_eval::transform::validate::TypeChecker>::fail::<alloc::string::String>
               3: <rustc_const_eval::transform::validate::TypeChecker as rustc_middle::mir::visit::Visitor>::visit_place
               4: <rustc_const_eval::transform::validate::TypeChecker as rustc_middle::mir::visit::Visitor>::visit_terminator
               5: <rustc_const_eval::transform::validate::Validator as rustc_middle::mir::MirPass>::run_pass
               6: rustc_mir_transform::pass_manager::validate_body
               7: rustc_mir_transform::pass_manager::run_passes_inner
               8: rustc_mir_transform::shim::make_shim
               9: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::mir_shims, rustc_query_impl::plumbing::QueryCtxt>
              10: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_shims
              11: <rustc_middle::ty::context::TyCtxt>::instance_mir
              12: rustc_monomorphize::collector::collect_neighbours
              13: rustc_monomorphize::collector::collect_items_rec
              14: rustc_monomorphize::collector::collect_items_rec
              15: <rustc_session::session::Session>::time::<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}>
              16: rustc_monomorphize::collector::collect_crate_mono_items
              17: rustc_monomorphize::partitioning::collect_and_partition_mono_items
              18: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::collect_and_partition_mono_items, rustc_query_impl::plumbing::QueryCtxt>
              19: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::collect_and_partition_mono_items
              20: rustc_codegen_ssa::back::symbol_export::exported_symbols_provider_local
              21: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::exported_symbols, rustc_query_impl::plumbing::QueryCtxt>
              22: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::exported_symbols, rustc_query_impl::plumbing::QueryCtxt, rustc_middle::dep_graph::dep_node::DepKind>
              23: <rustc_metadata::rmeta::encoder::EncodeContext>::encode_crate_root
              24: rustc_metadata::rmeta::encoder::encode_metadata_impl
              25: rustc_data_structures::sync::join::<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>
              26: rustc_metadata::rmeta::encoder::encode_metadata
              27: rustc_metadata::fs::encode_and_write_metadata
              28: rustc_interface::passes::start_codegen
              29: <rustc_interface::queries::Queries>::ongoing_codegen
              30: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
              31: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
              32: 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_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
              33: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
              34: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/alloc/src/boxed.rs:1988:9
              35: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/alloc/src/boxed.rs:1988:9
              36: std::sys::unix::thread::Thread::new::thread_start
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/std/src/sys/unix/thread.rs:108:17
              37: start_thread
                         at ./nptl/./nptl/pthread_create.c:442:8
              38: clone3
                         at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81


error: internal compiler error: broken MIR in DropGlue(DefId(2:2154 ~ core[df84]::ptr::drop_in_place), Some(AssocWrap<()>)) (before pass AddMovesForPackedDrops) at bb5[0]:
                                Field projection `(*_1).field[0]` specified type `std::vec::Vec<()>`, but actual type is `<() as SpecTrait>::Assoc`
   --> /home/nilsh/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:490:1
    |
490 | pub unsafe fn drop_in_place<T: ?Sized>(to_drop: *mut T) {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: delayed at    0: <rustc_errors::HandlerInner>::emit_diagnostic
               1: <rustc_errors::Handler>::delay_span_bug::<rustc_span::span_encoding::Span, &alloc::string::String>
               2: <rustc_const_eval::transform::validate::TypeChecker>::fail::<alloc::string::String>
               3: <rustc_const_eval::transform::validate::TypeChecker as rustc_middle::mir::visit::Visitor>::visit_place
               4: <rustc_const_eval::transform::validate::TypeChecker as rustc_middle::mir::visit::Visitor>::visit_terminator
               5: <rustc_const_eval::transform::validate::Validator as rustc_middle::mir::MirPass>::run_pass
               6: rustc_mir_transform::pass_manager::validate_body
               7: rustc_mir_transform::pass_manager::run_passes_inner
               8: rustc_mir_transform::shim::make_shim
               9: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::mir_shims, rustc_query_impl::plumbing::QueryCtxt>
              10: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_shims
              11: <rustc_middle::ty::context::TyCtxt>::instance_mir
              12: rustc_monomorphize::collector::collect_neighbours
              13: rustc_monomorphize::collector::collect_items_rec
              14: rustc_monomorphize::collector::collect_items_rec
              15: <rustc_session::session::Session>::time::<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}>
              16: rustc_monomorphize::collector::collect_crate_mono_items
              17: rustc_monomorphize::partitioning::collect_and_partition_mono_items
              18: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::collect_and_partition_mono_items, rustc_query_impl::plumbing::QueryCtxt>
              19: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::collect_and_partition_mono_items
              20: rustc_codegen_ssa::back::symbol_export::exported_symbols_provider_local
              21: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::exported_symbols, rustc_query_impl::plumbing::QueryCtxt>
              22: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::exported_symbols, rustc_query_impl::plumbing::QueryCtxt, rustc_middle::dep_graph::dep_node::DepKind>
              23: <rustc_metadata::rmeta::encoder::EncodeContext>::encode_crate_root
              24: rustc_metadata::rmeta::encoder::encode_metadata_impl
              25: rustc_data_structures::sync::join::<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>
              26: rustc_metadata::rmeta::encoder::encode_metadata
              27: rustc_metadata::fs::encode_and_write_metadata
              28: rustc_interface::passes::start_codegen
              29: <rustc_interface::queries::Queries>::ongoing_codegen
              30: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
              31: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
              32: 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_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
              33: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
              34: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/alloc/src/boxed.rs:1988:9
              35: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/alloc/src/boxed.rs:1988:9
              36: std::sys::unix::thread::Thread::new::thread_start
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/std/src/sys/unix/thread.rs:108:17
              37: start_thread
                         at ./nptl/./nptl/pthread_create.c:442:8
              38: clone3
                         at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81


......



error: internal compiler error: broken MIR in DropGlue(DefId(2:2154 ~ core[df84]::ptr::drop_in_place), Some(AssocWrap<()>)) (after pass AbortUnwindingCalls) at bb0[0]:
                                Field projection `(*_1).field[0]` specified type `std::vec::Vec<()>`, but actual type is `<() as SpecTrait>::Assoc`
   --> /home/nilsh/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:490:1
    |
490 | pub unsafe fn drop_in_place<T: ?Sized>(to_drop: *mut T) {
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: delayed at    0: <rustc_errors::HandlerInner>::emit_diagnostic
               1: <rustc_errors::Handler>::delay_span_bug::<rustc_span::span_encoding::Span, &alloc::string::String>
               2: <rustc_const_eval::transform::validate::TypeChecker>::fail::<alloc::string::String>
               3: <rustc_const_eval::transform::validate::TypeChecker as rustc_middle::mir::visit::Visitor>::visit_place
               4: <rustc_const_eval::transform::validate::TypeChecker as rustc_middle::mir::visit::Visitor>::visit_terminator
               5: <rustc_const_eval::transform::validate::Validator as rustc_middle::mir::MirPass>::run_pass
               6: rustc_mir_transform::pass_manager::validate_body
               7: rustc_mir_transform::pass_manager::run_passes_inner
               8: rustc_mir_transform::shim::make_shim
               9: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::mir_shims, rustc_query_impl::plumbing::QueryCtxt>
              10: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_shims
              11: <rustc_middle::ty::context::TyCtxt>::instance_mir
              12: rustc_monomorphize::collector::collect_neighbours
              13: rustc_monomorphize::collector::collect_items_rec
              14: rustc_monomorphize::collector::collect_items_rec
              15: <rustc_session::session::Session>::time::<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}>
              16: rustc_monomorphize::collector::collect_crate_mono_items
              17: rustc_monomorphize::partitioning::collect_and_partition_mono_items
              18: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::collect_and_partition_mono_items, rustc_query_impl::plumbing::QueryCtxt>
              19: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::collect_and_partition_mono_items
              20: rustc_codegen_ssa::back::symbol_export::exported_symbols_provider_local
              21: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::queries::exported_symbols, rustc_query_impl::plumbing::QueryCtxt>
              22: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::exported_symbols, rustc_query_impl::plumbing::QueryCtxt, rustc_middle::dep_graph::dep_node::DepKind>
              23: <rustc_metadata::rmeta::encoder::EncodeContext>::encode_crate_root
              24: rustc_metadata::rmeta::encoder::encode_metadata_impl
              25: rustc_data_structures::sync::join::<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>
              26: rustc_metadata::rmeta::encoder::encode_metadata
              27: rustc_metadata::fs::encode_and_write_metadata
              28: rustc_interface::passes::start_codegen
              29: <rustc_interface::queries::Queries>::ongoing_codegen
              30: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
              31: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
              32: 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_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
              33: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
              34: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/alloc/src/boxed.rs:1988:9
              35: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/alloc/src/boxed.rs:1988:9
              36: std::sys::unix::thread::Thread::new::thread_start
                         at /rustc/5e37043d63bfe2f3be8fa5a05b07d6c0dad5775d/library/std/src/sys/unix/thread.rs:108:17
              37: start_thread
                         at ./nptl/./nptl/pthread_create.c:442:8
              38: clone3
                         at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81


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.69.0-nightly (5e37043d6 2023-01-22) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type lib -Z validate-mir

query stack during panic:
end of query stack

Anything else?

This requires -Zvalidate-mir!

Minimized out of #107051

Activity

  1. added
    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.
    C-bugCategory: This is a bug.
    requires-nightlyThis issue requires a nightly compiler in some way. When possible, use a F-* label instead.
    on Jan 23, 2023
  2. matthiaskrgr commented on Aug 3, 2023

    @matthiaskrgr
    Member

    Regression in nightly-2022-11-20

    commit[0] 2022-11-18: Auto merge of #104573 - matthiaskrgr:rollup-k36ybtp, r=matthiaskrgr
    commit[1] 2022-11-18: Auto merge of #104591 - Manishearth:rollup-b3ser4e, r=Manishearth
    commit[2] 2022-11-19: Auto merge of #97870 - eggyal:inplace_fold_spec, r=wesleywiser
    commit[3] 2022-11-19: Auto merge of #104600 - Dylan-DPC:rollup-glw1e8b, r=Dylan-DPC
    commit[4] 2022-11-19: Auto merge of #103509 - compiler-errors:opaques-w-bound-vars-r-hard, r=oli-obk
    commit[5] 2022-11-19: Auto merge of #104571 - clubby789:remove-vec-rc-opt, r=the8472
    commit[6] 2022-11-19: Auto merge of #104607 - matthiaskrgr:rollup-9s589me, r=matthiaskrgr
    commit[7] 2022-11-19: Auto merge of #102795 - lukas-code:constify-is-aligned-via-align-offset, r=oli-obk

  3. matthiaskrgr commented on Aug 23, 2023

    @matthiaskrgr
    Member

    might be fixed by #115005 ?

  4. JohnTitor commented on Oct 15, 2023

    @JohnTitor
    Member

    Fixed on the latest nightly, marking as E-needs-test (or, feel free to close if we have a sufficient regression test)
    @rustbot labels: +E-needs-test

  5. added
    E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.
    on Oct 15, 2023
  6. added 4 commits that reference this issue on Mar 23, 2024
  7. added a commit that references this issue on Mar 24, 2024
    bd19f30
  8. added a commit that references this issue on Mar 24, 2024
    39cf611
  9. added 2 commits that reference this issue on Mar 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-specializationArea: Trait impl specializationC-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-specialization`#![feature(specialization)]`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. When possible, use a F-* label instead.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions