aboutsummaryrefslogtreecommitdiff
path: root/gcc/dwarf2codeview.cc
diff options
context:
space:
mode:
authorMark Harmstone <mark@harmstone.com>2024-07-20 20:18:14 +0100
committerThomas Koenig <tkoenig@gcc.gnu.org>2024-07-28 19:05:49 +0200
commit713ec9f62ba4321b8f82aad47d3f2960ef92a935 (patch)
tree6d42e7a228cdb24ba508478bc5042b99489a1dd0 /gcc/dwarf2codeview.cc
parent98fa2f48b5f91a6ac2bb8329de53a456da1015f2 (diff)
downloadgcc-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.cc15
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: