@@ -68,6 +68,80 @@ mod fn_once_trait {
6868 }
6969}
7070
71+ mod fn_mut_trait {
72+ fn return_type < F : FnMut ( bool ) -> i64 > ( mut f : F ) {
73+ let _return = f ( true ) ; // $ MISSING: type=_return:i64
74+ }
75+
76+ fn return_type_omitted < F : FnMut ( bool ) > ( mut f : F ) {
77+ let _return = f ( true ) ; // $ MISSING: type=_return:()
78+ }
79+
80+ fn argument_type < F : FnMut ( bool ) -> i64 > ( mut f : F ) {
81+ let arg = Default :: default ( ) ; // $ MISSING: target=default type=arg:bool
82+ f ( arg) ;
83+ }
84+
85+ fn apply < A , B , F : FnMut ( A ) -> B > ( mut f : F , a : A ) -> B {
86+ f ( a)
87+ }
88+
89+ fn apply_two ( mut f : impl FnMut ( i64 ) -> i64 ) -> i64 {
90+ f ( 2 )
91+ }
92+
93+ fn test ( ) {
94+ let f = |x : bool | -> i64 {
95+ if x {
96+ 1
97+ } else {
98+ 0
99+ }
100+ } ;
101+ let _r = apply ( f, true ) ; // $ target=apply MISSING: type=_r:i64
102+
103+ let f = |x| x + 1 ; // $ MISSING: type=x:i64 target=add
104+ let _r2 = apply_two ( f) ; // $ target=apply_two certainType=_r2:i64
105+ }
106+ }
107+
108+ mod fn_trait {
109+ fn return_type < F : Fn ( bool ) -> i64 > ( f : F ) {
110+ let _return = f ( true ) ; // $ MISSING: type=_return:i64
111+ }
112+
113+ fn return_type_omitted < F : Fn ( bool ) > ( f : F ) {
114+ let _return = f ( true ) ; // $ MISSING: type=_return:()
115+ }
116+
117+ fn argument_type < F : Fn ( bool ) -> i64 > ( f : F ) {
118+ let arg = Default :: default ( ) ; // $ MISSING: target=default type=arg:bool
119+ f ( arg) ;
120+ }
121+
122+ fn apply < A , B , F : Fn ( A ) -> B > ( f : F , a : A ) -> B {
123+ f ( a)
124+ }
125+
126+ fn apply_two ( f : impl Fn ( i64 ) -> i64 ) -> i64 {
127+ f ( 2 )
128+ }
129+
130+ fn test ( ) {
131+ let f = |x : bool | -> i64 {
132+ if x {
133+ 1
134+ } else {
135+ 0
136+ }
137+ } ;
138+ let _r = apply ( f, true ) ; // $ target=apply MISSING: type=_r:i64
139+
140+ let f = |x| x + 1 ; // $ MISSING: type=x:i64 target=add
141+ let _r2 = apply_two ( f) ; // $ target=apply_two certainType=_r2:i64
142+ }
143+ }
144+
71145mod dyn_fn_once {
72146 fn apply_boxed < A , B , F : FnOnce ( A ) -> B + ?Sized > ( f : Box < F > , arg : A ) -> B {
73147 f ( arg)
0 commit comments