add test for #122301 to cover behavior that's on stable

if this ought to be broken it should at least happen intentionally
This commit is contained in:
The 8472 2024-03-15 22:25:00 +01:00
parent 3cbb93223f
commit fefd06dc02

View File

@ -0,0 +1,46 @@
//@ build-pass
// issue 122301 - currently the only way to supress
// const eval and codegen of code conditional on some other const
struct Foo<T, const N: usize>(T);
impl<T, const N: usize> Foo<T, N> {
const BAR: () = if N == 0 {
panic!()
};
}
struct Invoke<T, const N: usize>(T);
impl<T, const N: usize> Invoke<T, N> {
const FUN: fn() = if N != 0 {
|| Foo::<T, N>::BAR
} else {
|| {}
};
}
// without closures
struct S<T>(T);
impl<T> S<T> {
const C: () = panic!();
}
const fn bar<T>() { S::<T>::C }
struct ConstIf<T, const N: usize>(T);
impl<T, const N: usize> ConstIf<T, N> {
const VAL: () = if N != 0 {
bar::<T>() // not called for N == 0, and hence not monomorphized
} else {
()
};
}
fn main() {
let _val = Invoke::<(), 0>::FUN();
let _val = ConstIf::<(), 0>::VAL;
}