mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
debuginfo: Create debuginfo for for-loop variables again.
This commit is contained in:
parent
62fb41c32b
commit
6f88258f1d
@ -1554,7 +1554,8 @@ pub fn store_for_loop_binding<'blk, 'tcx>(bcx: Block<'blk, 'tcx>,
|
|||||||
-> Block<'blk, 'tcx> {
|
-> Block<'blk, 'tcx> {
|
||||||
let _icx = push_ctxt("match::store_for_loop_binding");
|
let _icx = push_ctxt("match::store_for_loop_binding");
|
||||||
|
|
||||||
if simple_identifier(&*pat).is_some() {
|
if simple_identifier(&*pat).is_some() &&
|
||||||
|
bcx.sess().opts.debuginfo != FullDebugInfo {
|
||||||
// Generate nicer LLVM for the common case of a `for` loop pattern
|
// Generate nicer LLVM for the common case of a `for` loop pattern
|
||||||
// like `for x in blahblah { ... }`.
|
// like `for x in blahblah { ... }`.
|
||||||
let binding_type = node_id_type(bcx, pat.id);
|
let binding_type = node_id_type(bcx, pat.id);
|
||||||
|
@ -286,6 +286,7 @@ pub fn trans_for<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
|
|||||||
debug!("iterator type is {}, datum type is {}",
|
debug!("iterator type is {}, datum type is {}",
|
||||||
ppaux::ty_to_string(bcx.tcx(), iterator_type),
|
ppaux::ty_to_string(bcx.tcx(), iterator_type),
|
||||||
ppaux::ty_to_string(bcx.tcx(), iterator_datum.ty));
|
ppaux::ty_to_string(bcx.tcx(), iterator_datum.ty));
|
||||||
|
|
||||||
let lliterator = load_ty(bcx, iterator_datum.val, iterator_datum.ty);
|
let lliterator = load_ty(bcx, iterator_datum.val, iterator_datum.ty);
|
||||||
|
|
||||||
// Create our basic blocks and set up our loop cleanups.
|
// Create our basic blocks and set up our loop cleanups.
|
||||||
@ -365,6 +366,8 @@ pub fn trans_for<'blk, 'tcx>(mut bcx: Block<'blk, 'tcx>,
|
|||||||
llpayload,
|
llpayload,
|
||||||
binding_cleanup_scope_id);
|
binding_cleanup_scope_id);
|
||||||
|
|
||||||
|
debuginfo::create_for_loop_var_metadata(body_bcx_in, pat);
|
||||||
|
|
||||||
// Codegen the body.
|
// Codegen the body.
|
||||||
body_bcx_out = trans_block(body_bcx_out, body, expr::Ignore);
|
body_bcx_out = trans_block(body_bcx_out, body, expr::Ignore);
|
||||||
body_bcx_out =
|
body_bcx_out =
|
||||||
|
@ -1049,6 +1049,43 @@ pub fn create_argument_metadata(bcx: Block, arg: &ast::Arg) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Creates debug information for the given for-loop variable.
|
||||||
|
///
|
||||||
|
/// Adds the created metadata nodes directly to the crate's IR.
|
||||||
|
pub fn create_for_loop_var_metadata(bcx: Block, pat: &ast::Pat) {
|
||||||
|
if fn_should_be_ignored(bcx.fcx) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let def_map = &bcx.tcx().def_map;
|
||||||
|
|
||||||
|
pat_util::pat_bindings(def_map, pat, |_, node_id, span, spanned_ident| {
|
||||||
|
let datum = match bcx.fcx.lllocals.borrow().get(&node_id).cloned() {
|
||||||
|
Some(datum) => datum,
|
||||||
|
None => {
|
||||||
|
bcx.sess().span_bug(span,
|
||||||
|
format!("no entry in lllocals table for {}",
|
||||||
|
node_id).as_slice());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if unsafe { llvm::LLVMIsAAllocaInst(datum.val) } == ptr::null_mut() {
|
||||||
|
bcx.sess().span_bug(span, "debuginfo::create_for_loop_var_metadata() - \
|
||||||
|
Referenced variable location is not an alloca!");
|
||||||
|
}
|
||||||
|
|
||||||
|
let scope_metadata = scope_metadata(bcx.fcx, node_id, span);
|
||||||
|
|
||||||
|
declare_local(bcx,
|
||||||
|
spanned_ident.node,
|
||||||
|
datum.ty,
|
||||||
|
scope_metadata,
|
||||||
|
DirectVariable { alloca: datum.val },
|
||||||
|
LocalVariable,
|
||||||
|
span);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_cleanup_debug_loc_for_ast_node<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
|
pub fn get_cleanup_debug_loc_for_ast_node<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
|
||||||
node_id: ast::NodeId,
|
node_id: ast::NodeId,
|
||||||
node_span: Span,
|
node_span: Span,
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ignore-android: FIXME(#10381)
|
// ignore-android: FIXME(#10381)
|
||||||
// ignore-test: Not sure what is going on here --pcwalton
|
|
||||||
// min-lldb-version: 310
|
// min-lldb-version: 310
|
||||||
|
|
||||||
// compile-flags:-g
|
// compile-flags:-g
|
||||||
|
Loading…
Reference in New Issue
Block a user