1 // unit-test: ScalarReplacementOfAggregates
2 // compile-flags: -Cpanic=abort
8 struct S(Tag, Tag, Tag);
15 // EMIT_MIR sroa.dropping.ScalarReplacementOfAggregates.diff
17 S(Tag(0), Tag(1), Tag(2)).1;
20 // EMIT_MIR sroa.enums.ScalarReplacementOfAggregates.diff
21 pub fn enums(a: usize) -> usize {
22 if let Some(a) = Some(a) { a } else { 0 }
25 // EMIT_MIR sroa.structs.ScalarReplacementOfAggregates.diff
26 pub fn structs(a: f32) -> f32 {
35 // EMIT_MIR sroa.unions.ScalarReplacementOfAggregates.diff
36 pub fn unions(a: f32) -> u32 {
41 unsafe { Repr { f: a }.u }
55 // EMIT_MIR sroa.flat.ScalarReplacementOfAggregates.diff
57 let Foo { a, b, c, d } = Foo { a: 5, b: (), c: "a", d: Some(-4) };
72 println!("{}", unsafe { *a.add(2) });
75 // EMIT_MIR sroa.escaping.ScalarReplacementOfAggregates.diff
77 // Verify this struct is not flattened.
78 f(&Escaping { a: 1, b: 2, c: g() }.a);