File tree Expand file tree Collapse file tree 4 files changed +46
-1
lines changed Expand file tree Collapse file tree 4 files changed +46
-1
lines changed Original file line number Diff line number Diff line change @@ -7,6 +7,6 @@ refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8
8
refs/heads/try2: d0c6ce338884ee21843f4b40bf6bf18d222ce5df
9
9
refs/heads/incoming: d9317a174e434d4c99fc1a37fd7dc0d2f5328d37
10
- refs/heads/dist-snap: d99ca69cf7207e31d7ddffe849a4235cc63899d7
10
+ refs/heads/dist-snap: febd7ee239c1182147317a0e31057a0e69e260ff
11
11
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
12
12
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
Original file line number Diff line number Diff line change @@ -4206,9 +4206,26 @@ fn build_return(bcx: block) {
4206
4206
Br ( bcx, bcx. fcx . llreturn ) ;
4207
4207
}
4208
4208
4209
+ fn ignore_lhs ( _bcx : block , local : @ast:: local ) -> bool {
4210
+ match local. node . pat . node {
4211
+ ast:: pat_wild => true , _ => false
4212
+ }
4213
+ }
4214
+
4209
4215
fn init_local ( bcx : block , local : @ast:: local ) -> block {
4210
4216
let _icx = bcx. insn_ctxt ( ~"init_local") ;
4211
4217
let ty = node_id_type ( bcx, local. node . id ) ;
4218
+
4219
+ if ignore_lhs ( bcx, local) {
4220
+ // Handle let _ = e; just like e;
4221
+ match local. node . init {
4222
+ some( init) => {
4223
+ return trans_expr ( bcx, init. expr , ignore) ;
4224
+ }
4225
+ none => { return bcx; }
4226
+ }
4227
+ }
4228
+
4212
4229
let llptr = match bcx. fcx . lllocals . find ( local. node . id ) {
4213
4230
some( local_mem( v) ) => v,
4214
4231
_ => { bcx. tcx ( ) . sess . span_bug ( local. span ,
Original file line number Diff line number Diff line change
1
+ // This test should behave exactly like issue-2735-3
2
+ class defer {
3
+ let b: & mut bool;
4
+ new ( b: & mut bool) {
5
+ self . b = b;
6
+ }
7
+ drop { * ( self . b ) = true ; }
8
+ }
9
+
10
+ fn main ( ) {
11
+ let mut dtor_ran = false ;
12
+ let _ = defer ( & mut dtor_ran) ;
13
+ assert ( dtor_ran) ;
14
+ }
Original file line number Diff line number Diff line change
1
+ // This test should behave exactly like issue-2735-2
2
+ class defer {
3
+ let b: & mut bool;
4
+ new ( b: & mut bool) {
5
+ self . b = b;
6
+ }
7
+ drop { * ( self . b ) = true ; }
8
+ }
9
+
10
+ fn main ( ) {
11
+ let mut dtor_ran = false ;
12
+ defer ( & mut dtor_ran) ;
13
+ assert ( dtor_ran) ;
14
+ }
You can’t perform that action at this time.
0 commit comments