mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-30 14:01:51 +00:00
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:
parent
3cbb93223f
commit
fefd06dc02
46
tests/ui/consts/control-flow/dead_branches_dont_eval.rs
Normal file
46
tests/ui/consts/control-flow/dead_branches_dont_eval.rs
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user