File tree 2 files changed +69
-0
lines changed
2 files changed +69
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ // Ensure that capturing closures are never coerced to fns
12
+ // Especially interesting as non-capturing closures can be.
13
+
14
+ fn main ( ) {
15
+ let mut a = 0u8 ;
16
+ let foo : fn ( u8 ) -> u8 = |v : u8 | { a += v; a } ;
17
+ //~^ ERROR mismatched types
18
+ let b = 0u8 ;
19
+ let bar : fn ( ) -> u8 = || { b } ;
20
+ //~^ ERROR mismatched types
21
+ let baz : fn ( ) -> u8 = || { b } as fn ( ) -> u8 ;
22
+ //~^ ERROR mismatched types
23
+ //~^^ ERROR non-scalar cast
24
+ }
Original file line number Diff line number Diff line change
1
+ // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2
+ // file at the top-level directory of this distribution and at
3
+ // http://rust-lang.org/COPYRIGHT.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6
+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7
+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8
+ // option. This file may not be copied, modified, or distributed
9
+ // except according to those terms.
10
+
11
+ // ignore-stage0: new feature, remove this when SNAP
12
+ // revisions: a b
13
+
14
+ #[ cfg( a) ]
15
+ mod a {
16
+ const FOO : fn ( u8 ) -> u8 = |v : u8 | { v } ;
17
+ //[a]~^ ERROR non-capturing closure to fn coercion is experimental
18
+ //[a]~^^ ERROR mismatched types
19
+
20
+ const BAR : [ fn ( & mut u32 ) ; 1 ] = [
21
+ |v : & mut u32 | * v += 1 ,
22
+ //[a]~^ ERROR non-capturing closure to fn coercion is experimental
23
+ //[a]~^^ ERROR mismatched types
24
+ ] ;
25
+ }
26
+
27
+ #[ cfg( b) ]
28
+ mod b {
29
+ fn func_specific ( ) -> ( fn ( ) -> u32 ) {
30
+ || return 42
31
+ //[b]~^ ERROR non-capturing closure to fn coercion is experimental
32
+ //[b]~^^ ERROR mismatched types
33
+ }
34
+ fn foo ( ) {
35
+ // Items
36
+ assert_eq ! ( func_specific( ) ( ) , 42 ) ;
37
+ let foo : fn ( u8 ) -> u8 = |v : u8 | { v } ;
38
+ //[b]~^ ERROR non-capturing closure to fn coercion is experimental
39
+ //[b]~^^ ERROR mismatched types
40
+ }
41
+
42
+ }
43
+
44
+
45
+
You can’t perform that action at this time.
0 commit comments