// skip-filecheck // unit-test: DataflowConstProp // EMIT_MIR_FOR_EACH_BIT_WIDTH #[derive(Copy, Clone)] struct S(i32); #[derive(Copy, Clone)] struct SmallStruct(f32, Option, &'static [f32]); #[derive(Copy, Clone)] struct BigStruct(f32, Option, &'static [f32]); // EMIT_MIR struct.main.DataflowConstProp.diff fn main() { let mut s = S(1); let a = s.0 + 2; s.0 = 3; let b = a + s.0; const SMALL_VAL: SmallStruct = SmallStruct(4., Some(S(1)), &[]); let SmallStruct(a, b, c) = SMALL_VAL; static SMALL_STAT: &SmallStruct = &SmallStruct(9., None, &[13.]); let SmallStruct(a, b, c) = *SMALL_STAT; let ss = SmallStruct(a, b, c); const BIG_VAL: BigStruct = BigStruct(25., None, &[]); let BigStruct(a, b, c) = BIG_VAL; static BIG_STAT: &BigStruct = &BigStruct(82., Some(S(35)), &[45., 72.]); let BigStruct(a, b, c) = *BIG_STAT; // We arbitrarily limit the size of synthetized values to 4 pointers. // `BigStruct` can be read, but we will keep a MIR aggregate for this. let bs = BigStruct(a, b, c); }