An enumeration with no enumerators produces an empty LF_FIELDLIST.
get_type_num_enumeration_type dereferences its null last_subtype while
checking for LF_INDEX.  Check that last_subtype exists, as the structure
field-list path already does.

gcc/ChangeLog:

        PR debug/126910
        * dwarf2codeview.cc (get_type_num_enumeration_type): Check for an
        empty field list.

gcc/testsuite/ChangeLog:

        PR debug/126910
        * g++.dg/debug/codeview/pr126910.C: New test.
---
 gcc/dwarf2codeview.cc                          |  3 ++-
 gcc/testsuite/g++.dg/debug/codeview/pr126910.C | 12 ++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/debug/codeview/pr126910.C

diff --git a/gcc/dwarf2codeview.cc b/gcc/dwarf2codeview.cc
index 8786887bdf..ada04079fd 100644
--- a/gcc/dwarf2codeview.cc
+++ b/gcc/dwarf2codeview.cc
@@ -5798,7 +5798,8 @@ get_type_num_enumeration_type (dw_die_ref type, bool 
in_struct)
       ct2 = ct->next;
       ct->next = NULL;
 
-      if (ct->lf_fieldlist.last_subtype->kind == LF_INDEX)
+      if (ct->lf_fieldlist.last_subtype
+         && ct->lf_fieldlist.last_subtype->kind == LF_INDEX)
        ct->lf_fieldlist.last_subtype->lf_index.type_num = last_type;
 
       add_custom_type (ct);
diff --git a/gcc/testsuite/g++.dg/debug/codeview/pr126910.C 
b/gcc/testsuite/g++.dg/debug/codeview/pr126910.C
new file mode 100644
index 0000000000..70bf6a5582
--- /dev/null
+++ b/gcc/testsuite/g++.dg/debug/codeview/pr126910.C
@@ -0,0 +1,12 @@
+// PR debug/126910
+// { dg-do compile }
+// { dg-options "-std=c++11 -O0 -gcodeview" }
+
+// get_type_num_enumeration_type must handle an enum with no enumerators.
+
+enum class E {};
+
+void
+f (E)
+{
+}
-- 
2.55.0.windows.5

Reply via email to