Skip to content

Commit

Permalink
Rollup merge of #122572 - the8472:test-const-deadness, r=RalfJung
Browse files Browse the repository at this point in the history
add test for #122301 to cover behavior that's on stable

If this ought to be broken it should at least happen intentionally

See #122301
  • Loading branch information
matthiaskrgr authored Mar 17, 2024
2 parents 5c761d8 + fefd06d commit 3fbe203
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions tests/ui/consts/control-flow/dead_branches_dont_eval.rs
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit 3fbe203

Please sign in to comment.