Skip to content

ICE: panicked at compiler/rustc_mir_build/src/build/expr/as_rvalue.rs:215:65 #133904

Closed as duplicate of#121097
@wxie7

Description

@wxie7

I tried this code:

#![allow(non_upper_case_globals)]
enum A {
    A1,
    A2,
}
enum B {
    B1 = 4,
    B2 = 2,
}
#[repr(simd)]
#[repr(align(8))]
enum Aligned {
    Zero = 0,
    One = 1,
}
const X: u8 = {
    let aligned = Aligned::Zero;
    aligned as u8
};
pub fn main() {
    static c1: isize = A::A2 as isize;
    static c2: isize = B::B2 as isize;
    let a1 = A::A2 as isize;
    let a2 = B::B2 as isize;
    assert_eq!(c1, 1);
    assert_eq!(c2, 2);
    assert_eq!(a1, 1);
    assert_eq!(a2, 2);
    static c1_2: isize = {
        let v = A::A1;
        v as isize
    };
    static c2_2: isize = {
        let v = B::B1;
        v as isize
    };
    let a1_2 = {
        let v = A::A1;
        v as isize
    };
    let a2_2 = {
        let v = B::B1;
        v as isize
    };
    assert_eq!(c1_2, 0);
    assert_eq!(c2_2, 4);
    assert_eq!(a1_2, 0);
    assert_eq!(a2_2, 4);
    assert_eq!(X, 0);
}

It mutates from the following file, but the following code will not cause a ICE.

Also, I used non_upper_case_globals and Aligned as search keywords but didn’t find any related issues with open.

#![allow(non_upper_case_globals)]

enum A {
    A1,
    A2,
}
enum B {
    B1 = 4,
    B2 = 2,
}

#[allow(dead_code)]
#[repr(align(8))]
enum Aligned {
    Zero = 0,
    One = 1,
}

const X: u8 = {
    let aligned = Aligned::Zero;
    aligned as u8
};

pub fn main() {
    static c1: isize = A::A2 as isize;
    static c2: isize = B::B2 as isize;
    let a1 = A::A2 as isize;
    let a2 = B::B2 as isize;
    assert_eq!(c1, 1);
    assert_eq!(c2, 2);
    assert_eq!(a1, 1);
    assert_eq!(a2, 2);

    static c1_2: isize = {
        let v = A::A1;
        v as isize
    };
    static c2_2: isize = {
        let v = B::B1;
        v as isize
    };
    let a1_2 = {
        let v = A::A1;
        v as isize
    };
    let a2_2 = {
        let v = B::B1;
        v as isize
    };
    assert_eq!(c1_2, 0);
    assert_eq!(c2_2, 4);
    assert_eq!(a1_2, 0);
    assert_eq!(a2_2, 4);

    assert_eq!(X, 0);
}

Meta

rustc --version --verbose:

rustc 1.85.0-nightly (acabb5248 2024-12-04)
binary: rustc
commit-hash: acabb5248231987ae1f0c215208d1005a5db402d
commit-date: 2024-12-04
host: x86_64-unknown-linux-gnu
release: 1.85.0-nightly
LLVM version: 19.1.5
Backtrace

error[E0517]: attribute should be applied to a struct
  --> mutant.rs:10:8
   |
10 |   #[repr(simd)]
   |          ^^^^
11 |   #[repr(align(8))]
12 | / enum Aligned {
13 | |     Zero = 0,
14 | |     One = 1,
15 | | }
   | |_- not a struct

thread 'rustc' panicked at compiler/rustc_mir_build/src/build/expr/as_rvalue.rs:215:65:
called `Result::unwrap()` on an `Err` value: Unknown(Aligned)
stack backtrace:
   0:     0x7a5617d3c5ba - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h0ab6de9a9b46ba40
   1:     0x7a5618413e66 - core::fmt::write::h786572316278241a
   2:     0x7a56193d1a51 - std::io::Write::write_fmt::h253c21bff6dc1068
   3:     0x7a5617d3c412 - std::sys::backtrace::BacktraceLock::print::h72ad191a9e5c3f0c
   4:     0x7a5617d3e93a - std::panicking::default_hook::{{closure}}::h697ead15ac8858f2
   5:     0x7a5617d3e783 - std::panicking::default_hook::h36df36946face91c
   6:     0x7a5616eb9318 - std[72a4a0de9fece711]::panicking::update_hook::<alloc[272e4c5910fec5b6]::boxed::Box<rustc_driver_impl[e7849dc6dfe13602]::install_ice_hook::{closure#0}>>::{closure#0}
   7:     0x7a5617d3f0f8 - std::panicking::rust_panic_with_hook::h66ac57f6f29fdfbd
   8:     0x7a5617d3edea - std::panicking::begin_panic_handler::{{closure}}::h44ac1fccfa946230
   9:     0x7a5617d3ca79 - std::sys::backtrace::__rust_end_short_backtrace::ha74a12e03dbbea79
  10:     0x7a5617d3eaad - rust_begin_unwind
  11:     0x7a56149ae100 - core::panicking::panic_fmt::hed29c46432bb0866
  12:     0x7a5614e1d7a6 - core::result::unwrap_failed::hcb6218d7fc18794c
  13:     0x7a56186b5029 - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::as_rvalue
  14:     0x7a56186b792f - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::expr_into_dest
  15:     0x7a56186ba9ab - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::expr_into_dest
  16:     0x7a56191ddf6b - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::ast_block_stmts
  17:     0x7a56191dcb92 - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::ast_block
  18:     0x7a56186b8d7b - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::expr_into_dest
  19:     0x7a56186ba9ab - <rustc_mir_build[6801472b4a87f40a]::build::Builder>::expr_into_dest
  20:     0x7a5618dad85f - rustc_mir_build[6801472b4a87f40a]::build::mir_build
  21:     0x7a5618409ec4 - rustc_mir_transform[bea604f73cbae67a]::mir_built
  22:     0x7a5618409e87 - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::mir_built::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>>
  23:     0x7a561883f7d1 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_data_structures[b7c46475613933cb]::vec_cache::VecCache<rustc_span[d12ce1794d211847]::def_id::LocalDefId, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[5b88147768c3e99]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  24:     0x7a561883f38d - rustc_query_impl[e67a967fc473869]::query_impl::mir_built::get_query_non_incr::__rust_end_short_backtrace
  25:     0x7a5618dedb0f - rustc_mir_transform[bea604f73cbae67a]::mir_const_qualif
  26:     0x7a5618deda25 - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::mir_const_qualif::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 4usize]>>
  27:     0x7a5618ded077 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_query_system[5b88147768c3e99]::query::caches::DefIdCache<rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 4usize]>>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  28:     0x7a5618decdf2 - rustc_query_impl[e67a967fc473869]::query_impl::mir_const_qualif::get_query_non_incr::__rust_end_short_backtrace
  29:     0x7a561601caf7 - rustc_mir_transform[bea604f73cbae67a]::mir_promoted
  30:     0x7a56188a48d2 - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::mir_promoted::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 16usize]>>
  31:     0x7a56188a4ba6 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_data_structures[b7c46475613933cb]::vec_cache::VecCache<rustc_span[d12ce1794d211847]::def_id::LocalDefId, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 16usize]>, rustc_query_system[5b88147768c3e99]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  32:     0x7a56188a47d0 - rustc_query_impl[e67a967fc473869]::query_impl::mir_promoted::get_query_non_incr::__rust_end_short_backtrace
  33:     0x7a56195ad8ad - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>>
  34:     0x7a561883f7d1 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_data_structures[b7c46475613933cb]::vec_cache::VecCache<rustc_span[d12ce1794d211847]::def_id::LocalDefId, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[5b88147768c3e99]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  35:     0x7a561883f2d5 - rustc_query_impl[e67a967fc473869]::query_impl::mir_borrowck::get_query_non_incr::__rust_end_short_backtrace
  36:     0x7a5615c6cf40 - rustc_mir_transform[bea604f73cbae67a]::mir_drops_elaborated_and_const_checked
  37:     0x7a561883f479 - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::mir_drops_elaborated_and_const_checked::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>>
  38:     0x7a561883f7d1 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_data_structures[b7c46475613933cb]::vec_cache::VecCache<rustc_span[d12ce1794d211847]::def_id::LocalDefId, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>, rustc_query_system[5b88147768c3e99]::dep_graph::graph::DepNodeIndex>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  39:     0x7a561883f227 - rustc_query_impl[e67a967fc473869]::query_impl::mir_drops_elaborated_and_const_checked::get_query_non_incr::__rust_end_short_backtrace
  40:     0x7a5618e12273 - rustc_mir_transform[bea604f73cbae67a]::mir_for_ctfe
  41:     0x7a5618e12127 - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::mir_for_ctfe::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>>
  42:     0x7a56184405c8 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_query_system[5b88147768c3e99]::query::caches::DefIdCache<rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  43:     0x7a5619026fe3 - rustc_query_impl[e67a967fc473869]::query_impl::mir_for_ctfe::get_query_non_incr::__rust_end_short_backtrace
  44:     0x7a5619027128 - <rustc_const_eval[98aee9191cce85ba]::interpret::eval_context::InterpCx<rustc_const_eval[98aee9191cce85ba]::const_eval::machine::CompileTimeMachine>>::load_mir
  45:     0x7a5619027e41 - rustc_const_eval[98aee9191cce85ba]::const_eval::eval_queries::eval_to_allocation_raw_provider
  46:     0x7a5619027bbe - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::eval_to_allocation_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 24usize]>>
  47:     0x7a5618ffea62 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_query_system[5b88147768c3e99]::query::caches::DefaultCache<rustc_middle[b3d98edcda7bf203]::ty::PseudoCanonicalInput<rustc_middle[b3d98edcda7bf203]::mir::interpret::GlobalId>, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  48:     0x7a5618ffe5c1 - rustc_query_impl[e67a967fc473869]::query_impl::eval_to_allocation_raw::get_query_non_incr::__rust_end_short_backtrace
  49:     0x7a5619000737 - rustc_const_eval[98aee9191cce85ba]::const_eval::eval_queries::eval_to_const_value_raw_provider
  50:     0x7a5619000540 - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::eval_to_const_value_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 24usize]>>
  51:     0x7a5618ffea19 - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_query_system[5b88147768c3e99]::query::caches::DefaultCache<rustc_middle[b3d98edcda7bf203]::ty::PseudoCanonicalInput<rustc_middle[b3d98edcda7bf203]::mir::interpret::GlobalId>, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  52:     0x7a5618ffe4c9 - rustc_query_impl[e67a967fc473869]::query_impl::eval_to_const_value_raw::get_query_non_incr::__rust_end_short_backtrace
  53:     0x7a561883ed94 - <rustc_middle[b3d98edcda7bf203]::hir::map::Map>::par_body_owners::<rustc_hir_analysis[55059ff4ac40f9b9]::check_crate::{closure#3}>::{closure#0}
  54:     0x7a561883c777 - rustc_hir_analysis[55059ff4ac40f9b9]::check_crate
  55:     0x7a5618847284 - rustc_interface[196843e09e80f515]::passes::run_required_analyses
  56:     0x7a56193c1e9e - rustc_interface[196843e09e80f515]::passes::analysis
  57:     0x7a56193c1e6f - rustc_query_impl[e67a967fc473869]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[e67a967fc473869]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 1usize]>>
  58:     0x7a5619388efa - rustc_query_system[5b88147768c3e99]::query::plumbing::try_execute_query::<rustc_query_impl[e67a967fc473869]::DynamicConfig<rustc_query_system[5b88147768c3e99]::query::caches::SingleCache<rustc_middle[b3d98edcda7bf203]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[e67a967fc473869]::plumbing::QueryCtxt, false>
  59:     0x7a5619388bce - rustc_query_impl[e67a967fc473869]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  60:     0x7a5619470679 - rustc_interface[196843e09e80f515]::interface::run_compiler::<core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>, rustc_driver_impl[e7849dc6dfe13602]::run_compiler::{closure#0}>::{closure#1}
  61:     0x7a56192a1cc7 - std[72a4a0de9fece711]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[196843e09e80f515]::util::run_in_thread_with_globals<rustc_interface[196843e09e80f515]::util::run_in_thread_pool_with_globals<rustc_interface[196843e09e80f515]::interface::run_compiler<core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>, rustc_driver_impl[e7849dc6dfe13602]::run_compiler::{closure#0}>::{closure#1}, core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>>::{closure#0}, core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>>
  62:     0x7a56192a1962 - <<std[72a4a0de9fece711]::thread::Builder>::spawn_unchecked_<rustc_interface[196843e09e80f515]::util::run_in_thread_with_globals<rustc_interface[196843e09e80f515]::util::run_in_thread_pool_with_globals<rustc_interface[196843e09e80f515]::interface::run_compiler<core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>, rustc_driver_impl[e7849dc6dfe13602]::run_compiler::{closure#0}>::{closure#1}, core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>>::{closure#0}, core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[7ca38d3847df487d]::result::Result<(), rustc_span[d12ce1794d211847]::ErrorGuaranteed>>::{closure#1} as core[7ca38d3847df487d]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  63:     0x7a56192a10ab - std::sys::pal::unix::thread::Thread::new::thread_start::haeb94917c0a274f1
  64:     0x7a5613494ac3 - start_thread
                               at ./nptl/pthread_create.c:442:8
  65:     0x7a5613526850 - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
  66:                0x0 - <unknown>

error: the compiler unexpectedly panicked. this is a bug.```

</p>
</details>

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-MIRArea: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.htmlA-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)A-reprArea: the `#[repr(stuff)]` attributeC-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️S-has-mcveStatus: A Minimal Complete and Verifiable Example has been found for this issueT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions