1 // Unit test for the "user substitutions" that are annotated on each
2 // node.
3 
4 struct SomeStruct<T>(T);
5 
no_annot()6 fn no_annot() {
7     let c = 66;
8     let f = SomeStruct;
9     f(&c);
10 }
11 
annot_underscore()12 fn annot_underscore() {
13     let c = 66;
14     let f = SomeStruct::<_>;
15     f(&c);
16 }
17 
annot_reference_any_lifetime()18 fn annot_reference_any_lifetime() {
19     let c = 66;
20     let f = SomeStruct::<&u32>;
21     f(&c);
22 }
23 
annot_reference_static_lifetime()24 fn annot_reference_static_lifetime() {
25     let c = 66;
26     let f = SomeStruct::<&'static u32>;
27     f(&c); //~ ERROR
28 }
29 
annot_reference_named_lifetime<'a>(_d: &'a u32)30 fn annot_reference_named_lifetime<'a>(_d: &'a u32) {
31     let c = 66;
32     let f = SomeStruct::<&'a u32>;
33     f(&c); //~ ERROR
34 }
35 
annot_reference_named_lifetime_ok<'a>(c: &'a u32)36 fn annot_reference_named_lifetime_ok<'a>(c: &'a u32) {
37     let f = SomeStruct::<&'a u32>;
38     f(c);
39 }
40 
annot_reference_named_lifetime_in_closure<'a>(_: &'a u32)41 fn annot_reference_named_lifetime_in_closure<'a>(_: &'a u32) {
42     let _closure = || {
43         let c = 66;
44         let f = SomeStruct::<&'a u32>;
45         f(&c); //~ ERROR
46     };
47 }
48 
annot_reference_named_lifetime_across_closure<'a>(_: &'a u32)49 fn annot_reference_named_lifetime_across_closure<'a>(_: &'a u32) {
50     let f = SomeStruct::<&'a u32>;
51     let _closure = || {
52         let c = 66;
53         f(&c); //~ ERROR
54     };
55 }
56 
annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32)57 fn annot_reference_named_lifetime_in_closure_ok<'a>(c: &'a u32) {
58     let _closure = || {
59         let f = SomeStruct::<&'a u32>;
60         f(c);
61     };
62 }
63 
annot_reference_named_lifetime_across_closure_ok<'a>(c: &'a u32)64 fn annot_reference_named_lifetime_across_closure_ok<'a>(c: &'a u32) {
65     let f = SomeStruct::<&'a u32>;
66     let _closure = || {
67         f(c);
68     };
69 }
70 
main()71 fn main() { }
72