Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ICE: sig.c_variadic || extra_args.is_empty() #127423

Open
matthiaskrgr opened this issue Jul 6, 2024 · 2 comments
Open

ICE: sig.c_variadic || extra_args.is_empty() #127423

matthiaskrgr opened this issue Jul 6, 2024 · 2 comments
Labels
C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@matthiaskrgr
Copy link
Member

auto-reduced (treereduce-rust):

const fn gcd(value: *const X) -> u32 {}

macro_rules! const_assert {
    ($expr:expr) => {
        const _: () = assert!($expr);
        assert!($expr);
    };
}

fn main() {
    const_assert!(gcd(18, 48) == 6);
}
original code

original:

// Test basic functionality of control flow in a const context.

// run-pass

const X: u32 = 4;
const Y: u32 = 5;

const ABS_DIFF: u32 = if X < Y {
    Y - X
} else {
    X - Y
};

const fn abs_diff(a: u32, b: u32) -> u32 {
    match (a, b) {
        (big, little) if big > little => big - little,
        (little, big) => big - little,
    }
}

const fn gcd(value: *const X) -> u32 {
    if b == 0 {
        return a;
    }

    gcd(b, a % b)
}

const fn fib(n: u64) -> u64 {
    if n == 0 {
        return 0;
    }

    let mut fib = (0, 1);
    let mut i = 1;
    while i < n {
        fib = (fib.1, fib.0 + fib.1);
        i += 1;
    }

    fib.1
}

const fn is_prime(n: u64) -> bool {
    if n % 2 == 0 {
        return false;
    }

    let mut div = 3;
    loop {
        if n % div == 0 {
            return false;
        }

        if div * div > n {
            return true;
        }

        div += 2;
    }
}

macro_rules! const_assert {
    ($expr:expr) => {
        const _: () = assert!($expr);
        assert!($expr);
    }
}

fn main() {
    const_assert!(abs_diff(4, 5) == abs_diff(5, 4));
    const_assert!(ABS_DIFF == abs_diff(5, 4));

    const_assert!(gcd(48, 18) == 6);
    const_assert!(gcd(18, 48) == 6);

    const_assert!(fib(2) == 1);
    const_assert!(fib(8) == 21);

    const_assert!(is_prime(113));
    const_assert!(!is_prime(117));
}

Version information

rustc 1.81.0-nightly (28cc0b643 2024-07-06)
binary: rustc
commit-hash: 28cc0b643d6c07e2e0ba24a85f397963961b4c0d
commit-date: 2024-07-06
host: x86_64-unknown-linux-gnu
release: 1.81.0-nightly
LLVM version: 18.1.7

Command:
/home/matthias/.rustup/toolchains/master/bin/rustc

Program output

error[E0412]: cannot find type `X` in this scope
 --> /tmp/icemaker_global_tempdir.V32jcTFKcCMr/rustc_testrunner_tmpdir_reporting.PBqojMhMhlYe/mvce.rs:1:28
  |
1 | const fn gcd(value: *const X) -> u32 {}
  |                            ^ not found in this scope
  |
help: you might be missing a type parameter
  |
1 | const fn gcd<X>(value: *const X) -> u32 {}
  |             +++

thread 'rustc' panicked at compiler/rustc_ty_utils/src/abi.rs:608:9:
assertion failed: sig.c_variadic || extra_args.is_empty()
stack backtrace:
   0:     0x752546aeb645 - std::backtrace_rs::backtrace::libunwind::trace::hdb8bb88eb3e00556
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1:     0x752546aeb645 - std::backtrace_rs::backtrace::trace_unsynchronized::h99f31752ead39aa8
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x752546aeb645 - std::sys::backtrace::_print_fmt::h25b48d5217cd960f
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/sys/backtrace.rs:68:5
   3:     0x752546aeb645 - <std::sys::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h02ff5d579e038944
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/sys/backtrace.rs:44:22
   4:     0x752546b3ad4b - core::fmt::rt::Argument::fmt::h1c57a82558aacf3d
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/core/src/fmt/rt.rs:173:76
   5:     0x752546b3ad4b - core::fmt::write::h5d5b1acab555c46e
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/core/src/fmt/mod.rs:1182:21
   6:     0x752546adff7f - std::io::Write::write_fmt::h229f7fd7d121a425
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/io/mod.rs:1835:15
   7:     0x752546aeb41e - std::sys::backtrace::_print::h838b84c553692cd9
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/sys/backtrace.rs:47:5
   8:     0x752546aeb41e - std::sys::backtrace::print::h612e4cf966ab6bf3
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/sys/backtrace.rs:34:9
   9:     0x752546aedd69 - std::panicking::default_hook::{{closure}}::h38448a4b4905bd04
  10:     0x752546aedb0c - std::panicking::default_hook::h8c30ce5562c3250e
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/panicking.rs:292:9
  11:     0x752543000239 - std[4c828775a4c98e34]::panicking::update_hook::<alloc[7c6a9df3eb911b33]::boxed::Box<rustc_driver_impl[f002cc27bf416152]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x752546aee68f - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h600df9638cbd5bb9
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/alloc/src/boxed.rs:2078:9
  13:     0x752546aee68f - std::panicking::rust_panic_with_hook::h41f578911dd9994e
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/panicking.rs:804:13
  14:     0x752546aee283 - std::panicking::begin_panic_handler::{{closure}}::h23c4749cd7da3939
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/panicking.rs:663:13
  15:     0x752546aebb09 - std::sys::backtrace::__rust_end_short_backtrace::h969ec5a9caa0f725
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/sys/backtrace.rs:171:18
  16:     0x752546aedf44 - rust_begin_unwind
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/panicking.rs:661:5
  17:     0x752546b37303 - core::panicking::panic_fmt::h4e9caca7d04a1e50
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/core/src/panicking.rs:74:14
  18:     0x752546b3738c - core::panicking::panic::hbe66ef8a950765ad
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/core/src/panicking.rs:148:5
  19:     0x752544ecc611 - rustc_ty_utils[88640df7fb79cc5d]::abi::fn_abi_new_uncached
  20:     0x752544ec5acc - rustc_ty_utils[88640df7fb79cc5d]::abi::fn_abi_of_instance
  21:     0x752544ec43c9 - rustc_query_impl[fdf858c4482af3a0]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fdf858c4482af3a0]::query_impl::fn_abi_of_instance::dynamic_query::{closure#2}::{closure#0}, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 16usize]>>
  22:     0x752544ec2018 - rustc_query_system[6aeb11a3d3f46031]::query::plumbing::try_execute_query::<rustc_query_impl[fdf858c4482af3a0]::DynamicConfig<rustc_query_system[6aeb11a3d3f46031]::query::caches::DefaultCache<rustc_middle[a7962af26fd609fb]::ty::ParamEnvAnd<(rustc_middle[a7962af26fd609fb]::ty::instance::Instance, &rustc_middle[a7962af26fd609fb]::ty::list::RawList<(), rustc_middle[a7962af26fd609fb]::ty::Ty>)>, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 16usize]>>, false, false, false>, rustc_query_impl[fdf858c4482af3a0]::plumbing::QueryCtxt, false>
  23:     0x752544ec1c6f - rustc_query_impl[fdf858c4482af3a0]::query_impl::fn_abi_of_instance::get_query_non_incr::__rust_end_short_backtrace
  24:     0x7525451f7511 - <rustc_const_eval[d3bb8ec8a957a846]::interpret::eval_context::InterpCx<rustc_const_eval[d3bb8ec8a957a846]::const_eval::machine::CompileTimeMachine> as rustc_middle[a7962af26fd609fb]::ty::layout::FnAbiOf>::fn_abi_of_instance
  25:     0x7525451f382c - rustc_const_eval[d3bb8ec8a957a846]::const_eval::eval_queries::eval_to_allocation_raw_provider
  26:     0x7525451f14b6 - rustc_query_impl[fdf858c4482af3a0]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fdf858c4482af3a0]::query_impl::eval_to_allocation_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 24usize]>>
  27:     0x7525451eb291 - rustc_query_system[6aeb11a3d3f46031]::query::plumbing::try_execute_query::<rustc_query_impl[fdf858c4482af3a0]::DynamicConfig<rustc_query_system[6aeb11a3d3f46031]::query::caches::DefaultCache<rustc_middle[a7962af26fd609fb]::ty::ParamEnvAnd<rustc_middle[a7962af26fd609fb]::mir::interpret::GlobalId>, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[fdf858c4482af3a0]::plumbing::QueryCtxt, false>
  28:     0x7525451eae70 - rustc_query_impl[fdf858c4482af3a0]::query_impl::eval_to_allocation_raw::get_query_non_incr::__rust_end_short_backtrace
  29:     0x7525451ed0de - rustc_const_eval[d3bb8ec8a957a846]::const_eval::eval_queries::eval_to_const_value_raw_provider
  30:     0x7525451ecef6 - rustc_query_impl[fdf858c4482af3a0]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fdf858c4482af3a0]::query_impl::eval_to_const_value_raw::dynamic_query::{closure#2}::{closure#0}, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 24usize]>>
  31:     0x7525451eb254 - rustc_query_system[6aeb11a3d3f46031]::query::plumbing::try_execute_query::<rustc_query_impl[fdf858c4482af3a0]::DynamicConfig<rustc_query_system[6aeb11a3d3f46031]::query::caches::DefaultCache<rustc_middle[a7962af26fd609fb]::ty::ParamEnvAnd<rustc_middle[a7962af26fd609fb]::mir::interpret::GlobalId>, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 24usize]>>, false, false, false>, rustc_query_impl[fdf858c4482af3a0]::plumbing::QueryCtxt, false>
  32:     0x7525451ead70 - rustc_query_impl[fdf858c4482af3a0]::query_impl::eval_to_const_value_raw::get_query_non_incr::__rust_end_short_backtrace
  33:     0x75254480cbb6 - <rustc_middle[a7962af26fd609fb]::hir::map::Map>::par_body_owners::<rustc_hir_analysis[60a48159061277cf]::check_crate::{closure#3}>::{closure#0}
  34:     0x75254480a358 - rustc_hir_analysis[60a48159061277cf]::check_crate
  35:     0x752544fcab55 - rustc_interface[1f6122faf9455c3d]::passes::analysis
  36:     0x752544fca715 - rustc_query_impl[fdf858c4482af3a0]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[fdf858c4482af3a0]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 1usize]>>
  37:     0x7525454db425 - rustc_query_system[6aeb11a3d3f46031]::query::plumbing::try_execute_query::<rustc_query_impl[fdf858c4482af3a0]::DynamicConfig<rustc_query_system[6aeb11a3d3f46031]::query::caches::SingleCache<rustc_middle[a7962af26fd609fb]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[fdf858c4482af3a0]::plumbing::QueryCtxt, false>
  38:     0x7525454db18f - rustc_query_impl[fdf858c4482af3a0]::query_impl::analysis::get_query_non_incr::__rust_end_short_backtrace
  39:     0x7525453de8c5 - rustc_interface[1f6122faf9455c3d]::interface::run_compiler::<core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>, rustc_driver_impl[f002cc27bf416152]::run_compiler::{closure#0}>::{closure#1}
  40:     0x7525453b1dc9 - std[4c828775a4c98e34]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[1f6122faf9455c3d]::util::run_in_thread_with_globals<rustc_interface[1f6122faf9455c3d]::util::run_in_thread_pool_with_globals<rustc_interface[1f6122faf9455c3d]::interface::run_compiler<core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>, rustc_driver_impl[f002cc27bf416152]::run_compiler::{closure#0}>::{closure#1}, core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>>::{closure#0}, core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>>
  41:     0x7525453b1b7a - <<std[4c828775a4c98e34]::thread::Builder>::spawn_unchecked_<rustc_interface[1f6122faf9455c3d]::util::run_in_thread_with_globals<rustc_interface[1f6122faf9455c3d]::util::run_in_thread_pool_with_globals<rustc_interface[1f6122faf9455c3d]::interface::run_compiler<core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>, rustc_driver_impl[f002cc27bf416152]::run_compiler::{closure#0}>::{closure#1}, core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>>::{closure#0}, core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[268056f9cad16491]::result::Result<(), rustc_span[eecf7d11a5f5c5c1]::ErrorGuaranteed>>::{closure#2} as core[268056f9cad16491]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  42:     0x752546af84eb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h042ab5e01e096055
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/alloc/src/boxed.rs:2064:9
  43:     0x752546af84eb - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hc02f3d7c1202afa6
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/alloc/src/boxed.rs:2064:9
  44:     0x752546af84eb - std::sys::pal::unix::thread::Thread::new::thread_start::h805838ff7ef2ecb5
                               at /rustc/28cc0b643d6c07e2e0ba24a85f397963961b4c0d/library/std/src/sys/pal/unix/thread.rs:108:17
  45:     0x75253faa6ded - <unknown>
  46:     0x75253fb2a0dc - <unknown>
  47:                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.81.0-nightly (28cc0b643 2024-07-06) running on x86_64-unknown-linux-gnu

query stack during panic:
#0 [fn_abi_of_instance] computing call ABI of `gcd`  |  = note: this failure-note originates in the macro `const_assert` (in Nightly builds, run with -Z macro-backtrace for more info)

#1 [eval_to_allocation_raw] const-evaluating + checking `main::_`
end of query stack
error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0412`.

@matthiaskrgr matthiaskrgr added I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. C-bug Category: This is a bug. labels Jul 6, 2024
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Jul 6, 2024
@matthiaskrgr
Copy link
Member Author

#126996 cc @oli-obk

@saethlin saethlin removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Jul 8, 2024
@matthiaskrgr
Copy link
Member Author

#![allow(dead_code)]

const fn add(a: &'self isize) -> usize {
    Qux + y
}

const ARR: [i32; add(1, 2)] = [5, 6, 7];

pub fn main() {}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
Status: Todo
Development

No branches or pull requests

3 participants