Skip to content

ICE: evaluation of constant value failed | #[inline] causes compiler panic when bench-marking #83937

Description

@DzenanJupic

I'm currently experimenting with a bunch of sorting algorithms. To reduce boilerplate, I made use of the const_trait_impl feature.

It seems like this feature breaks when benchmarking an #[inline] function. It however works well when not using #[inline], or when not benchmarking.

Minimal example:

Code

Cargo.toml
[package]
name = "temp"
version = "0.1.0"
edition = "2018"

[[bench]]
name = "counting_sort"
// lib.rs
#![feature(const_trait_impl)]
#![allow(incomplete_features)]

pub trait UsizeConversions {
    fn into_usize(self) -> usize;
}

impl const UsizeConversions for u8 {
    fn into_usize(self) -> usize {
        self as usize
    }
}

pub trait CountingSort {
    fn sort(&mut self);
}

impl CountingSort for [u8] {
    #[inline] // when this is removed, everything works well
    fn sort(&mut self) {
        let _counts = [0usize; u8::MAX.into_usize() + 1];
    }
}

#[test]
fn works_in_tests() {
    let mut data = vec![5, 2, 8, 10];
    CountingSort::sort(&mut *data);
}
benches/counting_sort.rs
#![feature(test)]

extern crate test;

use temp::CountingSort;
use test::Bencher;

#[bench]
fn counting_sort(b: &mut Bencher) {
    b.iter(|| {
        let mut data = vec![5, 2, 8, 10]; 
        CountingSort::sort(&mut *data);
    });
}

Meta

rustc --version --verbose:

rustc 1.53.0-nightly (07e0e2ec2 2021-03-24)
binary: rustc
commit-hash: 07e0e2ec268c140e607e1ac7f49f145612d0f597
commit-date: 2021-03-24
host: x86_64-pc-windows-msvc
release: 1.53.0-nightly
LLVM version: 12.0.0

Command

 cargo bench

Error output

error[E0080]: evaluation of constant value failed
  --> C:\Users\info\Code\Rust\temp\src\lib.rs:21:32
   |
21 |         let _counts = [0usize; u8::MAX.into_usize() + 1];
   |                                ^^^^^^^^^^^^^^^^^^^^ calling non-const function `<u8 as UsizeConversions>::into_usize`

error: internal compiler error: compiler\rustc_codegen_llvm\src\context.rs:793:17: failed to get layout for `[usize; _]`: the type `[usize; _]` has an unknown layout
Backtrace

thread 'rustc' panicked at 'Box<Any>', /rustc/07e0e2ec268c140e607e1ac7f49f145612d0f597\library\std\src\panic.rs:59:5
stack backtrace:
   0:     0x7ffa437d77ee - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h62553bb33d269d2e
   1:     0x7ffa438027cc - core::fmt::write::h187a24ff0c56237d
   2:     0x7ffa437cb208 - <std::io::IoSlice as core::fmt::Debug>::fmt::h7a51133a1941366b
   3:     0x7ffa437dba02 - std::panicking::take_hook::ha7af702674468c4c
   4:     0x7ffa437db4da - std::panicking::take_hook::ha7af702674468c4c
   5:     0x7ffa2f61b057 - rustc_driver::report_ice::h530a14ca8f015ece
   6:     0x7ffa437dc1e5 - std::panicking::rust_panic_with_hook::hffdabf0e02906eb3
   7:     0x7ffa33682720 - <rustc_errors::emitter::FileWithAnnotatedLines as core::fmt::Debug>::fmt::h138bd76935548e4c
   8:     0x7ffa33681df9 - <rustc_errors::emitter::FileWithAnnotatedLines as core::fmt::Debug>::fmt::h138bd76935548e4c
   9:     0x7ffa339008b1 - rustc_query_system::query::job::report_cycle::h78ff372fa02cb0ad
  10:     0x7ffa3364d5a0 - <rustc_feature::builtin_attrs::AttributeType as core::fmt::Debug>::fmt::h4d81e9bb6564882a
  11:     0x7ffa336541b5 - rustc_errors::HandlerInner::err_count::h836eba26b76f283e
  12:     0x7ffa33651d52 - rustc_errors::Handler::bug::h64fb55725578e531
  13:     0x7ffa335135f8 - <rustc_middle::ty::consts::int::ScalarInt as core::fmt::UpperHex>::fmt::he313431e7a456270
  14:     0x7ffa33513410 - <rustc_middle::ty::consts::int::ScalarInt as core::fmt::UpperHex>::fmt::he313431e7a456270
  15:     0x7ffa33513359 - <rustc_middle::ty::consts::int::ScalarInt as core::fmt::UpperHex>::fmt::he313431e7a456270
  16:     0x7ffa33513529 - <rustc_middle::ty::consts::int::ScalarInt as core::fmt::UpperHex>::fmt::he313431e7a456270
  17:     0x7ffa338f9a17 - rustc_middle::util::bug::bug_fmt::hf44d9914e298ce88
  18:     0x7ffa2f87067a - <rustc_codegen_llvm::context::CodegenCx as rustc_target::abi::LayoutOf>::spanned_layout_of::hbcc603c5009aff0b
  19:     0x7ffa2f87052c - <rustc_codegen_llvm::context::CodegenCx as rustc_target::abi::LayoutOf>::spanned_layout_of::hbcc603c5009aff0b
  20:     0x7ffa2f8fe279 - <rustc_codegen_llvm::back::archive::LlvmArchiveBuilder as rustc_codegen_ssa::back::archive::ArchiveBuilder>::build::ha5a74b8a3be08753
  21:     0x7ffa2f81591f - rustc_codegen_llvm::llvm_::diagnostic::Diagnostic::unpack::ha6027da799128368
  22:     0x7ffa2f8eede9 - <rustc_codegen_llvm::back::archive::LlvmArchiveBuilder as rustc_codegen_ssa::back::archive::ArchiveBuilder>::build::ha5a74b8a3be08753
  23:     0x7ffa2f8799f2 - <rustc_codegen_llvm::back::lto::ThinLTOKeysMap as core::fmt::Debug>::fmt::h267b43b08cde10bf
  24:     0x7ffa2f8a2a56 - <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::link::h1ca676796a6dc6ab
  25:     0x7ffa2f8cb91f - <rustc_codegen_llvm::base::ValueIter as core::iter::traits::iterator::Iterator>::next::h76a924d7c4d8667e
  26:     0x7ffa2f87bc3e - <rustc_codegen_llvm::back::lto::ThinLTOKeysMap as core::fmt::Debug>::fmt::h267b43b08cde10bf
  27:     0x7ffa2f8cb1c2 - <rustc_codegen_llvm::base::ValueIter as core::iter::traits::iterator::Iterator>::next::h76a924d7c4d8667e
  28:     0x7ffa2f88b3ec - <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate::h8a4e9bbd19201980
  29:     0x7ffa2f762dd8 - rustc_interface::passes::BoxedResolver::to_resolver_outputs::h26a866d2af02ca21
  30:     0x7ffa2f76f0b6 - rustc_interface::queries::Queries::ongoing_codegen::h23da4f767055d06d
  31:     0x7ffa2f632c53 - <rustc_middle::ty::SymbolName as core::fmt::Debug>::fmt::h898edfdbf8c7dbdf
  32:     0x7ffa2f6916bc - <rustc_driver::args::Error as core::fmt::Debug>::fmt::h54d0345b5b43328e
  33:     0x7ffa2f6351eb - <rustc_middle::ty::SymbolName as core::fmt::Debug>::fmt::h898edfdbf8c7dbdf
  34:     0x7ffa2f624034 - rustc_driver::pretty::print_after_hir_lowering::h04bf553be4aa75de
  35:     0x7ffa2f63745f - <rustc_middle::ty::SymbolName as core::fmt::Debug>::fmt::h898edfdbf8c7dbdf
  36:     0x7ffa2f65676d - <rustc_hir::intravisit::ErasedMap as rustc_hir::intravisit::Map>::foreign_item::he23d70bdee5d6fd3
  37:     0x7ffa437eb16a - std::sys::windows::thread::Thread::new::h485ded1a10d2ce17
  38:     0x7ffaaac07034 - BaseThreadInitThunk
  39:     0x7ffaac242651 - RtlUserThreadStart

Edit:

rustc note

note: compiler flags: -C opt-level=3 -C embed-bitcode=no
note: some of the compiler flags provided by cargo are hidden

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.F-const_trait_impl`#![feature(const_trait_impl)]`I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions