File tree 3 files changed +62
-1
lines changed
3 files changed +62
-1
lines changed Original file line number Diff line number Diff line change @@ -893,13 +893,14 @@ impl Parser {
893
893
// Parses a procedure type (`proc`). The initial `proc` keyword must
894
894
// already have been parsed.
895
895
pub fn parse_proc_type ( & mut self ) -> Ty_ {
896
+ let bounds = self . parse_optional_ty_param_bounds ( ) ;
896
897
let ( decl, lifetimes) = self . parse_ty_fn_decl ( false ) ;
897
898
TyClosure ( @ClosureTy {
898
899
sigil : OwnedSigil ,
899
900
region : None ,
900
901
purity : ImpureFn ,
901
902
onceness : Once ,
902
- bounds : None ,
903
+ bounds : bounds ,
903
904
decl : decl,
904
905
lifetimes : lifetimes,
905
906
} )
Original file line number Diff line number Diff line change
1
+ // Copyright 2014 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
+ fn is_send < T : Send > ( ) { }
12
+ fn is_freeze < T : Freeze > ( ) { }
13
+ fn is_static < T : ' static > ( ) { }
14
+
15
+ fn main ( ) {
16
+ is_send :: < proc : ( ) > ( ) ;
17
+ //~^ ERROR: instantiating a type parameter with an incompatible type
18
+
19
+ is_freeze :: < proc : ( ) > ( ) ;
20
+ //~^ ERROR: instantiating a type parameter with an incompatible type
21
+
22
+ is_static :: < proc : ( ) > ( ) ;
23
+ //~^ ERROR: instantiating a type parameter with an incompatible type
24
+ }
25
+
Original file line number Diff line number Diff line change
1
+ // Copyright 2014 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
+ fn foo < T > ( ) { }
12
+ fn bar < T > ( _: T ) { }
13
+
14
+ fn is_send < T : Send > ( ) { }
15
+ fn is_freeze < T : Freeze > ( ) { }
16
+ fn is_static < T : ' static > ( ) { }
17
+
18
+ pub fn main ( ) {
19
+ foo :: < proc ( ) > ( ) ;
20
+ foo :: < proc : ( ) > ( ) ;
21
+ foo :: < proc : Send ( ) > ( ) ;
22
+ foo :: < proc : Send + Freeze ( ) > ( ) ;
23
+ foo :: < proc : ' static + Send + Freeze ( ) > ( ) ;
24
+
25
+ is_send :: < proc : Send ( ) > ( ) ;
26
+ is_freeze :: < proc : Freeze ( ) > ( ) ;
27
+ is_static :: < proc : ' static ( ) > ( ) ;
28
+
29
+
30
+ let a = 3 ;
31
+ bar :: < proc : ( ) > ( proc ( ) {
32
+ let b = & a;
33
+ println ! ( "{}" , * b) ;
34
+ } ) ;
35
+ }
You can’t perform that action at this time.
0 commit comments