Skip to content

error: internal compiler error: broken MIR in DefId #105821

Closed
@AuroransSolis

Description

@AuroransSolis

I'm back. This time I tried concatenating non-literal &'static strs.

Code

#![allow(incomplete_features)]
#![feature(adt_const_params, const_ptr_read, generic_const_exprs)]

use std::mem::ManuallyDrop;

const fn concat_strs<const A: &'static str, const B: &'static str>() -> &'static str
where
    [(); A.len()]:,
    [(); B.len()]:,
    [(); A.len() + B.len()]:,
{
    #[repr(C)]
    struct ConcatJoin<const N: usize, const M: usize> {
        left: [u8; N],
        right: [u8; M],
    }

    #[repr(C)]
    union ConcatJoiner<const N: usize, const M: usize>
    where
        [(); N + M]:,
    {
        whole: ManuallyDrop<[u8; N + M]>,
        split: ManuallyDrop<ConcatJoin<N, M>>,
    }

    const fn concat_arr<const M: usize, const N: usize>(a: [u8; M], b: [u8; N]) -> [u8; M + N]
    where
        [(); M + N]:,
    {
        unsafe {
            let joiner = ConcatJoiner {
                split: ManuallyDrop::new(ConcatJoin { left: a, right: b }),
            };
            let join = joiner.whole;
            ManuallyDrop::into_inner(join)
        }
    }

    struct Inner<const A: &'static str, const B: &'static str>;
    impl<const A: &'static str, const B: &'static str> Inner<A, B>
    where
        [(); A.len()]:,
        [(); B.len()]:,
        [(); A.len() + B.len()]:,
    {
        const ABSTR: &'static str = unsafe {
            std::str::from_utf8_unchecked(&concat_arr(
                A.as_ptr().cast::<[u8; A.len()]>().read(),
                B.as_ptr().cast::<[u8; B.len()]>().read(),
            ))
        };
    }

    Inner::<A, B>::ABSTR
}

const FOO: &str = "foo";
const BAR: &str = "bar";
const FOOBAR: &str = concat_strs::<FOO, BAR>();

Why? Excellent question, next please.

Meta

rustc --version --verbose:

rustc 1.68.0-nightly (9c07efe84 2022-12-16)
binary: rustc
commit-hash: 9c07efe84f28a44f3044237696acc295aa407ee5
commit-date: 2022-12-16
host: x86_64-unknown-linux-gnu
release: 1.68.0-nightly
LLVM version: 15.0.6

Error output

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

error: internal compiler error: broken MIR in DefId(0:41 ~ newice[4270]::concat_strs::{impl#0}::ABSTR) (NoSolution): could not prove Binder(WellFormed([(); _]), [])
  |
  = note: delayed at compiler/rustc_borrowck/src/type_check/canonical.rs:148:13

error: internal compiler error: broken MIR in DefId(0:41 ~ newice[4270]::concat_strs::{impl#0}::ABSTR) (NoSolution): could not prove Binder(WellFormed([u8; _]), [])
  --> src/lib.rs:50:17
   |
50 |                 B.as_ptr().cast::<[u8; B.len()]>().read(),
   |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: delayed at compiler/rustc_borrowck/src/type_check/canonical.rs:148:13

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1610:13
stack backtrace:
   0:     0x7f8a020b2d5a - std::backtrace_rs::backtrace::libunwind::trace::hf3e23dba944728e7
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7f8a020b2d5a - std::backtrace_rs::backtrace::trace_unsynchronized::ha7a661dbe14f9bec
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f8a020b2d5a - std::sys_common::backtrace::_print_fmt::h8bb3e793399a1d31
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x7f8a020b2d5a - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h8f001b4156af7ff0
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f89fe03f36e - core::fmt::write::h98c67bacb0ad9cb8
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/core/src/fmt/mod.rs:1208:17
   5:     0x7f8a020a6e35 - std::io::Write::write_fmt::h21d43ee83b8bf3da
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/io/mod.rs:1682:15
   6:     0x7f8a020b2b25 - std::sys_common::backtrace::_print::hed3e659c4722fff2
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:47:5
   7:     0x7f8a020b2b25 - std::sys_common::backtrace::print::hf3af686623d05885
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:34:9
   8:     0x7f8a020b4eaf - std::panicking::default_hook::{{closure}}::hfbc532e2813a4fd8
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/panicking.rs:267:22
   9:     0x7f8a020b4beb - std::panicking::default_hook::hf22d9a6bedeb8cbb
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/panicking.rs:286:9
  10:     0x7f8a012de351 - rustc_driver[8203396c4671b89c]::DEFAULT_HOOK::{closure#0}::{closure#0}
  11:     0x7f8a020b56ad - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h839d8563a5defb2f
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/alloc/src/boxed.rs:2032:9
  12:     0x7f8a020b56ad - std::panicking::rust_panic_with_hook::h2e7c62506c5adf89
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/panicking.rs:692:13
  13:     0x7f8a013174d1 - std[fecc2c98d64c5e20]::panicking::begin_panic::<rustc_errors[6c86e693eff69e36]::ExplicitBug>::{closure#0}
  14:     0x7f8a01315da6 - std[fecc2c98d64c5e20]::sys_common::backtrace::__rust_end_short_backtrace::<std[fecc2c98d64c5e20]::panicking::begin_panic<rustc_errors[6c86e693eff69e36]::ExplicitBug>::{closure#0}, !>
  15:     0x7f8a012f4d66 - std[fecc2c98d64c5e20]::panicking::begin_panic::<rustc_errors[6c86e693eff69e36]::ExplicitBug>
  16:     0x7f8a01313806 - std[fecc2c98d64c5e20]::panic::panic_any::<rustc_errors[6c86e693eff69e36]::ExplicitBug>
  17:     0x7f8a007cc906 - <rustc_errors[6c86e693eff69e36]::HandlerInner>::flush_delayed::<alloc[4e38580f0181725e]::vec::Vec<rustc_errors[6c86e693eff69e36]::diagnostic::Diagnostic>, &str>
  18:     0x7f8a005650ac - <rustc_interface[3feed755d27e3616]::passes::QueryContext>::enter::<<rustc_interface[3feed755d27e3616]::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core[4c48bf2e04a135c7]::result::Result<alloc[4e38580f0181725e]::boxed::Box<dyn core[4c48bf2e04a135c7]::any::Any>, rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  19:     0x7f8a00562586 - <rustc_interface[3feed755d27e3616]::queries::Queries>::ongoing_codegen
  20:     0x7f8a00561aa7 - <rustc_interface[3feed755d27e3616]::interface::Compiler>::enter::<rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}::{closure#2}, core[4c48bf2e04a135c7]::result::Result<core[4c48bf2e04a135c7]::option::Option<rustc_interface[3feed755d27e3616]::queries::Linker>, rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  21:     0x7f8a0055ca88 - rustc_span[b683b297262634fe]::with_source_map::<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  22:     0x7f8a0055c575 - <scoped_tls[b4ee55afb72dd1f]::ScopedKey<rustc_span[b683b297262634fe]::SessionGlobals>>::set::<rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  23:     0x7f8a0055bb62 - std[fecc2c98d64c5e20]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[3feed755d27e3616]::util::run_in_thread_pool_with_globals<rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  24:     0x7f8a00b9c1fe - <<std[fecc2c98d64c5e20]::thread::Builder>::spawn_unchecked_<rustc_interface[3feed755d27e3616]::util::run_in_thread_pool_with_globals<rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>::{closure#1} as core[4c48bf2e04a135c7]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  25:     0x7f8a020bc923 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::ha40757527af5f65d
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/alloc/src/boxed.rs:2000:9
  26:     0x7f8a020bc923 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf5bd55cd4ab92745
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/alloc/src/boxed.rs:2000:9
  27:     0x7f8a020bc923 - std::sys::unix::thread::Thread::new::thread_start::h087de3b4a94ba02b
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys/unix/thread.rs:108:17
  28:     0x7f89fdd6184a - <unknown>
  29:     0x7f89fdde03ec - <unknown>
  30:                0x0 - <unknown>
Backtrace

RUST_BACKTRACE=1:

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1610:13
stack backtrace:
   0: std::panicking::begin_panic::<rustc_errors::ExplicitBug>
   1: std::panic::panic_any::<rustc_errors::ExplicitBug>
   2: <rustc_errors::HandlerInner>::flush_delayed::<alloc::vec::Vec<rustc_errors::diagnostic::Diagnostic>, &str>
   3: <rustc_interface::passes::QueryContext>::enter::<<rustc_interface::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core::result::Result<alloc::boxed::Box<dyn core::any::Any>, rustc_errors::ErrorGuaranteed>>
   4: <rustc_interface::queries::Queries>::ongoing_codegen
   5: <rustc_interface::interface::Compiler>::enter::<rustc_driver::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_errors::ErrorGuaranteed>>
   6: 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}>
   7: <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>>

RUST_BACKTRACE=full

thread 'rustc' panicked at 'Box<dyn Any>', compiler/rustc_errors/src/lib.rs:1610:13
stack backtrace:
   0:     0x7f6a03216d5a - std::backtrace_rs::backtrace::libunwind::trace::hf3e23dba944728e7
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7f6a03216d5a - std::backtrace_rs::backtrace::trace_unsynchronized::ha7a661dbe14f9bec
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f6a03216d5a - std::sys_common::backtrace::_print_fmt::h8bb3e793399a1d31
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x7f6a03216d5a - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h8f001b4156af7ff0
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f69ff1a336e - core::fmt::write::h98c67bacb0ad9cb8
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/core/src/fmt/mod.rs:1208:17
   5:     0x7f6a0320ae35 - std::io::Write::write_fmt::h21d43ee83b8bf3da
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/io/mod.rs:1682:15
   6:     0x7f6a03216b25 - std::sys_common::backtrace::_print::hed3e659c4722fff2
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:47:5
   7:     0x7f6a03216b25 - std::sys_common::backtrace::print::hf3af686623d05885
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys_common/backtrace.rs:34:9
   8:     0x7f6a03218eaf - std::panicking::default_hook::{{closure}}::hfbc532e2813a4fd8
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/panicking.rs:267:22
   9:     0x7f6a03218beb - std::panicking::default_hook::hf22d9a6bedeb8cbb
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/panicking.rs:286:9
  10:     0x7f6a02442351 - rustc_driver[8203396c4671b89c]::DEFAULT_HOOK::{closure#0}::{closure#0}
  11:     0x7f6a032196ad - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h839d8563a5defb2f
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/alloc/src/boxed.rs:2032:9
  12:     0x7f6a032196ad - std::panicking::rust_panic_with_hook::h2e7c62506c5adf89
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/panicking.rs:692:13
  13:     0x7f6a0247b4d1 - std[fecc2c98d64c5e20]::panicking::begin_panic::<rustc_errors[6c86e693eff69e36]::ExplicitBug>::{closure#0}
  14:     0x7f6a02479da6 - std[fecc2c98d64c5e20]::sys_common::backtrace::__rust_end_short_backtrace::<std[fecc2c98d64c5e20]::panicking::begin_panic<rustc_errors[6c86e693eff69e36]::ExplicitBug>::{closure#0}, !>
  15:     0x7f6a02458d66 - std[fecc2c98d64c5e20]::panicking::begin_panic::<rustc_errors[6c86e693eff69e36]::ExplicitBug>
  16:     0x7f6a02477806 - std[fecc2c98d64c5e20]::panic::panic_any::<rustc_errors[6c86e693eff69e36]::ExplicitBug>
  17:     0x7f6a01930906 - <rustc_errors[6c86e693eff69e36]::HandlerInner>::flush_delayed::<alloc[4e38580f0181725e]::vec::Vec<rustc_errors[6c86e693eff69e36]::diagnostic::Diagnostic>, &str>
  18:     0x7f6a016c90ac - <rustc_interface[3feed755d27e3616]::passes::QueryContext>::enter::<<rustc_interface[3feed755d27e3616]::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core[4c48bf2e04a135c7]::result::Result<alloc[4e38580f0181725e]::boxed::Box<dyn core[4c48bf2e04a135c7]::any::Any>, rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  19:     0x7f6a016c6586 - <rustc_interface[3feed755d27e3616]::queries::Queries>::ongoing_codegen
  20:     0x7f6a016c5aa7 - <rustc_interface[3feed755d27e3616]::interface::Compiler>::enter::<rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}::{closure#2}, core[4c48bf2e04a135c7]::result::Result<core[4c48bf2e04a135c7]::option::Option<rustc_interface[3feed755d27e3616]::queries::Linker>, rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  21:     0x7f6a016c0a88 - rustc_span[b683b297262634fe]::with_source_map::<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  22:     0x7f6a016c0575 - <scoped_tls[b4ee55afb72dd1f]::ScopedKey<rustc_span[b683b297262634fe]::SessionGlobals>>::set::<rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  23:     0x7f6a016bfb62 - std[fecc2c98d64c5e20]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[3feed755d27e3616]::util::run_in_thread_pool_with_globals<rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>
  24:     0x7f6a01d001fe - <<std[fecc2c98d64c5e20]::thread::Builder>::spawn_unchecked_<rustc_interface[3feed755d27e3616]::util::run_in_thread_pool_with_globals<rustc_interface[3feed755d27e3616]::interface::run_compiler<core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>, rustc_driver[8203396c4671b89c]::run_compiler::{closure#1}>::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[4c48bf2e04a135c7]::result::Result<(), rustc_errors[6c86e693eff69e36]::ErrorGuaranteed>>::{closure#1} as core[4c48bf2e04a135c7]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  25:     0x7f6a03220923 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::ha40757527af5f65d
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/alloc/src/boxed.rs:2000:9
  26:     0x7f6a03220923 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hf5bd55cd4ab92745
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/alloc/src/boxed.rs:2000:9
  27:     0x7f6a03220923 - std::sys::unix::thread::Thread::new::thread_start::h087de3b4a94ba02b
                               at /rustc/9c07efe84f28a44f3044237696acc295aa407ee5/library/std/src/sys/unix/thread.rs:108:17
  28:     0x7f69feec584a - <unknown>
  29:     0x7f69fef443ec - <unknown>
  30:                0x0 - <unknown>

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-const-genericsArea: const generics (parameters and arguments)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-adt_const_params`#![feature(adt_const_params)]`F-generic_const_exprs`#![feature(generic_const_exprs)]`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.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions