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

--- Comment #5 from Tom de Vries <vries at gcc dot gnu.org> ---
The foo::foo function starts at label .LFB1520, which brings us to:
...
        .uleb128 0x8b   # (DIE (0x5a99) DW_TAG_subprogram)
        .long   0x5a75  # DW_AT_abstract_origin
        .long   .LASF897        # DW_AT_linkage_name:
"foo::foo(std::__cxx11::basic_string<char, st\
d::char_traits<char>, std::allocator<char> >)"
...
with second parameter:
...
        .uleb128 0x59   # (DIE (0x5ac5) DW_TAG_formal_parameter)
        .long   0x5a8c  # DW_AT_abstract_origin
        .uleb128 0x2    # DW_AT_location
        .byte   0x91    # DW_OP_fbreg
        .sleb128 -32
...

The location expression is the generated for:
...
(gdb) call debug_generic_expr (decl)
dir_hint
(gdb) call debug_generic_expr (decl.typed.type)
struct string & restrict
(gdb) p decl_by_reference_p (decl)
$1 = false
...

In contrast, the abstract origin has:
...
(gdb) call debug_generic_expr (decl.decl_common.abstract_origin)
dir_hint
(gdb) call debug_generic_expr (decl.decl_common.abstract_origin.typed.type)
struct string & restrict
(gdb) p decl_by_reference_p (decl.decl_common.abstract_origin)
$3 = true
...

Reply via email to