Skip to content

generic_const_exprs can break inline const blocks #116320

Open
@calebzulawski

Description

@calebzulawski

I tried this code:

#![feature(generic_const_exprs)]
#![feature(inline_const)]

fn foo<const N: u32>() {
    const {
        assert!(N != 0);
    }
}

I expected to see this happen: it compiles
Instead, this happened: it errors:

error: overly complex generic constant
 --> src/lib.rs:5:11
  |
5 |       const {
  |  ___________^
6 | |         assert!(N != 0);
7 | |     }
  | |_____^ blocks are not supported in generic constants
  |
  = help: consider moving this anonymous constant into a `const` function
  = note: this operation may be supported in the future

Removing the generic_const_exprs feature allows the const block to compile

Meta

rustc --version --verbose:

rustc 1.74.0-nightly (ca62d2c44 2023-09-30)
binary: rustc
commit-hash: ca62d2c445628587660ae48013f460b08b1f5552
commit-date: 2023-09-30
host: x86_64-apple-darwin
release: 1.74.0-nightly
LLVM version: 17.0.2
Backtrace

<backtrace>

cc @oli-obk @BoxyUwU

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-const-genericsArea: const generics (parameters and arguments)C-bugCategory: This is a bug.F-generic_const_exprs`#![feature(generic_const_exprs)]`F-inline_constInline constants (aka: const blocks, const expressions, anonymous constants)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