File tree Expand file tree Collapse file tree 3 files changed +62
-1
lines changed Expand file tree Collapse file tree 3 files changed +62
-1
lines changed Original file line number Diff line number Diff line change @@ -893,13 +893,14 @@ impl Parser {
893893 // Parses a procedure type (`proc`). The initial `proc` keyword must
894894 // already have been parsed.
895895 pub fn parse_proc_type ( & mut self ) -> Ty_ {
896+ let bounds = self . parse_optional_ty_param_bounds ( ) ;
896897 let ( decl, lifetimes) = self . parse_ty_fn_decl ( false ) ;
897898 TyClosure ( @ClosureTy {
898899 sigil : OwnedSigil ,
899900 region : None ,
900901 purity : ImpureFn ,
901902 onceness : Once ,
902- bounds : None ,
903+ bounds : bounds ,
903904 decl : decl,
904905 lifetimes : lifetimes,
905906 } )
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