-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
from-craterA regression found via a crater run, not part of our test suiteA regression found via a crater run, not part of our test suite
Description
the crate ml-kem-0.2.1
compiles with the old solver but errors with new
error[E0275]: overflow evaluating the requirement `<P as PkeParams>::NttVectorSize == _`
--> src/param.rs:206:26
|
206 | type NttVectorSize = EncodedPolynomialVectorSize<U12, P::K>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`ml_kem`)
relies on rust-lang/rust#147266 to avoid an ICE.
It's got some very cursed where-clauses, here's a self-contained (only typenum) example:
use typenum::*;
use std::ops::{Add, Div, Mul, Rem, Sub};
pub trait ParameterSet {
type K;
type Du: VectorEncodingSize<Self::K>;
type Dv: EncodingSize;
}
pub trait EncodingSize {
type EncodedPolynomialSize;
type ValueStep;
type ByteStep;
}
impl<D> EncodingSize for D
where
D: Mul<U8> + Gcd<U8> + Mul<U32>,
Prod<D, U8>: Div<Gcf<D, U8>>,
EncodingUnit<D>: Div<D> + Div<U8>,
{
type EncodedPolynomialSize = Prod<D, U32>;
type ValueStep = Quot<EncodingUnit<D>, D>;
type ByteStep = Quot<EncodingUnit<D>, U8>;
}
pub trait VectorEncodingSize<K>: EncodingSize {
type EncodedPolynomialVectorSize;
}
impl<D, K> VectorEncodingSize<K> for D
where
D: EncodingSize,
D::EncodedPolynomialSize: Mul<K>,
Prod<D::EncodedPolynomialSize, K>:
Div<K, Output = D::EncodedPolynomialSize> + Rem<K, Output = U0>,
{
type EncodedPolynomialVectorSize = Prod<D::EncodedPolynomialSize, K>;
}
type EncodingUnit<D> = Quot<Prod<D, U8>, Gcf<D, U8>>;
pub type EncodedPolynomialVectorSize<D, K> =
<D as VectorEncodingSize<K>>::EncodedPolynomialVectorSize;
pub type EncodedPolynomialSize<D> = <D as EncodingSize>::EncodedPolynomialSize;
type EncodedUSize<P> = EncodedPolynomialVectorSize<<P as ParameterSet>::Du, <P as ParameterSet>::K>;
type EncodedVSize<P> = EncodedPolynomialSize<<P as ParameterSet>::Dv>;
fn foo<P>()
where
P: ParameterSet,
U384: Mul<P::K>,
Prod<U384, P::K>: Add<U32> + Div<P::K, Output = U384> + Rem<P::K, Output = U0>,
EncodedUSize<P>: Add<EncodedVSize<P>>,
Sum<EncodedUSize<P>, EncodedVSize<P>>: Sub<EncodedUSize<P>, Output = EncodedVSize<P>>,
EncodedPolynomialVectorSize<U12, P::K>: Add<U32>,
Sum<EncodedPolynomialVectorSize<U12, P::K>, U32>:
Sub<EncodedPolynomialVectorSize<U12, P::K>, Output = U32>,
{
}
fn main() {}
Metadata
Metadata
Assignees
Labels
from-craterA regression found via a crater run, not part of our test suiteA regression found via a crater run, not part of our test suite
Type
Projects
Status
todo