[Bug middle-end/89303] [8 Regression] memory leak with shared_ptr and enable_shared_from_this
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Feb 13 11:13:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89303
--- Comment #20 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
On:
# .MEM_64 = VDEF <.MEM_63>
MEM[(struct __weak_ptr *)_16]._M_ptr = _16;
stmt_may_clobber_global_p (stmt) returns false.
(gdb) p pt_solution_includes_global
(&cfun->gimple_df->ssa_names->m_vecdata[16]->ssa_name.info.ptr_info->pt)
$99 = false
(gdb) p pt_solution_includes_global
(&cfun->gimple_df->ssa_names->m_vecdata[24]->ssa_name.info.ptr_info->pt)
$100 = true
This makes no sense to me, when _16 is &MEM[(struct __aligned_buffer *)_24 +
16B]._M_storage, thus effectively just POINTER_PLUS_EXPR from _24, it could
have different alignment, but how it can have different points-to info?
(gdb) p debug_tree (cfun->gimple_df->ssa_names->m_vecdata[16])
<ssa_name 0x7fffea38eb88
type <pointer_type 0x7fffea81c000
type <void_type 0x7fffea813f18 void type_6 VOID
align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea813f18
pointer_to_this <pointer_type 0x7fffea81c000>>
public unsigned type_6 DI
size <integer_cst 0x7fffea7f5e28 constant 64>
unit-size <integer_cst 0x7fffea7f5e40 constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea81c000
pointer_to_this <pointer_type 0x7fffea8247e0>>
visited
def_stmt _16 = &MEM[(struct __aligned_buffer *)_24 + 16B]._M_storage;
version:16
ptr-info 0x7fffea39a288>
(gdb) p debug_tree (cfun->gimple_df->ssa_names->m_vecdata[24])
<ssa_name 0x7fffea38edc8
type <pointer_type 0x7fffea5f3a80
type <record_type 0x7fffea5e9348 _Sp_counted_ptr_inplace addressable
tree_2 needs-constructing type_1 type_4 type_5 type_6 BLK
size <integer_cst 0x7fffea5a2c18 constant 320>
unit-size <integer_cst 0x7fffea5f2390 constant 40>
user align:64 warn_if_not_align:0 symtab:0 alias-set -1
canonical-type 0x7fffea5e9348 fields <function_decl 0x7fffea61ae00 __ct >
context <namespace_decl 0x7fffea80f098 std>
full-name "class std::_Sp_counted_ptr_inplace<blob,
std::allocator<blob>, 0>"
needs-constructor needs-destructor X(constX&) this=(X&) n_parents=1
use_template=1 interface-unknown
pointer_to_this <pointer_type 0x7fffea5f3a80> chain <type_decl
0x7fffea5e2c78 _Sp_counted_ptr_inplace>>
sizes-gimplified public unsigned type_6 DI
size <integer_cst 0x7fffea7f5e28 constant 64>
unit-size <integer_cst 0x7fffea7f5e40 constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set 16 canonical-type
0x7fffea5f3a80>
visited
def_stmt _24 = malloc (40);
version:24
ptr-info 0x7fffea39a138>
More information about the Gcc-bugs
mailing list