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>

Reply via email to