1 // unit-test: ScalarReplacementOfAggregates
2 // compile-flags: -Cpanic=abort
8 struct S(Tag, Tag, Tag);
16 S(Tag(0), Tag(1), Tag(2)).1;
19 pub fn enums(a: usize) -> usize {
20 if let Some(a) = Some(a) { a } else { 0 }
23 pub fn structs(a: f32) -> f32 {
32 pub fn unions(a: f32) -> u32 {
37 unsafe { Repr { f: a }.u }
40 #[derive(Copy, Clone)]
53 let Foo { a, b, c, d } = Foo { a: 5, b: (), c: "a", d: Some(-4) };
68 println!("{}", unsafe { *a.add(2) });
72 // Verify this struct is not flattened.
73 f(&Escaping { a: 1, b: 2, c: g() }.a);
84 fn ref_copies(x: &Foo) {
97 copies(Foo { a: 5, b: (), c: "a", d: Some(-4) });
98 ref_copies(&Foo { a: 5, b: (), c: "a", d: Some(-4) });
101 // EMIT_MIR sroa.dropping.ScalarReplacementOfAggregates.diff
102 // EMIT_MIR sroa.enums.ScalarReplacementOfAggregates.diff
103 // EMIT_MIR sroa.structs.ScalarReplacementOfAggregates.diff
104 // EMIT_MIR sroa.unions.ScalarReplacementOfAggregates.diff
105 // EMIT_MIR sroa.flat.ScalarReplacementOfAggregates.diff
106 // EMIT_MIR sroa.escaping.ScalarReplacementOfAggregates.diff
107 // EMIT_MIR sroa.copies.ScalarReplacementOfAggregates.diff
108 // EMIT_MIR sroa.ref_copies.ScalarReplacementOfAggregates.diff