Closed
Description
Code
// Check that constants with interior mutability inside unions are rejected
// during validation.
//
// Note that this test case relies on undefined behaviour to construct a
// constant with interior mutability that is "invisible" to the static checks.
// If for some reason this approach no longer works, it is should be fine to
// remove the test case.
//
// build-fail
// stderr-per-bitwidth
#![feature(const_mut_refs)]
use std::cell::Cell;
use std::mem::ManuallyDrop;
#[repr(C)]
struct S {
x: u32,
y: E,
}
#[repr(u32)]
enum E {
A,
B(U)
}
union U {
cell: ManuallyDrop<Cell<u32>>,
}
const C: S = {
let s = S { x: 0, y: E::A };
// Go through an &u32 reference which is definitely not allowed to mutate anything.
let p = &s.x as *const u32 as *mut u32;
// Change enum tag to E::B.
unsafe { *p.add(1) = 1 };
s
};
fn main() { //~ ERROR it is undefined behavior to use this value
let _: &'static _ = &C; //~ ERROR erroneous constant used
//~^ WARN this was previously accepted
}
This happens with clippy clippy 0.1.65 (eaadb89 2022-08-27)
(master toolchain) but not with clippy nightly clippy 0.1.65 (c07a8b4 2022-08-26)
, since clippy was not updated in a week I strongly suspect that this is caused by some underlying rustc change :/
warning: variant `B` is never constructed
--> invalid-union.rs:25:5
|
23 | enum E {
| - variant in this enum
24 | A,
25 | B(U)
| ^
|
= note: `#[warn(dead_code)]` on by default
warning: field `cell` is never read
--> invalid-union.rs:29:5
|
28 | union U {
| - field in this union
29 | cell: ManuallyDrop<Cell<u32>>,
| ^^^^
thread 'rustc' panicked at 'normalization works on validated constants: InterpErrorInfo(InterpErrorInfoInner { kind: using uninitialized data, but this operation requires initialized memory, backtrace: None })', compiler/rustc_const_eval/src/const_eval/eval_queries.rs:136:36
stack backtrace:
0: 0x7ff41b9fc520 - std::backtrace_rs::backtrace::libunwind::trace::h1f37105be43a6ced
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
1: 0x7ff41b9fc520 - std::backtrace_rs::backtrace::trace_unsynchronized::hb4b9c2d184196576
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x7ff41b9fc520 - std::sys_common::backtrace::_print_fmt::h3f0d553949314bd7
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/sys_common/backtrace.rs:66:5
3: 0x7ff41b9fc520 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h39b07f730bb6a9d4
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/sys_common/backtrace.rs:45:22
4: 0x7ff41ba5724e - core::fmt::write::h56db6eaf035ee5bc
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/core/src/fmt/mod.rs:1202:17
5: 0x7ff41b9ed2b5 - std::io::Write::write_fmt::hdb2b15796d01739f
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/io/mod.rs:1672:15
6: 0x7ff41b9ff1e3 - std::sys_common::backtrace::_print::h107b12e8ee4b3787
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/sys_common/backtrace.rs:48:5
7: 0x7ff41b9ff1e3 - std::sys_common::backtrace::print::ha1362b333134c0ca
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/sys_common/backtrace.rs:35:9
8: 0x7ff41b9ff1e3 - std::panicking::default_hook::{{closure}}::h45225b21ea090e46
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/panicking.rs:295:22
9: 0x7ff41b9feecf - std::panicking::default_hook::hb1ecc4e16a8eec76
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/panicking.rs:314:9
10: 0x561cd1b4fdef - clippy_driver[756e4ebdfa4774ff]::ICE_HOOK::{closure#0}::{closure#0}
11: 0x7ff41b9ffa1d - std::panicking::rust_panic_with_hook::hce3d07342ecb6e24
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/panicking.rs:702:17
12: 0x7ff41b9ff877 - std::panicking::begin_panic_handler::{{closure}}::h1abbb6a787420726
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/panicking.rs:588:13
13: 0x7ff41b9fca3c - std::sys_common::backtrace::__rust_end_short_backtrace::hbbd088378c5d6279
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/sys_common/backtrace.rs:138:18
14: 0x7ff41b9ff592 - rust_begin_unwind
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/panicking.rs:584:5
15: 0x7ff41ba53d83 - core::panicking::panic_fmt::hbbf169a0329ab688
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/core/src/panicking.rs:142:14
16: 0x7ff41ba54103 - core::result::unwrap_failed::ha3373e8a9854af58
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/core/src/result.rs:1785:5
17: 0x7ff41dc2dc7d - rustc_const_eval[d1fb3b10c343a724]::const_eval::eval_queries::op_to_const
18: 0x7ff41ddac2c0 - <alloc[544ca457b09a5913]::vec::Vec<rustc_middle[eeb0489fdb81cdb3]::mir::ConstantKind> as alloc[544ca457b09a5913]::vec::spec_from_iter::SpecFromIter<rustc_middle[eeb0489fdb81cdb3]::mir::ConstantKind, core[a4f388abfe64fe23]::iter::adapters::GenericShunt<core[a4f388abfe64fe23]::iter::adapters::map::Map<core[a4f388abfe64fe23]::ops::range::Range<usize>, rustc_const_eval[d1fb3b10c343a724]::const_eval::try_destructure_mir_constant::{closure#0}>, core[a4f388abfe64fe23]::result::Result<core[a4f388abfe64fe23]::convert::Infallible, rustc_middle[eeb0489fdb81cdb3]::mir::interpret::error::InterpErrorInfo>>>>::from_iter
19: 0x7ff41df089a8 - rustc_const_eval[d1fb3b10c343a724]::const_eval::try_destructure_mir_constant
20: 0x7ff41df08717 - <rustc_const_eval[d1fb3b10c343a724]::provide::{closure#1} as core[a4f388abfe64fe23]::ops::function::FnOnce<(rustc_middle[eeb0489fdb81cdb3]::ty::context::TyCtxt, rustc_middle[eeb0489fdb81cdb3]::ty::ParamEnvAnd<rustc_middle[eeb0489fdb81cdb3]::mir::ConstantKind>)>>::call_once
21: 0x7ff41df098c8 - rustc_query_system[91bce7e2254c0a97]::query::plumbing::get_query::<rustc_query_impl[107a3a16776f9175]::queries::try_destructure_mir_constant, rustc_query_impl[107a3a16776f9175]::plumbing::QueryCtxt>
22: 0x7ff41df0942d - <rustc_query_impl[107a3a16776f9175]::Queries as rustc_middle[eeb0489fdb81cdb3]::ty::query::QueryEngine>::try_destructure_mir_constant
23: 0x7ff41cdf6176 - <rustc_middle[eeb0489fdb81cdb3]::ty::context::TyCtxt>::destructure_mir_constant
24: 0x561cd1deb75a - clippy_lints[33711be3d19c60f0]::non_copy_const::is_value_unfrozen_raw::inner
25: 0x561cd1deb7a0 - clippy_lints[33711be3d19c60f0]::non_copy_const::is_value_unfrozen_raw::inner
26: 0x561cd1deb7a0 - clippy_lints[33711be3d19c60f0]::non_copy_const::is_value_unfrozen_raw::inner
27: 0x561cd1debbd4 - <clippy_lints[33711be3d19c60f0]::non_copy_const::NonCopyConst as rustc_lint[9a62ef8746d748d7]::passes::LateLintPass>::check_item
28: 0x7ff41efa81a1 - <rustc_lint[9a62ef8746d748d7]::late::LateLintPassObjects as rustc_lint[9a62ef8746d748d7]::passes::LateLintPass>::check_item
29: 0x7ff41e2d0303 - <rustc_lint[9a62ef8746d748d7]::late::LateContextAndPass<rustc_lint[9a62ef8746d748d7]::late::LateLintPassObjects> as rustc_hir[d28af53393254686]::intravisit::Visitor>::visit_nested_item
30: 0x7ff41e2e7657 - rustc_hir[d28af53393254686]::intravisit::walk_mod::<rustc_lint[9a62ef8746d748d7]::late::LateContextAndPass<rustc_lint[9a62ef8746d748d7]::late::LateLintPassObjects>>
31: 0x7ff41e2cf173 - rustc_lint[9a62ef8746d748d7]::late::late_lint_pass_crate::<rustc_lint[9a62ef8746d748d7]::late::LateLintPassObjects>
32: 0x7ff41de8dba4 - rustc_lint[9a62ef8746d748d7]::late::late_lint_crate::<rustc_lint[9a62ef8746d748d7]::BuiltinCombinedLateLintPass>
33: 0x7ff41de8d126 - <rustc_session[b8c4a953f96b5b9c]::session::Session>::time::<(), rustc_lint[9a62ef8746d748d7]::late::check_crate<rustc_lint[9a62ef8746d748d7]::BuiltinCombinedLateLintPass, rustc_interface[3bb52438fbf2157c]::passes::analysis::{closure#5}::{closure#1}::{closure#2}::{closure#0}::{closure#0}>::{closure#0}::{closure#0}>
34: 0x7ff41de8d029 - <rustc_session[b8c4a953f96b5b9c]::session::Session>::time::<(), rustc_interface[3bb52438fbf2157c]::passes::analysis::{closure#5}::{closure#1}::{closure#2}::{closure#0}>
35: 0x7ff41de77cef - <core[a4f388abfe64fe23]::panic::unwind_safe::AssertUnwindSafe<rustc_interface[3bb52438fbf2157c]::passes::analysis::{closure#5}::{closure#1}> as core[a4f388abfe64fe23]::ops::function::FnOnce<()>>::call_once
36: 0x7ff41dc12ba6 - rustc_interface[3bb52438fbf2157c]::passes::analysis
37: 0x7ff41dfcc7af - rustc_query_system[91bce7e2254c0a97]::query::plumbing::try_execute_query::<rustc_query_impl[107a3a16776f9175]::plumbing::QueryCtxt, rustc_query_system[91bce7e2254c0a97]::query::caches::DefaultCache<(), core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>>
38: 0x7ff41dfcc4c0 - rustc_query_system[91bce7e2254c0a97]::query::plumbing::get_query::<rustc_query_impl[107a3a16776f9175]::queries::analysis, rustc_query_impl[107a3a16776f9175]::plumbing::QueryCtxt>
39: 0x7ff41db1457d - <rustc_interface[3bb52438fbf2157c]::passes::QueryContext>::enter::<rustc_driver[3b95325100af7080]::run_compiler::{closure#1}::{closure#2}::{closure#3}, core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>
40: 0x7ff41daff41e - <rustc_interface[3bb52438fbf2157c]::interface::Compiler>::enter::<rustc_driver[3b95325100af7080]::run_compiler::{closure#1}::{closure#2}, core[a4f388abfe64fe23]::result::Result<core[a4f388abfe64fe23]::option::Option<rustc_interface[3bb52438fbf2157c]::queries::Linker>, rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>
41: 0x7ff41dafa7dc - rustc_span[1be22e6d7ecbf06b]::with_source_map::<core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>, rustc_interface[3bb52438fbf2157c]::interface::create_compiler_and_run<core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>, rustc_driver[3b95325100af7080]::run_compiler::{closure#1}>::{closure#1}>
42: 0x7ff41dafa262 - rustc_interface[3bb52438fbf2157c]::interface::create_compiler_and_run::<core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>, rustc_driver[3b95325100af7080]::run_compiler::{closure#1}>
43: 0x7ff41daf8e01 - <scoped_tls[9975ea76ad39cd3f]::ScopedKey<rustc_span[1be22e6d7ecbf06b]::SessionGlobals>>::set::<rustc_interface[3bb52438fbf2157c]::interface::run_compiler<core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>, rustc_driver[3b95325100af7080]::run_compiler::{closure#1}>::{closure#0}, core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>
44: 0x7ff41daf8aef - std[39df21e20e19c219]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[3bb52438fbf2157c]::util::run_in_thread_pool_with_globals<rustc_interface[3bb52438fbf2157c]::interface::run_compiler<core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>, rustc_driver[3b95325100af7080]::run_compiler::{closure#1}>::{closure#0}, core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>::{closure#0}, core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>
45: 0x7ff41e06b899 - <<std[39df21e20e19c219]::thread::Builder>::spawn_unchecked_<rustc_interface[3bb52438fbf2157c]::util::run_in_thread_pool_with_globals<rustc_interface[3bb52438fbf2157c]::interface::run_compiler<core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>, rustc_driver[3b95325100af7080]::run_compiler::{closure#1}>::{closure#0}, core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>::{closure#0}, core[a4f388abfe64fe23]::result::Result<(), rustc_errors[1320dabcf4b25fef]::ErrorGuaranteed>>::{closure#1} as core[a4f388abfe64fe23]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
46: 0x7ff41ba09643 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h267264e81121a930
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/alloc/src/boxed.rs:1940:9
47: 0x7ff41ba09643 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h36d685e1b4755ccb
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/alloc/src/boxed.rs:1940:9
48: 0x7ff41ba09643 - std::sys::unix::thread::Thread::new::thread_start::h22e88d4eed15a26d
at /rustc/eaadb8947b850a025404082f6297766c4680a42a/library/std/src/sys/unix/thread.rs:108:17
49: 0x7ff41b66978d - <unknown>
50: 0x7ff41b6ea8e4 - clone
51: 0x0 - <unknown>
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust-clippy/issues/new
note: Clippy version: clippy 0.1.65 (eaadb89 2022-08-27)
query stack during panic:
#0 [try_destructure_mir_constant] destructuring mir constant
#1 [analysis] running analysis passes on this crate
end of query stack
warning: 2 warnings emitted