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