]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass-valgrind/unsized-locals/long-live-the-unsized-temporary.rs
Rollup merge of #55384 - nnethercote:better-integer_lit-float_lit, r=michaelwoerister
[rust.git] / src / test / run-pass-valgrind / unsized-locals / long-live-the-unsized-temporary.rs
1 #![feature(unsized_locals)]
2
3 use std::fmt;
4
5 fn gen_foo() -> Box<fmt::Display> {
6     Box::new(Box::new("foo"))
7 }
8
9 fn foo(x: fmt::Display) {
10     assert_eq!(x.to_string(), "foo");
11 }
12
13 fn foo_indirect(x: fmt::Display) {
14     foo(x);
15 }
16
17 fn main() {
18     foo(*gen_foo());
19     foo_indirect(*gen_foo());
20
21     {
22         let x: fmt::Display = *gen_foo();
23         foo(x);
24     }
25
26     {
27         let x: fmt::Display = *gen_foo();
28         let y: fmt::Display = *gen_foo();
29         foo(x);
30         foo(y);
31     }
32
33     {
34         let mut cnt: usize = 3;
35         let x = loop {
36             let x: fmt::Display = *gen_foo();
37             if cnt == 0 {
38                 break x;
39             } else {
40                 cnt -= 1;
41             }
42         };
43         foo(x);
44     }
45
46     {
47         let x: fmt::Display = *gen_foo();
48         let x = if true {
49             x
50         } else {
51             *gen_foo()
52         };
53         foo(x);
54     }
55 }