From 64d98f8ee037282c35007b64c2649055c56af1db Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:03 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- tests/ui/close-over-big-then-small-data.rs | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 tests/ui/close-over-big-then-small-data.rs (limited to 'tests/ui/close-over-big-then-small-data.rs') diff --git a/tests/ui/close-over-big-then-small-data.rs b/tests/ui/close-over-big-then-small-data.rs new file mode 100644 index 000000000..429b21e8b --- /dev/null +++ b/tests/ui/close-over-big-then-small-data.rs @@ -0,0 +1,39 @@ +// run-pass + +#![allow(dead_code)] +// If we use GEPi rather than GEP_tup_like when +// storing closure data (as we used to do), the u64 would +// overwrite the u16. + +struct Pair { + a: A, b: B +} + +struct Invoker { + a: A, + b: u16, +} + +trait Invokable { + fn f(&self) -> (A, u16); +} + +impl Invokable for Invoker { + fn f(&self) -> (A, u16) { + (self.a.clone(), self.b) + } +} + +fn f(a: A, b: u16) -> Box+'static> { + Box::new(Invoker { + a: a, + b: b, + }) as Box+'static> +} + +pub fn main() { + let (a, b) = f(22_u64, 44u16).f(); + println!("a={} b={}", a, b); + assert_eq!(a, 22u64); + assert_eq!(b, 44u16); +} -- cgit v1.2.3