Skip to content

Calling non-const function core::slice::iter::<impl IntoIterator for &[u8]>::into_iter #125490

Open
@jaudiger

Description

@jaudiger

I didn't find a clear issue that was talking about that, and I'm clearly in the "nightly scape" of Rust here. I'm trying to build the following code (don't take attention to the possible unsafe part of this code, I omitted voluntary some part for better clarity):

Playground link:

#![feature(const_mut_refs)]
#![feature(const_for)]
#![feature(const_maybe_uninit_write)]
#![feature(effects)]

use core::mem::MaybeUninit;

#[must_use]
const fn from_slice_unchecked(from_slice: &[u8]) -> [MaybeUninit<u8>; 1]
{
    let mut vec = [MaybeUninit::uninit(); 1];

    for byte in from_slice {
        vec[0].write(*byte);
    }

    vec
}

fn main() {
    let _ = const { from_slice_unchecked(&[0]) };
}
error[E0080]: evaluation of `main::{constant#0}` failed
  --> src/main.rs:13:17
   |
13 |     for byte in from_slice {
   |                 ^^^^^^^^^^ calling non-const function `core::slice::iter::<impl IntoIterator for &[u8]>::into_iter`
   |
note: inside `from_slice_unchecked`
  --> src/main.rs:13:17
   |
13 |     for byte in from_slice {
   |                 ^^^^^^^^^^
note: inside `main::{constant#0}`
  --> src/main.rs:21:21
   |
21 |     let _ = const { from_slice_unchecked(&[0]) };
   |                     ^^^^^^^^^^^^^^^^^^^^^^^^^^

note: erroneous constant encountered
  --> src/main.rs:21:13
   |
21 |     let _ = const { from_slice_unchecked(&[0]) };
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

It does build if I don't const inline the call to from_slice_unchecked() though. But here, I'm wanted to create this buffer at build time and I don't find a way to do it "easily".

The closer issue I could find is #103265 which contains this closed PR #102225.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)A-diagnosticsArea: Messages for errors, warnings, and lintsD-terseDiagnostics: An error or lint that doesn't give enough information about the problem at hand.T-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