blob: c46c13bf7793e58ac8b76872830c311057e5d559 [file] [edit]
//! Regression test for issue <https://github.com/rust-lang/rust/issues/155241>.
//@ run-pass
//@ revisions: noopt opt
//@[noopt] compile-flags: -C opt-level=0
//@[opt] compile-flags: -C opt-level=3
#![feature(fn_traits, stmt_expr_attributes)]
#![expect(unused)]
#[derive(Copy, Clone)]
struct Thing {
x: usize,
y: usize,
z: usize,
}
#[inline(never)]
fn opt_0() {
let value = (Thing { x: 0, y: 0, z: 0 },);
(|mut thing: Thing| {
thing.z = 1;
})
.call(value);
assert_eq!(value.0.z, 0);
}
#[inline(never)]
fn opt_3() {
fn with(f: impl FnOnce(Vec<usize>)) {
f(Vec::new())
}
with(|mut v| v.resize(2, 1));
with(|v| {
if v.len() != 0 {
unreachable!();
}
});
}
#[inline(never)]
fn const_() {
const VALUE: (Thing,) = (Thing { x: 0, y: 0, z: 0 },);
(#[inline(never)]
|mut thing: Thing| {
thing.z = 1;
std::hint::black_box(&mut thing.z);
assert_eq!(thing.z, 1);
})
.call(VALUE);
}
fn main() {
opt_0();
opt_3();
const_();
}