blob: 2356d212f3fb4135abb8cd100676e82b22790d48 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
// 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::<()>()
}
|