diff --git a/src/abg-comparison-priv.h b/src/abg-comparison-priv.h
index 481fc9c6..9802e78f 100644
--- a/src/abg-comparison-priv.h
+++ b/src/abg-comparison-priv.h
@@ -1159,6 +1159,9 @@ struct corpus_diff::priv
 			       size_t &num_filtered_removed,
 			       size_t &num_filtered_changed);
 
+  const string_diff_sptr_map&
+  changed_unreachable_types() const;
+
   const vector<diff_sptr>&
   changed_unreachable_types_sorted() const;
 
diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc
index 1cfc0952..1207729c 100644
--- a/src/abg-comparison.cc
+++ b/src/abg-comparison.cc
@@ -10129,6 +10129,14 @@ corpus_diff::priv::count_unreachable_types(size_t &num_added,
       ++num_filtered_changed;
 }
 
+/// Get the map of diff nodes representing changed unreachable types.
+///
+/// @return the map of diff nodes representing changed unreachable
+/// types.
+const string_diff_sptr_map&
+corpus_diff::priv::changed_unreachable_types() const
+{return changed_unreachable_types_;}
+
 /// Get the sorted vector of diff nodes representing changed
 /// unreachable types.
 ///
@@ -10239,14 +10247,11 @@ corpus_diff::priv::apply_filters_and_compute_diff_stats(diff_stats& stat)
 
       // walk the changed unreachable types to apply categorization
       // filters
-      for (diff_sptrs_type::const_iterator i =
-	     changed_unreachable_types_sorted().begin();
-	   i != changed_unreachable_types_sorted().end();
-	   ++i)
-	{
-	  diff_sptr diff = *i;
-	  ctxt->maybe_apply_filters(diff);
-	}
+      for (auto& diff : changed_unreachable_types_sorted())
+	ctxt->maybe_apply_filters(diff);
+
+      for (auto& entry : changed_unreachable_types())
+	ctxt->maybe_apply_filters(entry.second);
 
       if (get_context()->do_log())
 	{
@@ -11194,7 +11199,8 @@ corpus_diff::has_incompatible_changes() const
   const diff_stats& stats = const_cast<corpus_diff*>(this)->
     apply_filters_and_suppressions_before_reporting();
 
-  return (soname_changed() || architecture_changed()
+  bool has_incompatible_changes  =
+    (soname_changed() || architecture_changed()
 	  || stats.net_num_func_removed() != 0
 	  || (stats.num_func_with_virtual_offset_changes() != 0
 	      // If all reports about functions with sub-type changes
@@ -11205,8 +11211,34 @@ corpus_diff::has_incompatible_changes() const
 	  || stats.net_num_vars_removed() != 0
 	  || stats.net_num_removed_func_syms() != 0
 	  || stats.net_num_removed_var_syms() != 0
-	  || stats.net_num_removed_unreachable_types() != 0
-	  || stats.net_num_changed_unreachable_types() != 0);
+	  || stats.net_num_removed_unreachable_types() != 0);
+
+  // If stats.net_num_changed_unreachable_types() != 0 then walk the
+  // corpus_diff::priv::changed_unreachable_types_, and see if there
+  // is one that is harmful by bitwise and-ing their category with
+  // abigail::comparison::get_default_harmful_categories_bitmap().
+  if (!has_incompatible_changes
+      && stats.net_num_changed_unreachable_types())
+    {
+      // The changed unreachable types can carry harmful changes.
+      // Let's figure if they actually do.
+
+      diff_context_sptr ctxt = context();
+      for (auto &entry : priv_->changed_unreachable_types())
+	{
+	  diff_sptr dif = entry.second;
+
+	  // Let's see if any of the categories of this diff node
+	  // belong to the "harmful" ones.
+	  if (dif->get_category() & get_default_harmful_categories_bitmap())
+	    {
+	      has_incompatible_changes |= true;
+	      break;
+	    }
+	}
+    }
+
+  return has_incompatible_changes;
 }
 
 /// Test if the current instance of @ref corpus_diff carries subtype
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index b3434da5..0569af34 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -351,6 +351,11 @@ test-abidiff-exit/test-PR30034/split/lib64/librte_telemetry.so \
 test-abidiff-exit/test-PR30034/split/lib64/librte_telemetry.so.23 \
 test-abidiff-exit/test-PR30034/split/lib64/librte_telemetry.so.23.2 \
 test-abidiff-exit/test-PR30034/test-PR30034-report-1.txt \
+test-abidiff-exit/test-enumerator-changes1-report-1.txt \
+test-abidiff-exit/test-enumerator-changes1-v0.c \
+test-abidiff-exit/test-enumerator-changes1-v0.o \
+test-abidiff-exit/test-enumerator-changes1-v1.c \
+test-abidiff-exit/test-enumerator-changes1-v1.o \
 \
 test-diff-dwarf/test0-v0.cc		\
 test-diff-dwarf/test0-v0.o			\
diff --git a/tests/data/test-abidiff-exit/test-enumerator-changes1-report-1.txt b/tests/data/test-abidiff-exit/test-enumerator-changes1-report-1.txt
new file mode 100644
index 00000000..cf1c3c82
--- /dev/null
+++ b/tests/data/test-abidiff-exit/test-enumerator-changes1-report-1.txt
@@ -0,0 +1,11 @@
+Functions changes summary: 0 Removed, 0 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+Unreachable types summary: 0 removed, 1 changed, 0 added type
+
+1 changed type unreachable from any public interface:
+
+  [C] 'enum foo' changed:
+    type size hasn't changed
+    1 enumerator insertion:
+      'foo::E1_2' value '2'
+
diff --git a/tests/data/test-abidiff-exit/test-enumerator-changes1-v0.c b/tests/data/test-abidiff-exit/test-enumerator-changes1-v0.c
new file mode 100644
index 00000000..b02c3a07
--- /dev/null
+++ b/tests/data/test-abidiff-exit/test-enumerator-changes1-v0.c
@@ -0,0 +1,16 @@
+/*
+ *
+ * Compile this with:
+ *    gcc -g -c -fno-eliminate-unused-debug-types test-enumerator-changes1-v0.c
+ */
+
+enum foo
+  {
+    E1_O,
+    E1_1
+  };
+
+void
+foo()
+{
+}
diff --git a/tests/data/test-abidiff-exit/test-enumerator-changes1-v0.o b/tests/data/test-abidiff-exit/test-enumerator-changes1-v0.o
new file mode 100644
index 0000000000000000000000000000000000000000..c7cc06e9f50601f5f42e43a63599f8255ec89ab6
GIT binary patch
diff --git a/tests/data/test-abidiff-exit/test-enumerator-changes1-v1.c b/tests/data/test-abidiff-exit/test-enumerator-changes1-v1.c
--- /dev/null
+++ b/tests/data/test-abidiff-exit/test-enumerator-changes1-v1.c
@@ -0,0 +1,17 @@
+/*
+ *
+ * Compile this with:
+ *    gcc -g -c -fno-eliminate-unused-debug-types test-enumerator-changes1-v1.c
+ */
+
+enum foo
+  {
+    E1_O,
+    E1_1,
+    E1_2
+  };
+
+void
+foo()
+{
+}
diff --git a/tests/data/test-abidiff-exit/test-enumerator-changes1-v1.o b/tests/data/test-abidiff-exit/test-enumerator-changes1-v1.o
new file mode 100644
index 0000000000000000000000000000000000000000..9f7e944f8a7a675b5656503939e3374f600a60e9
GIT binary patch
diff --git a/tests/test-abidiff-exit.cc b/tests/test-abidiff-exit.cc
--- a/tests/test-abidiff-exit.cc
+++ b/tests/test-abidiff-exit.cc
@@ -1017,6 +1017,21 @@ InOutSpec in_out_specs[] =
     "data/test-abidiff-exit/test-PR30034/test-PR30034-report-1.txt",
     "output/test-abidiff-exit/test-PR30034/test-PR30034-report-1.txt"
   },
+  {
+    "data/test-abidiff-exit/test-enumerator-changes1-v0.o",
+    "data/test-abidiff-exit/test-enumerator-changes1-v1.o",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "",
+    "--no-default-suppression --non-reachable-types --harmless",
+    abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+    "data/test-abidiff-exit/test-enumerator-changes1-report-1.txt",
+    "output/test-abidiff-exit/test-enumerator-changes1-report-1.txt"
+  },
 #ifdef WITH_BTF
   {
     "data/test-abidiff-exit/btf/test0-v0.o",
