File tree Expand file tree Collapse file tree 3 files changed +44
-2
lines changed
librustc/middle/typeck/check Expand file tree Collapse file tree 3 files changed +44
-2
lines changed Original file line number Diff line number Diff line change @@ -770,8 +770,12 @@ fn visit_expr(rcx: &mut Rcx, expr: &ast::Expr) {
770
770
771
771
{
772
772
let mc = mc:: MemCategorizationContext :: new ( rcx) ;
773
- let head_cmt = ignore_err ! ( mc. cat_expr( & * * head) ) ;
774
- link_pattern ( rcx, mc, head_cmt, & * * pat) ;
773
+ let pat_ty = rcx. resolve_node_type ( pat. id ) ;
774
+ let pat_cmt = mc. cat_rvalue ( pat. id ,
775
+ pat. span ,
776
+ ty:: ReScope ( body. id ) ,
777
+ pat_ty) ;
778
+ link_pattern ( rcx, mc, pat_cmt, & * * pat) ;
775
779
}
776
780
777
781
rcx. visit_expr ( & * * head) ;
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
+ // Test that regionck creates the right region links in the pattern
12
+ // binding of a for loop
13
+ fn foo < ' a > ( v : & ' a [ uint ] ) -> & ' a uint {
14
+ for & ref x in v. iter ( ) { return x; }
15
+ unreachable ! ( )
16
+ }
17
+
18
+ fn main ( ) {
19
+ assert_eq ! ( foo( & [ 0 ] ) , & 0 ) ;
20
+ }
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
+ // Test that regionck uses the right memcat for patterns in for loops
12
+ // and doesn't ICE.
13
+
14
+ fn main ( ) {
15
+ for & & x in Some ( & 0 u) . iter ( ) {
16
+ assert_eq ! ( x, 0 )
17
+ }
18
+ }
You can’t perform that action at this time.
0 commit comments