Generate proper debug info for function pointers

Instead of generating pointer debug info, we're currently generating
subroutine debug info.
This commit is contained in:
Björn Steinbrink 2015-07-13 21:50:21 +02:00
parent 47128b8c7e
commit 9175a16bd8
2 changed files with 17 additions and 1 deletions

View File

@ -796,7 +796,20 @@ pub fn type_metadata<'a, 'tcx>(cx: &CrateContext<'a, 'tcx>,
}
}
ty::TyBareFn(_, ref barefnty) => {
subroutine_type_metadata(cx, unique_type_id, &barefnty.sig, usage_site_span)
let fn_metadata = subroutine_type_metadata(cx,
unique_type_id,
&barefnty.sig,
usage_site_span).metadata;
match debug_context(cx).type_map
.borrow()
.find_metadata_for_unique_id(unique_type_id) {
Some(metadata) => return metadata,
None => { /* proceed normally */ }
};
// This is actually a function pointer, so wrap it in pointer DI
MetadataCreationResult::new(pointer_type_metadata(cx, t, fn_metadata), false)
}
ty::TyClosure(def_id, substs) => {
let infcx = infer::normalizing_infer_ctxt(cx.tcx(), &cx.tcx().tables);

View File

@ -42,6 +42,8 @@
// gdb-check:type = f32
// gdb-command:whatis f64
// gdb-check:type = f64
// gdb-command:whatis fnptr
// gdb-check:type = void (*)(void)
// gdb-command:info functions _yyy
// gdb-check:[...]![...]_yyy([...]);
// gdb-command:continue
@ -65,6 +67,7 @@ fn main() {
let u64: u64 = 64;
let f32: f32 = 2.5;
let f64: f64 = 3.5;
let fnptr : fn() = _zzz;
_zzz(); // #break
if 1 == 1 { _yyy(); }
}