Skip to content

Commit

Permalink
auto merge of #15784 : dotdash/rust/unreach, r=luqmana
Browse files Browse the repository at this point in the history
`call_visit_glue` is only ever called from trans_intrinsic, and the
block won't be unreachable there. Also, the comment doesn't make sense
anymore. When the code was introduced in 38fee95 the function was
also responsible for the cleanup glue, which is no longer the case.

While we're at it, also fixed the debug message to output the right
function name.
  • Loading branch information
bors committed Jul 20, 2014
2 parents 320dbc1 + d368ffd commit 50481f5
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 27 deletions.
31 changes: 5 additions & 26 deletions src/librustc/middle/trans/glue.rs
Expand Up @@ -178,33 +178,12 @@ pub fn lazily_emit_visit_glue(ccx: &CrateContext, ti: &tydesc_info) -> ValueRef
}

// See [Note-arg-mode]
pub fn call_visit_glue(bcx: &Block, v: ValueRef, tydesc: ValueRef,
static_ti: Option<&tydesc_info>) {
let _icx = push_ctxt("call_tydesc_glue_full");
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.
if bcx.unreachable.get() && !ccx.sess().no_landing_pads() { return; }

let static_glue_fn = static_ti.map(|sti| lazily_emit_visit_glue(ccx, sti));

// When static type info is available, avoid casting to a generic pointer.
let llrawptr = if static_glue_fn.is_none() {
PointerCast(bcx, v, Type::i8p(ccx))
} else {
v
};
pub fn call_visit_glue(bcx: &Block, v: ValueRef, tydesc: ValueRef) {
let _icx = push_ctxt("call_visit_glue");

let llfn = {
match static_glue_fn {
None => {
// Select out the glue function to call from the tydesc
let llfnptr = GEPi(bcx, tydesc, [0u, abi::tydesc_field_visit_glue]);
Load(bcx, llfnptr)
}
Some(sgf) => sgf
}
};
// Select the glue function to call from the tydesc
let llfn = Load(bcx, GEPi(bcx, tydesc, [0u, abi::tydesc_field_visit_glue]));
let llrawptr = PointerCast(bcx, v, Type::i8p(bcx.ccx()));

Call(bcx, llfn, [llrawptr], []);
}
Expand Down
2 changes: 1 addition & 1 deletion src/librustc/middle/trans/intrinsic.rs
Expand Up @@ -296,7 +296,7 @@ pub fn trans_intrinsic_call<'a>(mut bcx: &'a Block<'a>, node: ast::NodeId,
let td = *llargs.get(0);
let visitor = *llargs.get(1);
let td = PointerCast(bcx, td, ccx.tydesc_type().ptr_to());
glue::call_visit_glue(bcx, visitor, td, None);
glue::call_visit_glue(bcx, visitor, td);
C_nil(ccx)
}
(_, "offset") => {
Expand Down

0 comments on commit 50481f5

Please sign in to comment.