Don't merge vtables when full debuginfo is enabled.
This commit is contained in:
parent
6874f4e3fc
commit
e5995e6168
@ -1499,6 +1499,11 @@ pub fn create_vtable_di_node<'ll, 'tcx>(
|
||||
return;
|
||||
}
|
||||
|
||||
// When full debuginfo is enabled, we want to try and prevent vtables from being
|
||||
// merged. Otherwise debuggers will have a hard time mapping from dyn pointer
|
||||
// to concrete type.
|
||||
llvm::SetUnnamedAddress(vtable, llvm::UnnamedAddr::No);
|
||||
|
||||
let vtable_name =
|
||||
compute_debuginfo_vtable_name(cx.tcx, ty, poly_trait_ref, VTableNameKind::GlobalVariable);
|
||||
let vtable_type_di_node = build_vtable_type_di_node(cx, ty, poly_trait_ref);
|
||||
|
@ -9,6 +9,14 @@
|
||||
// compile-flags: -Cdebuginfo=2 -Copt-level=0 -Csymbol-mangling-version=v0
|
||||
// ignore-tidy-linelength
|
||||
|
||||
// Make sure that vtables don't have the unnamed_addr attribute when debuginfo is enabled.
|
||||
// This helps debuggers more reliably map from dyn pointer to concrete type.
|
||||
// CHECK: @vtable.0 = private constant <{
|
||||
// CHECK: @vtable.1 = private constant <{
|
||||
// CHECK: @vtable.2 = private constant <{
|
||||
// CHECK: @vtable.3 = private constant <{
|
||||
// CHECK: @vtable.4 = private constant <{
|
||||
|
||||
// NONMSVC: ![[USIZE:[0-9]+]] = !DIBasicType(name: "usize"
|
||||
// MSVC: ![[USIZE:[0-9]+]] = !DIDerivedType(tag: DW_TAG_typedef, name: "usize"
|
||||
// NONMSVC: ![[PTR:[0-9]+]] = !DIDerivedType(tag: DW_TAG_pointer_type, name: "*const ()"
|
||||
|
Loading…
x
Reference in New Issue
Block a user