diff options
author | Mark Harmstone <mark@harmstone.com> | 2024-07-20 20:18:14 +0100 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2024-07-28 19:05:49 +0200 |
commit | 713ec9f62ba4321b8f82aad47d3f2960ef92a935 (patch) | |
tree | 6d42e7a228cdb24ba508478bc5042b99489a1dd0 /gcc/dwarf2codeview.cc | |
parent | 98fa2f48b5f91a6ac2bb8329de53a456da1015f2 (diff) | |
download | gcc-713ec9f62ba4321b8f82aad47d3f2960ef92a935.zip gcc-713ec9f62ba4321b8f82aad47d3f2960ef92a935.tar.gz gcc-713ec9f62ba4321b8f82aad47d3f2960ef92a935.tar.bz2 |
Output CodeView type information for rvalue references
Translates DW_TAG_rvalue_reference_type DIEs into LF_POINTER types.
gcc/
* dwarf2codeview.cc (get_type_num_reference_type): Handle rvalue refs.
(get_type_num_array_type): Add DW_TAG_rvalue_reference_type to switch.
(get_type_num): Handle DW_TAG_rvalue_reference_type DIEs.
* dwarf2codeview.h (CV_PTR_MODE_RVREF): Define.
Diffstat (limited to 'gcc/dwarf2codeview.cc')
-rw-r--r-- | gcc/dwarf2codeview.cc | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/dwarf2codeview.cc b/gcc/dwarf2codeview.cc index 2317520..b16c696 100644 --- a/gcc/dwarf2codeview.cc +++ b/gcc/dwarf2codeview.cc @@ -2293,11 +2293,11 @@ get_type_num_pointer_type (dw_die_ref type, bool in_struct) return ct->num; } -/* Process a DW_TAG_reference_type DIE, add a new LF_POINTER type, and return - its number. */ +/* Process a DW_TAG_reference_type or DW_TAG_rvalue_reference_type DIE, add a + new LF_POINTER type, and return its number. */ static uint32_t -get_type_num_reference_type (dw_die_ref type, bool in_struct) +get_type_num_reference_type (dw_die_ref type, bool in_struct, bool rvref) { uint32_t base_type_num, byte_size; dw_die_ref base_type; @@ -2318,7 +2318,7 @@ get_type_num_reference_type (dw_die_ref type, bool in_struct) ct->next = NULL; ct->kind = LF_POINTER; ct->lf_pointer.base_type = base_type_num; - ct->lf_pointer.attributes = CV_PTR_MODE_LVREF; + ct->lf_pointer.attributes = rvref ? CV_PTR_MODE_RVREF : CV_PTR_MODE_LVREF; if (byte_size == 4) ct->lf_pointer.attributes |= CV_PTR_NEAR32; @@ -3064,6 +3064,7 @@ get_type_num_array_type (dw_die_ref type, bool in_struct) case DW_TAG_union_type: case DW_TAG_pointer_type: case DW_TAG_reference_type: + case DW_TAG_rvalue_reference_type: size = get_AT_unsigned (t, DW_AT_byte_size); break; @@ -3192,7 +3193,11 @@ get_type_num (dw_die_ref type, bool in_struct, bool no_fwd_ref) break; case DW_TAG_reference_type: - num = get_type_num_reference_type (type, in_struct); + num = get_type_num_reference_type (type, in_struct, false); + break; + + case DW_TAG_rvalue_reference_type: + num = get_type_num_reference_type (type, in_struct, true); break; case DW_TAG_const_type: |