rust icon indicating copy to clipboard operation
rust copied to clipboard

ICE `non-Aggregate field with matching ABI but differing alignment`

Open matthiaskrgr opened this issue 6 months ago • 1 comments

auto-reduced (treereduce-rust):

#[repr(packed)]
#[repr(u32)]
enum E {
    A,
    B,
    C,
}

fn main() {
    union InvalidTag {
        int: u32,
        e: E,
    }
    let _invalid_tag = InvalidTag { int: 4 };
}


original:

// Regression test for issue 123710.
// Tests that the we do not ICE in KnownPanicsLint
// when a union contains an enum with an repr(packed),
// which is a repr not supported for enums

#[repr(packed)]
//~^ ERROR attribute should be applied to a struct or union
#[repr(u32)]
enum E {
    A,
    B,
    C,
}

fn main() {
    union InvalidTag {
        int: u32,
        e: E,
//~^ ERROR field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be used in a union
    }
    let _invalid_tag = InvalidTag { int: 4 };
}

Version information

rustc 1.82.0-nightly (97e72524a 2024-08-09)
binary: rustc
commit-hash: 97e72524a34994541810438258115802f8b85543
commit-date: 2024-08-09
host: x86_64-unknown-linux-gnu
release: 1.82.0-nightly
LLVM version: 19.1.0

Command: /home/matthias/.rustup/toolchains/master/bin/rustc -Zvalidate-mir

Program output

error[E0517]: attribute should be applied to a struct or union
 --> /tmp/icemaker_global_tempdir.iOHXDC03JcDS/rustc_testrunner_tmpdir_reporting.IwiBfGzE7qtZ/mvce.rs:1:8
  |
1 |   #[repr(packed)]
  |          ^^^^^^
2 |   #[repr(u32)]
3 | / enum E {
4 | |     A,
5 | |     B,
6 | |     C,
7 | | }
  | |_- not a struct or union

error[E0740]: field must implement `Copy` or be wrapped in `ManuallyDrop<...>` to be used in a union
  --> /tmp/icemaker_global_tempdir.iOHXDC03JcDS/rustc_testrunner_tmpdir_reporting.IwiBfGzE7qtZ/mvce.rs:12:9
   |
12 |         e: E,
   |         ^^^^
   |
   = note: union fields must not have drop side-effects, which is currently enforced via either `Copy` or `ManuallyDrop<...>`
help: wrap the field type in `ManuallyDrop<...>`
   |
12 |         e: std::mem::ManuallyDrop<E>,
   |            +++++++++++++++++++++++ +

thread 'rustc' panicked at /rustc/97e72524a34994541810438258115802f8b85543/compiler/rustc_abi/src/layout.rs:287:29:
assertion `left == right` failed: non-Aggregate field with matching ABI but differing alignment
  left: Align(4 bytes)
 right: Align(1 bytes)
stack backtrace:
   0:     0x7b1c4dc78c9d - std::backtrace_rs::backtrace::libunwind::trace::h6d8f9caaadd7fb58
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1:     0x7b1c4dc78c9d - std::backtrace_rs::backtrace::trace_unsynchronized::h17be7deb44f4a166
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7b1c4dc78c9d - std::sys::backtrace::_print_fmt::h9644a3e199661ff7
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/sys/backtrace.rs:66:9
   3:     0x7b1c4dc78c9d - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h19f5bb40323ef90a
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/sys/backtrace.rs:39:26
   4:     0x7b1c4dcc942b - core::fmt::rt::Argument::fmt::h04004c0c7b9c8c68
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/core/src/fmt/rt.rs:173:76
   5:     0x7b1c4dcc942b - core::fmt::write::h038b15e88d4c08dd
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/core/src/fmt/mod.rs:1178:21
   6:     0x7b1c4dc6cb33 - std::io::Write::write_fmt::h336c1ed0f6805c7d
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/io/mod.rs:1823:15
   7:     0x7b1c4dc7b492 - std::sys::backtrace::BacktraceLock::print::h32f152afdca981eb
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/sys/backtrace.rs:42:9
   8:     0x7b1c4dc7b492 - std::panicking::default_hook::{{closure}}::h2a41f7f3fcf3abf5
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/panicking.rs:266:22
   9:     0x7b1c4dc7b0fe - std::panicking::default_hook::h83a4d780a2fde4cb
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/panicking.rs:293:9
  10:     0x7b1c4a0c0177 - std[8905f2cde1cc7662]::panicking::update_hook::<alloc[5e51d0ec9144a24f]::boxed::Box<rustc_driver_impl[409c18a6a244b347]::install_ice_hook::{closure#0}>>::{closure#0}
  11:     0x7b1c4dc7be82 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::ha95e7459ace54ce3
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/alloc/src/boxed.rs:2164:9
  12:     0x7b1c4dc7be82 - std::panicking::rust_panic_with_hook::h69861f8a9f68140e
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/panicking.rs:805:13
  13:     0x7b1c4dc7bb37 - std::panicking::begin_panic_handler::{{closure}}::haee2c71d9d77450d
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/panicking.rs:671:13
  14:     0x7b1c4dc79189 - std::sys::backtrace::__rust_end_short_backtrace::h13dd402901136d07
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/sys/backtrace.rs:170:18
  15:     0x7b1c4dc7b7c4 - rust_begin_unwind
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/panicking.rs:662:5
  16:     0x7b1c4dcc5a83 - core::panicking::panic_fmt::haa28ca6654179c80
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/core/src/panicking.rs:74:14
  17:     0x7b1c4dcc605f - core::panicking::assert_failed_inner::hb8e7362e4cbedd62
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/core/src/panicking.rs:407:23
  18:     0x7b1c4aeb9477 - core[ed2708e6dfab5976]::panicking::assert_failed::<rustc_abi[b00cdd2b010d33b3]::Align, rustc_abi[b00cdd2b010d33b3]::Align>
  19:     0x7b1c4bffeba5 - rustc_ty_utils[8fe1d6497c51be38]::layout::layout_of_uncached
  20:     0x7b1c4bff653d - rustc_ty_utils[8fe1d6497c51be38]::layout::layout_of
  21:     0x7b1c4bff64d1 - rustc_query_impl[a3ff9df8c87d6bf9]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[a3ff9df8c87d6bf9]::query_impl::layout_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[4c63caae2dc30deb]::query::erase::Erased<[u8; 16usize]>>
  22:     0x7b1c4bff57d2 - rustc_query_system[ae5d59fa4dc61faf]::query::plumbing::try_execute_query::<rustc_query_impl[a3ff9df8c87d6bf9]::DynamicConfig<rustc_query_system[ae5d59fa4dc61faf]::query::caches::DefaultCache<rustc_middle[4c63caae2dc30deb]::ty::ParamEnvAnd<rustc_middle[4c63caae2dc30deb]::ty::Ty>, rustc_middle[4c63caae2dc30deb]::query::erase::Erased<[u8; 16usize]>>, false, true, false>, rustc_query_impl[a3ff9df8c87d6bf9]::plumbing::QueryCtxt, false>
  23:     0x7b1c4bff546f - rustc_query_impl[a3ff9df8c87d6bf9]::query_impl::layout_of::get_query_non_incr::__rust_end_short_backtrace
  24:     0x7b1c48d498a8 - <rustc_mir_transform[eb83fea80f9dad86]::remove_zsts::RemoveZsts as rustc_middle[4c63caae2dc30deb]::mir::MirPass>::run_pass
  25:     0x7b1c4b601d35 - rustc_mir_transform[eb83fea80f9dad86]::pass_manager::run_passes_inner
  26:     0x7b1c4c180b61 - rustc_mir_transform[eb83fea80f9dad86]::optimized_mir
  27:     0x7b1c4c1649db - rustc_query_impl[a3ff9df8c87d6bf9]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[a3ff9df8c87d6bf9]::query_impl::optimized_mir::dynamic_query::{closure#2}::{closure#0}, rustc_middle[4c63caae2dc30deb]::query::erase::Erased<[u8; 8usize]>>
  28:     0x7b1c4b95a11f - rustc_query_system[ae5d59fa4dc61faf]::query::plumbing::try_execute_query::<rustc_query_impl[a3ff9df8c87d6bf9]::DynamicConfig<rustc_query_system[ae5d59fa4dc61faf]::query::caches::DefIdCache<rustc_middle[4c63caae2dc30deb]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[a3ff9df8c87d6bf9]::plumbing::QueryCtxt, false>
  29:     0x7b1c4b9598f3 - rustc_query_impl[a3ff9df8c87d6bf9]::query_impl::optimized_mir::get_query_non_incr::__rust_end_short_backtrace
  30:     0x7b1c485ba7a8 - <rustc_middle[4c63caae2dc30deb]::ty::context::TyCtxt>::instance_mir
  31:     0x7b1c4b977e55 - rustc_interface[69b3ddcd41152fad]::passes::run_required_analyses
  32:     0x7b1c4c21381e - rustc_interface[69b3ddcd41152fad]::passes::analysis
  33:     0x7b1c4c2137f1 - rustc_query_impl[a3ff9df8c87d6bf9]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[a3ff9df8c87d6bf9]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[4c63caae2dc30deb]::query::erase::Erased<[u8; 1usize]>>
  34:     0x7b1c4c5ec0ae - rustc_query_system[ae5d59fa4dc61faf]::query::plumbing::try_execute_query::<rustc_query_impl[a3ff9df8c87d6bf9]::DynamicConfig<rustc_query_system[ae5d59fa4dc61faf]::query::caches::SingleCache<rustc_middle[4c63caae2dc30deb]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[a3ff9df8c87d6bf9]::plumbing::QueryCtxt, false>
  35:     0x7b1c4c5ebe0f - rustc_query_impl[a3ff9df8c87d6bf9]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  36:     0x7b1c4c46efe0 - rustc_interface[69b3ddcd41152fad]::interface::run_compiler::<core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>, rustc_driver_impl[409c18a6a244b347]::run_compiler::{closure#0}>::{closure#1}
  37:     0x7b1c4c409509 - std[8905f2cde1cc7662]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[69b3ddcd41152fad]::util::run_in_thread_with_globals<rustc_interface[69b3ddcd41152fad]::util::run_in_thread_pool_with_globals<rustc_interface[69b3ddcd41152fad]::interface::run_compiler<core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>, rustc_driver_impl[409c18a6a244b347]::run_compiler::{closure#0}>::{closure#1}, core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>>::{closure#0}, core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>>
  38:     0x7b1c4c4092b2 - <<std[8905f2cde1cc7662]::thread::Builder>::spawn_unchecked_<rustc_interface[69b3ddcd41152fad]::util::run_in_thread_with_globals<rustc_interface[69b3ddcd41152fad]::util::run_in_thread_pool_with_globals<rustc_interface[69b3ddcd41152fad]::interface::run_compiler<core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>, rustc_driver_impl[409c18a6a244b347]::run_compiler::{closure#0}>::{closure#1}, core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>>::{closure#0}, core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[ed2708e6dfab5976]::result::Result<(), rustc_span[b1343f73fcced4f1]::ErrorGuaranteed>>::{closure#1} as core[ed2708e6dfab5976]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  39:     0x7b1c4dc85b9b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h706c4c27c8278947
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/alloc/src/boxed.rs:2150:9
  40:     0x7b1c4dc85b9b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h267b705fa7be0ba5
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/alloc/src/boxed.rs:2150:9
  41:     0x7b1c4dc85b9b - std::sys::pal::unix::thread::Thread::new::thread_start::h109d3e899700b4bb
                               at /rustc/97e72524a34994541810438258115802f8b85543/library/std/src/sys/pal/unix/thread.rs:110:17
  42:     0x7b1c46aa6ded - <unknown>
  43:     0x7b1c46b2a0dc - <unknown>
  44:                0x0 - <unknown>

error: 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: please make sure that you have updated to the latest nightly

note: rustc 1.82.0-nightly (97e72524a 2024-08-09) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z validate-mir -Z dump-mir-dir=dir

query stack during panic:
#0 [layout_of] computing layout of `main::InvalidTag`
#1 [optimized_mir] optimizing MIR for `main`
end of query stack
error: aborting due to 2 previous errors

Some errors have detailed explanations: E0517, E0740.
For more information about an error, try `rustc --explain E0517`.

matthiaskrgr avatar Aug 09 '24 08:08 matthiaskrgr