https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101219

--- Comment #4 from Sergei Trofimovich <slyfox at gcc dot gnu.org> ---
Got the same mednafen crash today. Poked slightly at the context in gdb.

>From what I understand the crash happens when analysing statement `void
(PCEFast_PSG::*ch_0)(int, int *);`. There is no access to the any object field
implied by `TYPE_BINFO (access_type)`. Or is there? Should it refer to `class
PCEFast_PSG`?

(gdb) fr 1
#1  0x000000000079ff83 in finish_non_static_data_member (decl=0x7ffff7652a18,
object=0x7ffff7796860, qualifying_scope=0x0) at
/home/slyfox/dev/git/gcc/gcc/cp/semantics.c:2208
2208          perform_or_defer_access_check (TYPE_BINFO (access_type), decl,

(gdb) list
2203         QUALIFYING_SCOPE is also non-null.  */
2204      else
2205        {
2206          volatile tree access_type = TREE_TYPE (object);
2207
2208          perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
2209                                         decl, tf_warning_or_error);
2210
2211          /* If the data member was named `C::M', convert `*this' to `C'
2212             first.  */

(gdb) call print_tree(object)
No symbol "print_tree" in current context.
(gdb) call debug_tree(object)
 <ptrmem_cst 0x7ffff7796860
    type <record_type 0x7ffff77a1bd0 type_2 type_6 TI
        size <integer_cst 0x7ffff7625f18 constant 128>
        unit-size <integer_cst 0x7ffff7625f30 constant 16>
        align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff77a1bd0
        fields <field_decl 0x7ffff7652a18 __pfn type <pointer_type
0x7ffff77a1b28>
            unsigned nonaddressable DI psg.cpp.cpp:5:39
            size <integer_cst 0x7ffff7625ed0 constant 64>
            unit-size <integer_cst 0x7ffff7625ee8 constant 8>
            align:64 warn_if_not_align:0 offset_align 128
            offset <integer_cst 0x7ffff7625f00 constant 0>
            bit-offset <integer_cst 0x7ffff7625f48 constant 0> context
<record_type 0x7ffff77a1bd0> chain <field_decl 0x7ffff7652ab0 __delta>>
        ptrmemfunc fn type <pointer_type 0x7ffff77a1b28 type <method_type
0x7ffff77a17e0>
            public unsigned type_6 DI size <integer_cst 0x7ffff7625ed0 64>
unit-size <integer_cst 0x7ffff7625ee8 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff77a1b28>
        chain <type_decl 0x7ffff7652b48 __ptrmemfunc_type>>
    constant>

(gdb) call debug_tree(access_type)
 <record_type 0x7ffff77a1bd0 type_2 type_6 TI
    size <integer_cst 0x7ffff7625f18 type <integer_type 0x7ffff76430a8
bitsizetype> constant 128>
    unit-size <integer_cst 0x7ffff7625f30 type <integer_type 0x7ffff7643000
sizetype> constant 16>
    align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff77a1bd0
    fields <field_decl 0x7ffff7652a18 __pfn
        type <pointer_type 0x7ffff77a1b28 type <method_type 0x7ffff77a17e0>
            public unsigned type_6 DI
            size <integer_cst 0x7ffff7625ed0 constant 64>
            unit-size <integer_cst 0x7ffff7625ee8 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff77a1b28>
        unsigned nonaddressable DI psg.cpp.cpp:5:39 size <integer_cst
0x7ffff7625ed0 64> unit-size <integer_cst 0x7ffff7625ee8 8>
        align:64 warn_if_not_align:0 offset_align 128
        offset <integer_cst 0x7ffff7625f00 constant 0>
        bit-offset <integer_cst 0x7ffff7625f48 constant 0> context <record_type
0x7ffff77a1bd0>
        chain <field_decl 0x7ffff7652ab0 __delta type <integer_type
0x7ffff7643738 long int>
            nonaddressable DI psg.cpp.cpp:5:39 size <integer_cst 0x7ffff7625ed0
64> unit-size <integer_cst 0x7ffff7625ee8 8>
            align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7625f00 0> bit-offset <integer_cst 0x7ffff7625ed0 64> context
<record_type 0x7ffff77a1bd0>>> ptrmemfunc fn type <pointer_type 0x7ffff77a1b28>
    chain <type_decl 0x7ffff7652b48 __ptrmemfunc_type>>

Reply via email to