const-eval: always do full typed copies by RalfJung · Pull Request #149901 · rust-lang/rust (original) (raw)
---- [mir-opt] tests/mir-opt/pattern_types.rs stdout ----
------rustc stdout------------------------------
------rustc stderr------------------------------
warning: unused variable: `x`
##[warning] --> /checkout/tests/mir-opt/pattern_types.rs:9:9
|
9 | let x: pattern_type!(u32 is 1..) = unsafe { std::mem::transmute(2) };
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
= note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
warning: unused variable: `y`
##[warning] --> /checkout/tests/mir-opt/pattern_types.rs:11:9
|
11 | let y: pattern_type!(u32 is 1..) = unsafe { std::mem::transmute(0) };
| ^ help: if this is intentional, prefix it with an underscore: `_y`
warning: function `main` is never used
##[warning] --> /checkout/tests/mir-opt/pattern_types.rs:7:4
|
7 | fn main() {
| ^^^^
|
= note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
thread 'rustc' (30735) panicked at compiler/rustc_const_eval/src/util/check_validity_requirement.rs:192:41:
called `Result::unwrap()` on an `Err` value: InterpErrorInfo(InterpErrorInfoInner { kind: UndefinedBehavior(ValidationError(ValidationErrorInfo { path: None, kind: OutOfRange { value: "0", range: 1..=4294967295, max_value: 4294967295 } })), backtrace: InterpErrorBacktrace { backtrace: None } })
stack backtrace:
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: core::result::unwrap_failed
3: rustc_const_eval::util::check_validity_requirement::validate_scalar_in_layout
4: <rustc_const_eval::provide::{closure#3} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_middle::ty::consts::int::ScalarInt, rustc_middle::ty::Ty)>>::call_once
5: <rustc_middle::ty::print:🦋:FmtPrinter as rustc_middle::ty::print:🦋:PrettyPrinter>::pretty_print_const_scalar_int
6: <rustc_middle::ty::print:🦋:FmtPrinter as rustc_middle::ty::print:🦋:PrettyPrinter>::pretty_print_const_scalar
7: rustc_middle::mir:🦋:pretty_print_const_value_tcx
8: <rustc_middle::mir::consts::Const as core::fmt::Display>::fmt
9: core::fmt::write
10: <rustc_middle::mir::VarDebugInfoContents as core::fmt::Debug>::fmt
11: core::fmt::write
12: <rustc_middle::mir::VarDebugInfo as core::fmt::Debug>::fmt
13: core::fmt::write
14: alloc::fmt::format::format_inner
15: rustc_middle::mir:🦋:write_scope_tree
16: rustc_middle::mir:🦋:write_scope_tree
17: rustc_middle::mir:🦋:write_scope_tree
18: <rustc_middle::mir:🦋:MirWriter>::write_mir_fn
19: <rustc_middle::mir:🦋:MirDumper>::dump_mir_to_writer
20: <rustc_middle::mir:🦋:MirDumper>::dump_mir
21: rustc_mir_transform::pass_manager::run_passes_inner
22: rustc_mir_transform::run_optimization_passes
23: rustc_mir_transform::optimized_mir
[... omitted 2 frames ...]
24: <rustc_middle::ty::context::TyCtxt>::instance_mir
25: rustc_data_structures::sync::parallel::par_for_each_in::<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], <rustc_middle::ty::context::TyCtxt>::par_hir_body_owners<rustc_interface::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>
26: <rustc_session::session::Session>::time::<(), rustc_interface::passes::analysis::{closure#1}>
27: rustc_interface::passes::analysis
[... omitted 2 frames ...]
28: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<<rustc_middle::ty::context::GlobalCtxt>::enter<rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}, core::option::Option<rustc_interface::queries::Linker>>::{closure#1}, core::option::Option<rustc_interface::queries::Linker>>::{closure#0}, core::option::Option<rustc_interface::queries::Linker>>
29: <rustc_middle::ty::context::TyCtxt>::create_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}>
30: <rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2} as core::ops::function::FnOnce<(&rustc_session::session::Session, rustc_middle::ty::context::CurrentGcx, alloc::sync::Arc<rustc_data_structures::jobserver::Proxy>, &std::sync::once_lock::OnceLock<rustc_middle::ty::context::GlobalCtxt>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_middle::arena::Arena>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_hir::Arena>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2})>>::call_once::{shim:vtable#0}
31: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>
32: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
33: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>:📐:<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}::{closure#0}, ()>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: the compiler unexpectedly panicked. this is a bug.
note: using internal features is not supported and expected to cause internal compiler errors when used incorrectly
note: rustc 1.94.0-nightly (3fc493712 2025-12-12) running on x86_64-unknown-linux-gnu
note: compiler flags: -Z threads=1 -Z simulate-remapped-rust-src-base=/rustc/FAKE_PREFIX -Z translate-remapped-path-to-local-path=no -Z ignore-directory-in-diagnostics-source-blocks=/cargo -Z ignore-directory-in-diagnostics-source-blocks=/checkout/vendor -Z codegen-backend=gcc -C opt-level=1 -Z dump-mir=PreCodegen -Z validate-mir -Z lint-mir -Z dump-mir-exclude-pass-number -Z mir-include-spans=false --crate-type rlib -Z mir-opt-level=4 -Z mir-enable-passes=+ReorderBasicBlocks,+ReorderLocals -Z dump-mir-dir=/checkout/obj/build/x86_64-unknown-linux-gnu/test/mir-opt/pattern_types -C prefer-dynamic -C rpath -C debuginfo=0
query stack during panic:
#0 [optimized_mir] optimizing MIR for `main`
#1 [analysis] running analysis passes on crate `pattern_types`
end of query stack
warning: 3 warnings emitted
------------------------------------------
error: compilation failed!
status: exit status: 101
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/mir-opt/pattern_types.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "-Zcodegen-backend=gcc" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "-O" "-Copt-level=1" "-Zdump-mir=PreCodegen" "-Zvalidate-mir" "-Zlint-mir" "-Zdump-mir-exclude-pass-number" "-Zmir-include-spans=false" "--crate-type=rlib" "-Zmir-opt-level=4" "-Zmir-enable-passes=+ReorderBasicBlocks,+ReorderLocals" "-Zdump-mir-dir=/checkout/obj/build/x86_64-unknown-linux-gnu/test/mir-opt/pattern_types" "--emit" "mir" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/mir-opt/pattern_types" "-A" "internal_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0"
stdout: none
--- stderr -------------------------------
warning: unused variable: `x`
##[warning] --> /checkout/tests/mir-opt/pattern_types.rs:9:9
|
9 | let x: pattern_type!(u32 is 1..) = unsafe { std::mem::transmute(2) };
| ^ help: if this is intentional, prefix it with an underscore: `_x`
|
= note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
warning: unused variable: `y`
##[warning] --> /checkout/tests/mir-opt/pattern_types.rs:11:9
|
11 | let y: pattern_type!(u32 is 1..) = unsafe { std::mem::transmute(0) };
| ^ help: if this is intentional, prefix it with an underscore: `_y`
warning: function `main` is never used
##[warning] --> /checkout/tests/mir-opt/pattern_types.rs:7:4
|
7 | fn main() {
| ^^^^
|
= note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
thread 'rustc' (30735) panicked at compiler/rustc_const_eval/src/util/check_validity_requirement.rs:192:41:
called `Result::unwrap()` on an `Err` value: InterpErrorInfo(InterpErrorInfoInner { kind: UndefinedBehavior(ValidationError(ValidationErrorInfo { path: None, kind: OutOfRange { value: "0", range: 1..=4294967295, max_value: 4294967295 } })), backtrace: InterpErrorBacktrace { backtrace: None } })
stack backtrace:
0: __rustc::rust_begin_unwind
1: core::panicking::panic_fmt
2: core::result::unwrap_failed
3: rustc_const_eval::util::check_validity_requirement::validate_scalar_in_layout
4: <rustc_const_eval::provide::{closure#3} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_middle::ty::consts::int::ScalarInt, rustc_middle::ty::Ty)>>::call_once
5: <rustc_middle::ty::print:🦋:FmtPrinter as rustc_middle::ty::print:🦋:PrettyPrinter>::pretty_print_const_scalar_int
6: <rustc_middle::ty::print:🦋:FmtPrinter as rustc_middle::ty::print:🦋:PrettyPrinter>::pretty_print_const_scalar
7: rustc_middle::mir:🦋:pretty_print_const_value_tcx
8: <rustc_middle::mir::consts::Const as core::fmt::Display>::fmt
9: core::fmt::write
10: <rustc_middle::mir::VarDebugInfoContents as core::fmt::Debug>::fmt
11: core::fmt::write
12: <rustc_middle::mir::VarDebugInfo as core::fmt::Debug>::fmt
13: core::fmt::write
14: alloc::fmt::format::format_inner
15: rustc_middle::mir:🦋:write_scope_tree
16: rustc_middle::mir:🦋:write_scope_tree
17: rustc_middle::mir:🦋:write_scope_tree
18: <rustc_middle::mir:🦋:MirWriter>::write_mir_fn
19: <rustc_middle::mir:🦋:MirDumper>::dump_mir_to_writer
20: <rustc_middle::mir:🦋:MirDumper>::dump_mir
21: rustc_mir_transform::pass_manager::run_passes_inner
22: rustc_mir_transform::run_optimization_passes
23: rustc_mir_transform::optimized_mir
[... omitted 2 frames ...]
24: <rustc_middle::ty::context::TyCtxt>::instance_mir
25: rustc_data_structures::sync::parallel::par_for_each_in::<&rustc_span::def_id::LocalDefId, &[rustc_span::def_id::LocalDefId], <rustc_middle::ty::context::TyCtxt>::par_hir_body_owners<rustc_interface::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>
26: <rustc_session::session::Session>::time::<(), rustc_interface::passes::analysis::{closure#1}>
27: rustc_interface::passes::analysis
[... omitted 2 frames ...]
28: <std::thread::local::LocalKey<core::cell::Cell<*const ()>>>::with::<rustc_middle::ty::context::tls::enter_context<<rustc_middle::ty::context::GlobalCtxt>::enter<rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}, core::option::Option<rustc_interface::queries::Linker>>::{closure#1}, core::option::Option<rustc_interface::queries::Linker>>::{closure#0}, core::option::Option<rustc_interface::queries::Linker>>
29: <rustc_middle::ty::context::TyCtxt>::create_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2}::{closure#0}>
30: <rustc_interface::passes::create_and_enter_global_ctxt<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>::{closure#2} as core::ops::function::FnOnce<(&rustc_session::session::Session, rustc_middle::ty::context::CurrentGcx, alloc::sync::Arc<rustc_data_structures::jobserver::Proxy>, &std::sync::once_lock::OnceLock<rustc_middle::ty::context::GlobalCtxt>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_middle::arena::Arena>, &rustc_data_structures::sync::worker_local::WorkerLocal<rustc_hir::Arena>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2})>>::call_once::{shim:vtable#0}
31: rustc_interface::passes::create_and_enter_global_ctxt::<core::option::Option<rustc_interface::queries::Linker>, rustc_driver_impl::run_compiler::{closure#0}::{closure#2}>
32: rustc_interface::interface::run_compiler::<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}
33: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>:📐:<rustc_interface::util::run_in_thread_with_globals<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<(), rustc_driver_impl::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}::{closure#0}, ()>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: the compiler unexpectedly panicked. this is a bug.
note: using internal features is not supported and expected to cause internal compiler errors when used incorrectly
note: rustc 1.94.0-nightly (3fc493712 2025-12-12) running on x86_64-unknown-linux-gnu
note: compiler flags: -Z threads=1 -Z simulate-remapped-rust-src-base=/rustc/FAKE_PREFIX -Z translate-remapped-path-to-local-path=no -Z ignore-directory-in-diagnostics-source-blocks=/cargo -Z ignore-directory-in-diagnostics-source-blocks=/checkout/vendor -Z codegen-backend=gcc -C opt-level=1 -Z dump-mir=PreCodegen -Z validate-mir -Z lint-mir -Z dump-mir-exclude-pass-number -Z mir-include-spans=false --crate-type rlib -Z mir-opt-level=4 -Z mir-enable-passes=+ReorderBasicBlocks,+ReorderLocals -Z dump-mir-dir=/checkout/obj/build/x86_64-unknown-linux-gnu/test/mir-opt/pattern_types -C prefer-dynamic -C rpath -C debuginfo=0
query stack during panic:
#0 [optimized_mir] optimizing MIR for `main`
#1 [analysis] running analysis passes on crate `pattern_types`
end of query stack