rust/tests/mir-opt/sroa/lifetimes.rs
Nicholas Nethercote c9c80d2c5f rustfmt tests/mir-opt.
The only non-obvious changes:
- `building/storage_live_dead_in_statics.rs` has a `#[rustfmt::skip]`
  attribute to avoid reformating a table of data.
- Two `.mir` files have slight changes involving line numbers.
- In `unusual_item_types.rs` an `EMIT_MIR` annotation is moved to
  outside a function, which is the usual spot, because `tidy` complains
  if such a comment is indented.

The commit also tweaks the comments in `rustfmt.toml`.
2024-06-03 14:17:16 +10:00

39 lines
803 B
Rust

//@ test-mir-pass: 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>() {
// CHECK-LABEL: fn foo(
// CHECK-NOT: [foo:_.*]: Foo
// CHECK-NOT: Box<dyn std::fmt::Display + 'static>
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::<()>()
}