Closed
Description
I'm back. This time I tried concatenating non-literal &'static str
s.
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
Labels
Area: const generics (parameters and arguments)Category: This is a bug.Call for participation: An issue has been fixed and does not reproduce, but no test has been added.`#![feature(adt_const_params)]``#![feature(generic_const_exprs)]`Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Relevant to the compiler team, which will review and decide on the PR/issue.ICE tracked in rust-lang/glacier.