mirror of
https://github.com/italicsjenga/generic-const-exprs-panic-repro.git
synced 2024-11-23 17:51:38 +11:00
repro
This commit is contained in:
commit
5bfd624afa
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
rustc-ice-*.txt
|
14
Cargo.lock
generated
Normal file
14
Cargo.lock
generated
Normal file
|
@ -0,0 +1,14 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "binary"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"library",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "library"
|
||||
version = "0.1.0"
|
3
Cargo.toml
Normal file
3
Cargo.toml
Normal file
|
@ -0,0 +1,3 @@
|
|||
[workspace]
|
||||
members = ["binary", "library"]
|
||||
resolver = "2"
|
12
binary/Cargo.toml
Normal file
12
binary/Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "binary"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[[bin]]
|
||||
name = "binary"
|
||||
path = "main.rs"
|
||||
|
||||
|
||||
[dependencies]
|
||||
library = { path = "../library" }
|
14
binary/main.rs
Normal file
14
binary/main.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
use library::*;
|
||||
|
||||
fn main() {
|
||||
// this doesn't compile
|
||||
let mut inner = ImplementsTraitOverConstGeneric::<4>;
|
||||
|
||||
// but this would
|
||||
// let mut inner = NonTraitWithConstGeneric::<4>;
|
||||
|
||||
// if we don't call this function then it'll compile fine
|
||||
inner.configure(&Config {
|
||||
config: [0, 0, 0, 0],
|
||||
});
|
||||
}
|
7
library/Cargo.toml
Normal file
7
library/Cargo.toml
Normal file
|
@ -0,0 +1,7 @@
|
|||
[package]
|
||||
name = "library"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
path = "lib.rs"
|
38
library/lib.rs
Normal file
38
library/lib.rs
Normal file
|
@ -0,0 +1,38 @@
|
|||
#![allow(incomplete_features)]
|
||||
#![feature(generic_const_exprs)]
|
||||
|
||||
pub trait LibTrait {
|
||||
const NUM: usize;
|
||||
|
||||
fn configure(&mut self, cfg: &Config<{ Self::NUM }>);
|
||||
}
|
||||
|
||||
pub struct Config<const N: usize> {
|
||||
pub config: [u8; N],
|
||||
}
|
||||
|
||||
pub struct ImplementsTraitOverConstGeneric<const N: usize>;
|
||||
|
||||
impl<const N: usize> LibTrait for ImplementsTraitOverConstGeneric<N> {
|
||||
const NUM: usize = N;
|
||||
|
||||
fn configure(&mut self, _: &Config<{ Self::NUM }>) {}
|
||||
}
|
||||
|
||||
// but this works:
|
||||
|
||||
// impl LibTrait for ImplementsTraitOverConstGeneric<4> {
|
||||
// const NUM: usize = 4;
|
||||
|
||||
// fn configure(&mut self, _: &Config<{ Self::NUM }>) {}
|
||||
// }
|
||||
|
||||
// or this:
|
||||
|
||||
pub struct NonTraitWithConstGeneric<const N: usize>;
|
||||
|
||||
impl<const N: usize> NonTraitWithConstGeneric<N> {
|
||||
pub const NUM: usize = N;
|
||||
|
||||
pub fn configure(&mut self, _: &Config<{ Self::NUM }>) {}
|
||||
}
|
2
rust-toolchain.toml
Normal file
2
rust-toolchain.toml
Normal file
|
@ -0,0 +1,2 @@
|
|||
[toolchain]
|
||||
channel = "nightly"
|
Loading…
Reference in a new issue