Skip to content

Commit

Permalink
librustc: Pass the correct type when adding cleanups.
Browse files Browse the repository at this point in the history
  • Loading branch information
luqmana committed Dec 6, 2013
1 parent aa4455e commit 920ca61
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/librustc/middle/trans/expr.rs
Expand Up @@ -1293,7 +1293,7 @@ fn trans_adt(bcx: @mut Block, repr: &adt::Repr, discr: ty::Disr,
adt::trans_start_init(bcx, repr, addr, discr);
for &(i, e) in fields.iter() {
let dest = adt::trans_field_ptr(bcx, repr, addr, discr, i);
let e_ty = expr_ty(bcx, e);
let e_ty = expr_ty_adjusted(bcx, e);
bcx = trans_into(bcx, e, SaveIn(dest));
add_clean_temp_mem(bcx, dest, e_ty);
temp_cleanups.push(dest);
Expand Down
3 changes: 1 addition & 2 deletions src/librustc/middle/trans/glue.rs
Expand Up @@ -274,8 +274,7 @@ pub fn call_tydesc_glue_full(bcx: @mut Block,
let ccx = bcx.ccx();
// NB: Don't short-circuit even if this block is unreachable because
// GC-based cleanup needs to the see that the roots are live.
let no_lpads =
ccx.sess.opts.debugging_opts & session::no_landing_pads != 0;
let no_lpads = ccx.sess.opts.debugging_opts & session::no_landing_pads != 0;
if bcx.unreachable && !no_lpads { return; }

let static_glue_fn = match static_ti {
Expand Down
53 changes: 53 additions & 0 deletions src/test/run-pass/issue-9382.rs
@@ -0,0 +1,53 @@
// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[allow(unnecessary_allocation)];

// Tests for a previous bug that occured due to an interaction
// between struct field initialization and the auto-coercion
// from a vector to a slice. The drop glue was being invoked on
// the temporary slice with a wrong type, triggering an LLVM assert.

struct Thing1<'self> {
baz: &'self [~int],
bar: ~u64,
}

struct Thing2<'self> {
baz: &'self [~int],
bar: u64,
}

pub fn main() {
let _t1_fixed = Thing1 {
baz: [],
bar: ~32,
};
let _t1_uniq = Thing1 {
baz: ~[],
bar: ~32,
};
let _t1_at = Thing1 {
baz: @[],
bar: ~32,
};
let _t2_fixed = Thing2 {
baz: [],
bar: 32,
};
let _t2_uniq = Thing2 {
baz: ~[],
bar: 32,
};
let _t2_at = Thing2 {
baz: @[],
bar: 32,
};
}

5 comments on commit 920ca61

@bors
Copy link
Contributor

@bors bors commented on 920ca61 Dec 7, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

saw approval from nikomatsakis
at luqmana@920ca61

@bors
Copy link
Contributor

@bors bors commented on 920ca61 Dec 7, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merging luqmana/rust/9382 = 920ca61 into auto

@bors
Copy link
Contributor

@bors bors commented on 920ca61 Dec 7, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

luqmana/rust/9382 = 920ca61 merged ok, testing candidate = 7c719ec

@bors
Copy link
Contributor

@bors bors commented on 920ca61 Dec 7, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bors
Copy link
Contributor

@bors bors commented on 920ca61 Dec 7, 2013

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fast-forwarding master to auto = 7c719ec

Please sign in to comment.