blob: cc5c0c9bbcdb526f00a7d82a237c8a6e358f8a1e [file] [log] [blame]
// skip-filecheck
// unit-test: ScalarReplacementOfAggregates
// compile-flags: -Cpanic=abort
// no-prefer-dynamic
trait Err {
type Err;
}
struct Foo<T: Err> {
// Check that the `'static` lifetime is erased when creating the local for `x`,
// even if we fail to normalize the type.
x: Result<Box<dyn std::fmt::Display + 'static>, <T as Err>::Err>,
y: u32,
}
// EMIT_MIR lifetimes.foo.ScalarReplacementOfAggregates.diff
fn foo<T: Err>() {
let foo: Foo<T> = Foo {
x: Ok(Box::new(5_u32)),
y: 7_u32,
};
let x = foo.x;
let y = foo.y;
if let Ok(x) = x {
eprintln!("{x} {y}");
}
}
impl Err for () {
type Err = ();
}
fn main() {
foo::<()>()
}