diff --git a/src/abg-ir-priv.h b/src/abg-ir-priv.h
index 21734b25..b6f9354e 100644
--- a/src/abg-ir-priv.h
+++ b/src/abg-ir-priv.h
@@ -419,6 +419,7 @@ struct environment::priv
   // the canonical type propagation is cancelled, the canonical types
   // must be cleared.
   pointer_set		types_with_non_confirmed_propagated_ct_;
+  pointer_set		recursive_types_;
 #ifdef WITH_DEBUG_SELF_COMPARISON
   // This is used for debugging purposes.
   // When abidw is used with the option --debug-abidiff, some
@@ -518,11 +519,19 @@ struct environment::priv
   void
   cache_type_comparison_result(T& first, T& second, bool r)
   {
-    if (allow_type_comparison_results_caching())
-      type_comparison_results_cache_.emplace
-	(std::make_pair(reinterpret_cast<uint64_t>(&first),
-			reinterpret_cast<uint64_t>(&second)),
-	 r);
+    if (allow_type_comparison_results_caching()
+	&& (r == false
+	    ||
+	    (!is_recursive_type(&first)
+	     && !is_recursive_type(&second)
+	     && !is_type(&first)->priv_->depends_on_recursive_type()
+	     && !is_type(&second)->priv_->depends_on_recursive_type())))
+      {
+	type_comparison_results_cache_.emplace
+	  (std::make_pair(reinterpret_cast<uint64_t>(&first),
+			  reinterpret_cast<uint64_t>(&second)),
+	   r);
+      }
   }
 
   /// Retrieve the result of comparing two sub-types from the cache,
@@ -749,9 +758,30 @@ struct environment::priv
     result |=
       mark_dependant_types(right,
 			   right_type_comp_operands_);
+    recursive_types_.insert(reinterpret_cast<uintptr_t>(right));
     return result;
   }
 
+  /// Test if a type is a recursive one.
+  ///
+  /// @param t the type to consider.
+  ///
+  /// @return true iff @p t is recursive.
+  bool
+  is_recursive_type(const type_base* t)
+  {
+    return (recursive_types_.find(reinterpret_cast<uintptr_t>(t))
+	    != recursive_types_.end());
+  }
+
+
+  /// Unflag a type as being recursive
+  ///
+  /// @param t the type to unflag
+  void
+  set_is_not_recursive(const type_base* t)
+  {recursive_types_.erase(reinterpret_cast<uintptr_t>(t));}
+
   /// Propagate the canonical type of a type to another one.
   ///
   /// @param src the type to propagate the canonical type from.
@@ -786,7 +816,8 @@ struct environment::priv
     for (auto i : types_with_non_confirmed_propagated_ct_)
       {
 	type_base *t = reinterpret_cast<type_base*>(i);
-	ABG_ASSERT(t->priv_->depends_on_recursive_type());
+	ABG_ASSERT(t->get_environment()->priv_->is_recursive_type(t)
+		   || t->priv_->depends_on_recursive_type());
 	t->priv_->set_does_not_depend_on_recursive_type(dependant_type);
 	if (!t->priv_->depends_on_recursive_type())
 	  to_remove.insert(i);
@@ -858,7 +889,8 @@ struct environment::priv
     for (auto i : to_remove)
       {
 	type_base *t = reinterpret_cast<type_base*>(i);
-	ABG_ASSERT(t->priv_->depends_on_recursive_type());
+	ABG_ASSERT(t->get_environment()->priv_->is_recursive_type(t)
+		   || t->priv_->depends_on_recursive_type());
 	type_base_sptr canonical = t->priv_->canonical_type.lock();
 	if (canonical)
 	  {
diff --git a/src/abg-ir.cc b/src/abg-ir.cc
index 42442791..905d1b43 100644
--- a/src/abg-ir.cc
+++ b/src/abg-ir.cc
@@ -382,7 +382,9 @@ bool
 mark_dependant_types_compared_until(const type_base &r)
 {
   const environment * env = r.get_environment();
-  return env->priv_->mark_dependant_types_compared_until(&r);
+  if (env->do_on_the_fly_canonicalization())
+    return env->priv_->mark_dependant_types_compared_until(&r);
+  return false;
 }
 
 /// @brief the location of a token represented in its simplest form.
@@ -920,6 +922,22 @@ is_comparison_cycle_detected(T& l, T& r)
   return result ;
 }
 
+/// Detect if a recursive comparison cycle is detected while
+/// structurally comparing two @ref class_decl types.
+///
+/// @param l the left-hand-side operand of the current comparison.
+///
+/// @param r the right-hand-side operand of the current comparison.
+///
+/// @return true iff a comparison cycle is detected.
+template<>
+bool
+is_comparison_cycle_detected(const class_decl& l, const class_decl& r)
+{
+  return is_comparison_cycle_detected(static_cast<const class_or_union&>(l),
+				      static_cast<const class_or_union&>(r));
+}
+
 /// This macro is to be used while comparing composite types that
 /// might recursively refer to themselves.  Comparing two such types
 /// might get us into a cyle.
@@ -968,6 +986,22 @@ mark_types_as_being_compared(T& l, T&r)
   push_composite_type_comparison_operands(l, r);
 }
 
+/// Mark a pair of @ref class_decl types as being compared.
+///
+/// This is helpful to later detect recursive cycles in the comparison
+/// stack.
+///
+/// @param l the left-hand-side operand of the comparison.
+///
+/// @parm r the right-hand-side operand of the comparison.
+template<>
+void
+mark_types_as_being_compared(const class_decl& l, const class_decl &r)
+{
+  return mark_types_as_being_compared(static_cast<const class_or_union&>(l),
+				      static_cast<const class_or_union&>(r));
+}
+
 /// Mark a pair of types as being not compared anymore.
 ///
 /// This is helpful to later detect recursive cycles in the comparison
@@ -987,6 +1021,26 @@ unmark_types_as_being_compared(T& l, T&r)
   pop_composite_type_comparison_operands(l, r);
 }
 
+/// Mark a pair of @ref class_decl types as being not compared
+/// anymore.
+///
+/// This is helpful to later detect recursive cycles in the comparison
+/// stack.
+///
+/// Note that the types must have been passed to
+/// mark_types_as_being_compared prior to calling this function.
+///
+/// @param l the left-hand-side operand of the comparison.
+///
+/// @parm r the right-hand-side operand of the comparison.
+template<>
+void
+unmark_types_as_being_compared(const class_decl& l, const class_decl &r)
+{
+  return unmark_types_as_being_compared(static_cast<const class_or_union&>(l),
+					static_cast<const class_or_union&>(r));
+}
+
 /// Return the result of the comparison of two (sub) types.
 ///
 /// The function does the necessary book keeping before returning the
@@ -1020,7 +1074,7 @@ return_comparison_result(T& l, T& r, bool value,
   unmark_types_as_being_compared(l, r);
 
   const environment* env = l.get_environment();
-  if (propagate_canonical_type && env->do_on_the_fly_canonicalization())
+  if (env->do_on_the_fly_canonicalization())
     // We are instructed to perform the "canonical type propagation"
     // optimization, making 'r' to possibly get the canonical type of
     // 'l' if it has one.  This mostly means that we are currently
@@ -1028,8 +1082,8 @@ return_comparison_result(T& l, T& r, bool value,
     // the 'r' argument.
     {
       if (value == true
-	  && is_type(&r)->priv_->depends_on_recursive_type()
-	  && !env->priv_->right_type_comp_operands_.empty()
+	  && (is_type(&r)->priv_->depends_on_recursive_type()
+	      || env->priv_->is_recursive_type(&r))
 	  && is_type(&r)->priv_->canonical_type_propagated())
 	{
 	  // Track the object 'r' for which the propagated canonical
@@ -1048,10 +1102,12 @@ return_comparison_result(T& l, T& r, bool value,
 	  // sub-types that were compared during the comparison of
 	  // 'r'.
 	  env->priv_->confirm_ct_propagation(&r);
-	  if (is_type(&r)->priv_->depends_on_recursive_type())
+	  if (is_type(&r)->priv_->depends_on_recursive_type()
+	      || env->priv_->is_recursive_type(&r))
 	    {
 	      is_type(&r)->priv_->set_does_not_depend_on_recursive_type();
 	      env->priv_->remove_from_types_with_non_confirmed_propagated_ct(&r);
+	      env->priv_->set_is_not_recursive(&r);
 	    }
 	}
       else if (value == false)
@@ -1062,7 +1118,8 @@ return_comparison_result(T& l, T& r, bool value,
 	  // should see their tentatively propagated canonical type
 	  // cancelled.
 	  env->priv_->cancel_ct_propagation(&r);
-	  if (is_type(&r)->priv_->depends_on_recursive_type())
+	  if (is_type(&r)->priv_->depends_on_recursive_type()
+	      || env->priv_->is_recursive_type(&r))
 	    {
 	      // The right-hand-side operand cannot carry any tentative
 	      // canonical type at this point.
@@ -14051,10 +14108,10 @@ compare_types_during_canonicalization(const type_base_sptr& canonical_type,
   if (env->debug_type_canonicalization_is_on())
     {
       bool canonical_equality = false, structural_equality = false;
-      env->priv_->use_canonical_type_comparison_ = true;
-      canonical_equality = canonical_type == candidate_type;
       env->priv_->use_canonical_type_comparison_ = false;
       structural_equality = canonical_type == candidate_type;
+      env->priv_->use_canonical_type_comparison_ = true;
+      canonical_equality = canonical_type == candidate_type;
       if (canonical_equality != structural_equality)
 	{
 	  std::cerr << "structural & canonical equality different for type: "
@@ -14208,7 +14265,6 @@ type_base::get_canonical_type_for(type_base_sptr t)
 	  // the decl-only-class-being-equal-to-a-matching-definition
 	  // flags.
 	  env->priv_->allow_type_comparison_results_caching(false);
-	  env->priv_->clear_type_comparison_results_cache();
 	  env->do_on_the_fly_canonicalization(false);
 	  env->decl_only_class_equals_definition
 	    (saved_decl_only_class_equals_definition);
@@ -23626,8 +23682,7 @@ equals(const class_decl& l, const class_decl& r, change_kind* k)
 		      static_cast<const class_or_union&>(r),
 		      k));
 
-  RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(static_cast<const class_or_union&>(l),
-					   static_cast<const class_or_union&>(r));
+  RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r);
 
   bool had_canonical_type = !!r.get_naked_canonical_type();
   bool result = true;
@@ -23640,13 +23695,9 @@ equals(const class_decl& l, const class_decl& r, change_kind* k)
 	ABG_RETURN(result);
     }
 
-  mark_types_as_being_compared(static_cast<const class_or_union&>(l),
-			       static_cast<const class_or_union&>(r));
+  mark_types_as_being_compared(l, r);
 
-#define RETURN(value)							 \
-  return return_comparison_result(static_cast<const class_or_union&>(l), \
-				  static_cast<const class_or_union&>(r), \
-				  value);
+#define RETURN(value) return return_comparison_result(l, r, value);
 
   // If comparing the class_or_union 'part' of the type led to
   // canonical type propagation, then cancel that because it's too
@@ -24768,10 +24819,19 @@ union_decl::~union_decl()
 bool
 equals(const union_decl& l, const union_decl& r, change_kind* k)
 {
+
+  RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r);
+
+#define RETURN(value)				\
+  return return_comparison_result(l, r, value);
+
   bool result = equals(static_cast<const class_or_union&>(l),
 		       static_cast<const class_or_union&>(r),
 		       k);
-  ABG_RETURN(result);
+
+  mark_types_as_being_compared(l, r);
+
+  RETURN(result);
 }
 
 /// Copy a method of a @ref union_decl into a new @ref
diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt
index 367929c7..9cefdfc2 100644
--- a/tests/data/test-abidiff/test-PR18791-report0.txt
+++ b/tests/data/test-abidiff/test-PR18791-report0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 1 Removed, 60 Changed, 1 Added functions
+Functions changes summary: 1 Removed, 36 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Removed function:
@@ -9,113 +9,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   [A] 'method void std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_clear()'
 
-60 functions with some indirect sub-type change:
-
-  [C] 'method bool sigc::connection::block(bool)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      in pointed to type 'struct sigc::connection':
-        type size hasn't changed
-        1 data member change:
-          type of 'sigc::slot_base* slot_' changed:
-            in pointed to type 'class sigc::slot_base':
-              type size hasn't changed
-              1 data member change:
-                type of 'sigc::slot_base::rep_type* rep_' changed:
-                  in pointed to type 'typedef sigc::slot_base::rep_type':
-                    underlying type 'struct sigc::internal::slot_rep' changed:
-                      type size hasn't changed
-                      1 base class change:
-                        'struct sigc::trackable' changed:
-                          type size hasn't changed
-                          1 data member change:
-                            type of 'sigc::internal::trackable_callback_list* callback_list_' changed:
-                              in pointed to type 'struct sigc::internal::trackable_callback_list':
-                                type size changed from 192 to 256 (in bits)
-                                2 data member changes:
-                                  type of 'sigc::internal::trackable_callback_list::callback_list callbacks_' changed:
-                                    underlying type 'class std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
-                                      type name changed from 'std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
-                                      type size changed from 128 to 192 (in bits)
-                                      1 base class change:
-                                        'class std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
-                                          type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
-                                          type size changed from 128 to 192 (in bits)
-                                          1 data member change:
-                                            type of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl _M_impl' changed:
-                                              type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl'
-                                              type size changed from 128 to 192 (in bits)
-                                              1 data member change:
-                                                type of 'std::__detail::_List_node_base _M_node' changed:
-                                                  type name changed from 'std::__detail::_List_node_base' to 'std::_List_node<long unsigned int>'
-                                                  type size changed from 128 to 192 (in bits)
-                                                  1 base class insertion:
-                                                    struct std::__detail::_List_node_base
-                                                  2 data member deletions:
-                                                    'std::__detail::_List_node_base* _M_next', at offset 0 (in bits)
-                                                    'std::__detail::_List_node_base* _M_prev', at offset 64 (in bits)
-                                                  1 data member insertion:
-                                                    'unsigned long int _M_data', at offset 128 (in bits)
-                                                and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node'
-                                            and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl'
-                                  'bool clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
-
-  [C] 'method bool sigc::connection::blocked()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'const sigc::connection*' has sub-type changes:
-      in pointed to type 'const sigc::connection':
-        unqualified underlying type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method sigc::connection::connection(const sigc::connection&)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-    parameter 1 of type 'const sigc::connection&' has sub-type changes:
-      in referenced type 'const sigc::connection':
-        unqualified underlying type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method sigc::connection::connection()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method sigc::connection::connection(sigc::slot_base&)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-    parameter 1 of type 'sigc::slot_base&' has sub-type changes:
-      referenced type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method void sigc::connection::disconnect()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method bool sigc::connection::empty()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'const sigc::connection*' has sub-type changes:
-      in pointed to type 'const sigc::connection':
-        unqualified underlying type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method bool sigc::connection::operator bool()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method sigc::connection& sigc::connection::operator=(const sigc::connection&)' has some indirect sub-type changes:
-    return type changed:
-      referenced type 'struct sigc::connection' changed, as reported earlier
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-    parameter 1 of type 'const sigc::connection&' has sub-type changes:
-      in referenced type 'const sigc::connection':
-        unqualified underlying type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method void sigc::connection::set_slot(sigc::slot_base*)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-    parameter 1 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method bool sigc::connection::unblock()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
-
-  [C] 'method sigc::connection::~connection(int)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
-      pointed to type 'struct sigc::connection' changed, as reported earlier
+36 functions with some indirect sub-type change:
 
   [C] 'method void sigc::internal::signal_impl::block(bool)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
@@ -134,7 +28,16 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
                     type name changed from 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl' to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl'
                     type size changed from 128 to 192 (in bits)
                     1 data member change:
-                      type of 'std::__detail::_List_node_base _M_node' changed, as reported earlier
+                      type of 'std::__detail::_List_node_base _M_node' changed:
+                        type name changed from 'std::__detail::_List_node_base' to 'std::_List_node<long unsigned int>'
+                        type size changed from 128 to 192 (in bits)
+                        1 base class insertion:
+                          struct std::__detail::_List_node_base
+                        2 data member deletions:
+                          'std::__detail::_List_node_base* _M_next', at offset 0 (in bits)
+                          'std::__detail::_List_node_base* _M_prev', at offset 64 (in bits)
+                        1 data member insertion:
+                          'unsigned long int _M_data', at offset 128 (in bits)
                       and name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node'
                   and name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl'
 
@@ -150,9 +53,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::connect(const sigc::slot_base&)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
       pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
-    parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
-      in referenced type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
 
   [C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::erase(sigc::internal::signal_impl::iterator_type)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
@@ -161,9 +61,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::insert(sigc::internal::signal_impl::iterator_type, const sigc::slot_base&)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
       pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
-    parameter 2 of type 'const sigc::slot_base&' has sub-type changes:
-      in referenced type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
 
   [C] 'method sigc::internal::signal_impl::signal_impl()' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
@@ -183,12 +80,31 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
 
   [C] 'method void sigc::internal::slot_rep::disconnect()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::internal::slot_rep*' has sub-type changes:
-      pointed to type 'struct sigc::internal::slot_rep' changed, as reported earlier
+    implicit parameter 0 of type 'sigc::internal::slot_rep*' changed:
+      in pointed to type 'struct sigc::internal::slot_rep':
 
   [C] 'method void sigc::internal::trackable_callback_list::add_callback(void*)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
-      pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
+      in pointed to type 'struct sigc::internal::trackable_callback_list':
+        type size changed from 192 to 256 (in bits)
+        2 data member changes:
+          type of 'sigc::internal::trackable_callback_list::callback_list callbacks_' changed:
+            underlying type 'class std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
+              type name changed from 'std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
+              type size changed from 128 to 192 (in bits)
+              1 base class change:
+                'class std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
+                  type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
+                  type size changed from 128 to 192 (in bits)
+                  1 data member change:
+                    type of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl _M_impl' changed:
+                      type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl'
+                      type size changed from 128 to 192 (in bits)
+                      1 data member change:
+                        type of 'std::__detail::_List_node_base _M_node' changed, as reported earlier
+                        and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node'
+                    and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl'
+          'bool clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
 
   [C] 'method void sigc::internal::trackable_callback_list::clear()' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
@@ -208,7 +124,10 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         type size hasn't changed
         1 base class change:
           'struct sigc::trackable' changed:
-            details were reported earlier
+            type size hasn't changed
+            1 data member change:
+              type of 'sigc::internal::trackable_callback_list* callback_list_' changed:
+                pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
         1 data member change:
           type of 'sigc::internal::signal_impl* impl_' changed:
             pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
@@ -225,9 +144,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'method sigc::signal_base::iterator_type sigc::signal_base::connect(const sigc::slot_base&)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
       pointed to type 'struct sigc::signal_base' changed, as reported earlier
-    parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
-      in referenced type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
 
   [C] 'method sigc::signal_base::iterator_type sigc::signal_base::erase(sigc::signal_base::iterator_type)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
@@ -243,9 +159,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'method sigc::signal_base::iterator_type sigc::signal_base::insert(sigc::signal_base::iterator_type, const sigc::slot_base&)' has some indirect sub-type changes:
     implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
       pointed to type 'struct sigc::signal_base' changed, as reported earlier
-    parameter 2 of type 'const sigc::slot_base&' has sub-type changes:
-      in referenced type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
 
   [C] 'method sigc::signal_base& sigc::signal_base::operator=(const sigc::signal_base&)' has some indirect sub-type changes:
     return type changed:
@@ -280,68 +193,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
       pointed to type 'struct sigc::signal_base' changed, as reported earlier
 
-  [C] 'method void sigc::slot_base::add_destroy_notify_callback(void*)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
-      in pointed to type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method bool sigc::slot_base::block(bool)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method void sigc::slot_base::disconnect()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method bool sigc::slot_base::operator bool()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
-      in pointed to type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method sigc::slot_base& sigc::slot_base::operator=(const sigc::slot_base&)' has some indirect sub-type changes:
-    return type changed:
-      referenced type 'class sigc::slot_base' changed, as reported earlier
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-    parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
-      in referenced type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method void sigc::slot_base::remove_destroy_notify_callback(void*)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
-      in pointed to type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method void sigc::slot_base::set_parent(void*)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
-      in pointed to type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method sigc::slot_base::slot_base(sigc::slot_base::rep_type*)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-    parameter 1 of type 'sigc::slot_base::rep_type*' has sub-type changes:
-      pointed to type 'typedef sigc::slot_base::rep_type' changed, as reported earlier
-
-  [C] 'method sigc::slot_base::slot_base()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method sigc::slot_base::slot_base(const sigc::slot_base&)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-    parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
-      in referenced type 'const sigc::slot_base':
-        unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method bool sigc::slot_base::unblock()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-
-  [C] 'method sigc::slot_base::~slot_base(int)' has some indirect sub-type changes:
-    implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
-      pointed to type 'class sigc::slot_base' changed, as reported earlier
-
   [C] 'method void sigc::trackable::add_destroy_notify_callback(void*)' has some indirect sub-type changes:
     implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes:
       in pointed to type 'const sigc::trackable':
diff --git a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
index 02879fcb..328ce804 100644
--- a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
+++ b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
@@ -89,7 +89,12 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
     parameter 1 of type 'lttng_action*' has sub-type changes:
       in pointed to type 'struct lttng_action':
         type size hasn't changed
-        2 data member changes:
+        3 data member changes:
+          type of 'action_validate_cb validate' changed:
+            underlying type 'bool (lttng_action*)*' changed:
+              in pointed to type 'function type bool (lttng_action*)':
+                parameter 1 of type 'lttng_action*' has sub-type changes:
+                  pointed to type 'struct lttng_action' changed, as being reported
           type of 'action_serialize_cb serialize' changed:
             underlying type 'typedef ssize_t (lttng_action*, char*)*' changed:
               in pointed to type 'function type typedef ssize_t (lttng_action*, char*)':
diff --git a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
index 546942fe..57b11a8a 100644
--- a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
@@ -68,7 +68,7 @@
 ================ end of changes of 'libssl3.so'===============
 
 ================ changes of 'libsmime3.so'===============
-  Functions changes summary: 0 Removed, 1 Changed (127 filtered out), 0 Added functions
+  Functions changes summary: 0 Removed, 1 Changed (146 filtered out), 0 Added functions
   Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   1 function with some indirect sub-type change:
@@ -82,12 +82,12 @@
               type of 'NSSCMSContent content' changed:
                 underlying type 'union NSSCMSContentUnion' at cmst.h:118:1 changed:
                   type size hasn't changed
-                  1 data member changes (3 filtered):
+                  1 data member changes (4 filtered):
                     type of 'NSSCMSEncryptedData* encryptedData' changed:
                       in pointed to type 'typedef NSSCMSEncryptedData' at cmst.h:65:1:
                         underlying type 'struct NSSCMSEncryptedDataStr' at cmst.h:468:1 changed:
                           type size hasn't changed
-                          1 data member changes (1 filtered):
+                          1 data member changes (2 filtered):
                             type of 'NSSCMSAttribute** unprotectedAttr' changed:
                               in pointed to type 'NSSCMSAttribute*':
                                 in pointed to type 'typedef NSSCMSAttribute' at cmst.h:69:1:
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
index 290ad869..c0e8a3e1 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
@@ -29,7 +29,87 @@
                 in pointed to type 'typedef QXLState' at spice-qxl.h:35:1:
                   underlying type 'struct QXLState' at reds.h:93:1 changed:
                     type size hasn't changed
-                    1 data member change:
+                    2 data member changes:
+                      type of 'QXLInterface* qif' changed:
+                        in pointed to type 'typedef QXLInterface' at spice-qxl.h:33:1:
+                          underlying type 'struct QXLInterface' at spice.h:230:1 changed:
+                            type size hasn't changed
+                            15 data member changes:
+                              type of 'void (QXLInstance*, QXLWorker*)* attache_worker' changed:
+                                in pointed to type 'function type void (QXLInstance*, QXLWorker*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, int)* set_compression_level' changed:
+                                in pointed to type 'function type void (QXLInstance*, int)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, typedef uint32_t)* set_mm_time' changed:
+                                in pointed to type 'function type void (QXLInstance*, typedef uint32_t)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, QXLDevInitInfo*)* get_init_info' changed:
+                                in pointed to type 'function type void (QXLInstance*, QXLDevInitInfo*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'int (QXLInstance*, QXLCommandExt*)* get_command' changed:
+                                in pointed to type 'function type int (QXLInstance*, QXLCommandExt*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'int (QXLInstance*)* req_cmd_notification' changed:
+                                in pointed to type 'function type int (QXLInstance*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, struct QXLReleaseInfoExt)* release_resource' changed:
+                                in pointed to type 'function type void (QXLInstance*, struct QXLReleaseInfoExt)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'int (QXLInstance*, QXLCommandExt*)* get_cursor_command' changed:
+                                in pointed to type 'function type int (QXLInstance*, QXLCommandExt*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'int (QXLInstance*)* req_cursor_notification' changed:
+                                in pointed to type 'function type int (QXLInstance*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, typedef uint32_t)* notify_update' changed:
+                                in pointed to type 'function type void (QXLInstance*, typedef uint32_t)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'int (QXLInstance*)* flush_resources' changed:
+                                in pointed to type 'function type int (QXLInstance*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, typedef uint64_t)* async_complete' changed:
+                                in pointed to type 'function type void (QXLInstance*, typedef uint64_t)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, typedef uint32_t, QXLRect*, typedef uint32_t)* update_area_complete' changed:
+                                in pointed to type 'function type void (QXLInstance*, typedef uint32_t, QXLRect*, typedef uint32_t)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'void (QXLInstance*, typedef uint8_t, uint8_t*)* set_client_capabilities' changed:
+                                in pointed to type 'function type void (QXLInstance*, typedef uint8_t, uint8_t*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
+                              type of 'int (QXLInstance*, VDAgentMonitorsConfig*)* client_monitors_config' changed:
+                                in pointed to type 'function type int (QXLInstance*, VDAgentMonitorsConfig*)':
+                                  parameter 1 of type 'QXLInstance*' has sub-type changes:
+                                    in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+                                      underlying type 'struct QXLInstance' changed, as being reported
                       type of 'RedDispatcher* dispatcher' changed:
                         in pointed to type 'struct RedDispatcher' at red_dispatcher.c:55:1:
                           type size changed from 3264 to 3328 (in bits)
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
index 51341ddb..afe77511 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
@@ -1,5 +1,5 @@
 ================ changes of 'libtbb.so.2'===============
-  Functions changes summary: 0 Removed, 10 Changed (92 filtered out), 17 Added functions
+  Functions changes summary: 0 Removed, 8 Changed (67 filtered out), 17 Added functions
   Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
   Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
@@ -24,26 +24,7 @@
     [A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)'    {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_}
     [A] 'method void tbb::task_group_context::capture_fp_settings()'    {_ZN3tbb18task_group_context19capture_fp_settingsEv}
 
-  10 functions with some indirect sub-type change:
-
-    [C] 'method void tbb::filter::set_end_of_input()' at pipeline.cpp:700:1 has some indirect sub-type changes:
-      implicit parameter 0 of type 'tbb::filter*' has sub-type changes:
-        in pointed to type 'class tbb::filter' at pipeline.h:65:1:
-          type size hasn't changed
-          1 member function deletion:
-            'method virtual tbb::filter::~filter(int)' at pipeline.cpp:698:1
-          1 member function insertion:
-            'method virtual tbb::filter::~filter(int)' at pipeline.cpp:688:1
-          no member function changes (4 filtered);
-          1 data member changes (4 filtered):
-            type of 'tbb::internal::input_buffer* my_input_buffer' changed:
-              in pointed to type 'class tbb::internal::input_buffer' at pipeline.cpp:52:1:
-                type size hasn't changed
-                1 data member change:
-                  type of 'tbb::spin_mutex array_mutex' changed:
-                    type size hasn't changed
-                    1 base class insertion:
-                      class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
+  8 functions with some indirect sub-type change:
 
     [C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.h:135:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes:
@@ -70,16 +51,7 @@
                             2 data member insertions:
                               'volatile intptr_t* my_ref_top_priority', at offset 576 (in bits) at scheduler.h:96:1
                               'volatile uintptr_t* my_ref_reload_epoch', at offset 640 (in bits) at scheduler.h:99:1
-                            3 data member changes:
-                              type of 'tbb::internal::arena_slot* my_arena_slot' changed:
-                                in pointed to type 'struct tbb::internal::arena_slot' at scheduler_common.h:316:1:
-                                  type size hasn't changed
-                                  2 base class deletions:
-                                    struct tbb::internal::padded<tbb::internal::arena_slot_line1> at tbb_stddef.h:261:1
-                                    struct tbb::internal::padded<tbb::internal::arena_slot_line2> at tbb_stddef.h:261:1
-                                  2 base class insertions:
-                                    struct tbb::internal::padded<tbb::internal::arena_slot_line1, 128ul> at tbb_stddef.h:251:1
-                                    struct tbb::internal::padded<tbb::internal::arena_slot_line2, 128ul> at tbb_stddef.h:251:1
+                            2 data member changes (2 filtered):
                               type of 'tbb::internal::arena* my_arena' changed:
                                 in pointed to type 'class tbb::internal::arena' at arena.h:160:1:
                                   type size hasn't changed
@@ -87,7 +59,6 @@
                                     struct tbb::internal::padded<tbb::internal::arena_base> at tbb_stddef.h:261:1
                                   1 base class insertion:
                                     struct tbb::internal::padded<tbb::internal::arena_base, 128ul> at tbb_stddef.h:251:1
-                                  no data member change (1 filtered);
                               type of 'tbb::internal::mail_inbox my_inbox' changed:
                                 type size hasn't changed
                                 1 data member change:
@@ -180,7 +151,7 @@
             type of 'tbb::internal::concurrent_queue_rep* my_rep' changed:
               in pointed to type 'class tbb::internal::concurrent_queue_rep' at concurrent_queue.cpp:129:1:
                 type size hasn't changed
-                1 data member changes (2 filtered):
+                1 data member changes (1 filtered):
                   type of 'tbb::internal::concurrent_monitor items_avail' changed:
                     type size hasn't changed
                     1 data member change:
@@ -221,7 +192,6 @@
           type size hasn't changed
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-          no data member change (1 filtered);
 
     [C] 'method void tbb::queuing_rw_mutex::internal_construct()' at queuing_rw_mutex.h:146:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'tbb::queuing_rw_mutex*' has sub-type changes:
@@ -229,7 +199,6 @@
           type size hasn't changed
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-          no data member change (1 filtered);
 
     [C] 'method void tbb::recursive_mutex::internal_construct()' at recursive_mutex.h:224:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'tbb::recursive_mutex*' has sub-type changes:
@@ -238,14 +207,6 @@
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
 
-    [C] 'method tbb::thread_bound_filter::result_type tbb::thread_bound_filter::process_item()' at pipeline.cpp:712:1 has some indirect sub-type changes:
-      implicit parameter 0 of type 'tbb::thread_bound_filter*' has sub-type changes:
-        in pointed to type 'class tbb::thread_bound_filter' at pipeline.h:197:1:
-          type size hasn't changed
-          1 base class change:
-            'class tbb::filter' at pipeline.h:74:1 changed:
-              details were reported earlier
-
   3 Removed variable symbols not referenced by debug info:
 
     [D] _ZTVN3rml16versioned_objectE
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
index a2247eb8..a8611476 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
@@ -1,5 +1,5 @@
 ================ changes of 'libtbb.so.2'===============
-  Functions changes summary: 0 Removed, 8 Changed (94 filtered out), 17 Added functions
+  Functions changes summary: 0 Removed, 7 Changed (68 filtered out), 17 Added functions
   Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
   Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
@@ -24,7 +24,7 @@
     [A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)'    {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_}
     [A] 'method void tbb::task_group_context::capture_fp_settings()'    {_ZN3tbb18task_group_context19capture_fp_settingsEv}
 
-  8 functions with some indirect sub-type change:
+  7 functions with some indirect sub-type change:
 
     [C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.h:135:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes:
@@ -64,7 +64,6 @@
           type size hasn't changed
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-          no data member change (1 filtered);
 
     [C] 'method void tbb::queuing_rw_mutex::internal_construct()' at queuing_rw_mutex.h:146:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'tbb::queuing_rw_mutex*' has sub-type changes:
@@ -72,7 +71,6 @@
           type size hasn't changed
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-          no data member change (1 filtered);
 
     [C] 'method void tbb::recursive_mutex::internal_construct()' at recursive_mutex.h:224:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'tbb::recursive_mutex*' has sub-type changes:
@@ -81,13 +79,6 @@
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
 
-    [C] 'method void tbb::spin_mutex::internal_construct()' at spin_mutex.h:138:1 has some indirect sub-type changes:
-      implicit parameter 0 of type 'tbb::spin_mutex*' has sub-type changes:
-        in pointed to type 'class tbb::spin_mutex' at spin_mutex.h:40:1:
-          type size hasn't changed
-          1 base class insertion:
-            class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-
     [C] 'method void tbb::spin_rw_mutex_v3::internal_acquire_reader()' at spin_rw_mutex.h:53:1 has some indirect sub-type changes:
       implicit parameter 0 of type 'tbb::spin_rw_mutex_v3*' has sub-type changes:
         in pointed to type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:42:1:
