diff --git a/include/abg-ir.h b/include/abg-ir.h
index f17a3bf..c7c4c8e 100644
--- a/include/abg-ir.h
+++ b/include/abg-ir.h
@@ -3150,6 +3150,9 @@ public:
   parameters::const_iterator
   get_first_non_implicit_parm() const;
 
+  parameters::const_iterator
+  get_first_parm() const;
+
   const interned_string&
   get_cached_name(bool internal = false) const;
 
diff --git a/src/abg-comp-filter.cc b/src/abg-comp-filter.cc
index abfa3c0..35c9277 100644
--- a/src/abg-comp-filter.cc
+++ b/src/abg-comp-filter.cc
@@ -258,6 +258,8 @@ function_name_changed_but_not_symbol(const function_decl_sptr& f,
       elf_symbol_sptr fs = f->get_symbol(), ss = s->get_symbol();
       if (fs == ss)
 	return true;
+      if (!!fs != !!ss)
+	return false;
       for (elf_symbol_sptr s = fs->get_next_alias();
 	   s && !s->is_main_symbol();
 	   s = s->get_next_alias())
diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc
index 11f506f..07bfe98 100644
--- a/src/abg-comparison.cc
+++ b/src/abg-comparison.cc
@@ -6829,7 +6829,7 @@ function_type_diff::ensure_lookup_tables_populated()
        i != priv_->parm_changes_.deletions().end();
        ++i)
     {
-      parm = *(first_function_type()->get_first_non_implicit_parm()
+      parm = *(first_function_type()->get_first_parm()
 	       + i->index());
       parm_name = parm->get_name_id();
       // If for a reason the type name is empty we want to know and
@@ -6849,7 +6849,7 @@ function_type_diff::ensure_lookup_tables_populated()
 	   j != i->inserted_indexes().end();
 	   ++j)
 	{
-	  parm = *(second_function_type()->get_first_non_implicit_parm() + *j);
+	  parm = *(second_function_type()->get_first_parm() + *j);
 	  parm_name = parm->get_name_id();
 	  // If for a reason the type name is empty we want to know and
 	  // fix that.
@@ -7101,9 +7101,9 @@ compute_diff(const function_type_sptr	first,
 
   function_type_diff_sptr result(new function_type_diff(first, second, ctxt));
 
-  diff_utils::compute_diff(first->get_first_non_implicit_parm(),
+  diff_utils::compute_diff(first->get_first_parm(),
 			   first->get_parameters().end(),
-			   second->get_first_non_implicit_parm(),
+			   second->get_first_parm(),
 			   second->get_parameters().end(),
 			   result->priv_->parm_changes_);
 
diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index 0b572db..f536be0 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -536,8 +536,10 @@ default_reporter::report(const fn_parm_diff& d, ostream& out,
       diff_category saved_category = type_diff->get_category();
       // Parameter type changes are never redundants.
       type_diff->set_category(saved_category & ~REDUNDANT_CATEGORY);
-      out << indent
-	  << "parameter " << f->get_index();
+      out << indent;
+      if (f->get_is_artificial())
+	out << "implicit ";
+      out << "parameter " << f->get_index();
       report_loc_info(f, *d.context(), out);
       out << " of type '"
 	  << f->get_type_pretty_representation();
diff --git a/src/abg-ir.cc b/src/abg-ir.cc
index 2852c09..24f42e5 100644
--- a/src/abg-ir.cc
+++ b/src/abg-ir.cc
@@ -16816,24 +16816,11 @@ equals(const function_type& lhs,
 	  RETURN(result);
       }
 
-  class_decl* lcl = 0, * rcl = 0;
   vector<shared_ptr<function_decl::parameter> >::const_iterator i,j;
-  for (i = lhs.get_first_non_implicit_parm(),
-	 j = rhs.get_first_non_implicit_parm();
-       (i != lhs.get_parameters().end()
-	&& j != rhs.get_parameters().end());
+  for (i = lhs.get_first_parm(), j = rhs.get_first_parm();
+       i != lhs.get_parameters().end() && j != rhs.get_parameters().end();
        ++i, ++j)
     {
-      if (lhs_class)
-	lcl = dynamic_cast<class_decl*>((*i)->get_type().get());
-      if (rhs_class)
-	rcl = dynamic_cast<class_decl*>((*j)->get_type().get());
-      if (lcl && rcl
-	  && lcl == lhs_class
-	  && rcl == rhs_class)
-	// Do not compare the class types of two methods that we are
-	// probably comparing atm; otherwise we can recurse indefinitely.
-	continue;
       if (**i != **j)
 	{
 	  result = false;
@@ -16864,12 +16851,12 @@ equals(const function_type& lhs,
 #undef RETURN
 }
 
-/// Get the parameter of the function.
+/// Get the first parameter of the function.
 ///
 /// If the function is a non-static member function, the parameter
 /// returned is the first one following the implicit 'this' parameter.
 ///
-/// @return the first non implicit parm.
+/// @return the first non implicit parameter of the function.
 function_type::parameters::const_iterator
 function_type::get_first_non_implicit_parm() const
 {
@@ -16886,6 +16873,16 @@ function_type::get_first_non_implicit_parm() const
   return i;
 }
 
+/// Get the first parameter of the function.
+///
+/// Note that if the function is a non-static member function, the
+/// parameter returned is the implicit 'this' parameter.
+///
+/// @return the first parameter of the function.
+function_type::parameters::const_iterator
+function_type::get_first_parm() const
+{return get_parameters().begin();}
+
 /// Get the name of the current @ref function_type.
 ///
 /// The name is retrieved from a cache.  If the cache is empty, this
diff --git a/src/abg-suppression.cc b/src/abg-suppression.cc
index ae7cc95..0d8604a 100644
--- a/src/abg-suppression.cc
+++ b/src/abg-suppression.cc
@@ -725,6 +725,7 @@ type_suppression::suppresses_diff(const diff* diff) const
 	      if (!d)
 		// This might be of, e.g, distinct_diff type.
 		return false;
+	      d = is_type_diff(peel_qualified_diff(d));
 	    }
 	  else
 	    return false;
@@ -737,6 +738,7 @@ type_suppression::suppresses_diff(const diff* diff) const
 	      if (!d)
 		// This might be of, e.g, distinct_diff type.
 		return false;
+	      d = is_type_diff(peel_qualified_diff(d));
 	    }
 	  else
 	    return false;
@@ -747,11 +749,13 @@ type_suppression::suppresses_diff(const diff* diff) const
 	    {
 	      d = is_type_diff(ptr_diff->underlying_type_diff().get());
 	      ABG_ASSERT(d);
+	      d = is_type_diff(peel_qualified_diff(d));
 	    }
 	  else if (const reference_diff* ref_diff = is_reference_diff(diff))
 	    {
 	      d = is_type_diff(ref_diff->underlying_type_diff().get());
 	      ABG_ASSERT(d);
+	      d = is_type_diff(peel_qualified_diff(d));
 	    }
 	  else
 	    return false;
diff --git a/tests/data/test-abicompat/test5-fn-changed-report-0.txt b/tests/data/test-abicompat/test5-fn-changed-report-0.txt
index 0467690..ccde357 100644
--- a/tests/data/test-abicompat/test5-fn-changed-report-0.txt
+++ b/tests/data/test-abicompat/test5-fn-changed-report-0.txt
@@ -15,3 +15,7 @@ have sub-types that are different from what application 'test5-fn-changed-app' e
         1 data member deletion:
           'unsigned char S1::m1', at offset 32 (in bits)
 
+  method S0::S0():
+    implicit parameter 0 of type 'S0*' has sub-type changes:
+      pointed to type 'struct S0' changed, as reported earlier
+
diff --git a/tests/data/test-abicompat/test5-fn-changed-report-1.txt b/tests/data/test-abicompat/test5-fn-changed-report-1.txt
index b39f650..dbdcbe5 100644
--- a/tests/data/test-abicompat/test5-fn-changed-report-1.txt
+++ b/tests/data/test-abicompat/test5-fn-changed-report-1.txt
@@ -15,3 +15,7 @@ have sub-types that are different from what application 'test5-fn-changed-app' e
         1 data member deletion:
           'unsigned char S1::m1', at offset 32 (in bits) at test5-fn-changed-libapp-v0.h:11:1
 
+  method S0::S0():
+    implicit parameter 0 of type 'S0*' has sub-type changes:
+      pointed to type 'struct S0' changed at test5-fn-changed-libapp-v0.h:1:1, as reported earlier
+
diff --git a/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt b/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt
index 7080934..4d832e2 100644
--- a/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt
+++ b/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt
@@ -1,13 +1,16 @@
-Functions changes summary: 0 Removed, 2 Changed, 0 Added functions
+Functions changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-2 functions with some indirect sub-type change:
+1 function with some indirect sub-type change:
 
   [C] 'method virtual int C::virtual_func0()' has some indirect sub-type changes:
     the vtable offset of method virtual int C::virtual_func0() changed from 0 to 1
       note that this is an ABI incompatible change to the vtable of class C
-
-  [C] 'method virtual char C::virtual_func1()' has some indirect sub-type changes:
-    the vtable offset of method virtual char C::virtual_func1() changed from 1 to 0
-      note that this is an ABI incompatible change to the vtable of class C
+    implicit parameter 0 of type 'C*' has sub-type changes:
+      in pointed to type 'class C':
+        type size hasn't changed
+        1 member function changes (1 filtered):
+          'method virtual char C::virtual_func1()' has some sub-type changes:
+            the vtable offset of method virtual char C::virtual_func1() changed from 1 to 0
+              note that this is an ABI incompatible change to the vtable of class C
 
diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt
index 5bc2d08..41d151e 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, 17 Changed, 1 Added functions
+Functions changes summary: 1 Removed, 51 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Removed function:
@@ -9,71 +9,135 @@ 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()'
 
-17 functions with some indirect sub-type change:
+51 functions with some indirect sub-type change:
 
-  [C] 'method sigc::connection::connection(sigc::slot_base&)' has some indirect sub-type changes:
-    parameter 1 of type 'sigc::slot_base&' has sub-type changes:
-      in referenced type 'class sigc::slot_base':
+  [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::rep_type* sigc::slot_base::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* sigc::trackable::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 sigc::internal::trackable_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_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* std::__detail::_List_node_base::_M_next', at offset 0 (in bits)
-                                              'std::__detail::_List_node_base* std::__detail::_List_node_base::_M_prev', at offset 64 (in bits)
-                                            1 data member insertion:
-                                              'unsigned long int std::_List_node<long unsigned 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 sigc::internal::trackable_callback_list::clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
+          type of 'sigc::slot_base* sigc::connection::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* sigc::slot_base::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* sigc::trackable::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 sigc::internal::trackable_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_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* std::__detail::_List_node_base::_M_next', at offset 0 (in bits)
+                                                    'std::__detail::_List_node_base* std::__detail::_List_node_base::_M_prev', at offset 64 (in bits)
+                                                  1 data member insertion:
+                                                    'unsigned long int std::_List_node<long unsigned 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 sigc::internal::trackable_callback_list::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(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:
-      in referenced type 'struct sigc::connection':
-        type size hasn't changed
-        1 data member change:
-          type of 'sigc::slot_base* sigc::connection::slot_' changed:
-            pointed to type 'class sigc::slot_base' changed, as reported earlier
+      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 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:
+      in pointed to type 'struct sigc::internal::signal_impl':
+        type size changed from 192 to 256 (in bits)
+        1 data member change:
+          type of 'std::list<sigc::slot_base, std::allocator<sigc::slot_base> > sigc::internal::signal_impl::slots_' changed:
+            type name changed from 'std::list<sigc::slot_base, std::allocator<sigc::slot_base> >' to 'std::__cxx11::list<sigc::slot_base, std::allocator<sigc::slot_base> >'
+            type size changed from 128 to 192 (in bits)
+            1 base class change:
+              'class std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >' changed:
+                type name changed from 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >' to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >'
+                type size changed from 128 to 192 (in bits)
+                1 data member change:
+                  type of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl' changed:
+                    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 std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node' changed, as reported earlier
+                      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'
+
+  [C] 'method bool sigc::internal::signal_impl::blocked()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const sigc::internal::signal_impl*' has sub-type changes:
+      in pointed to type 'const sigc::internal::signal_impl':
+        unqualified underlying type 'struct sigc::internal::signal_impl' changed, as reported earlier
+
+  [C] 'method void sigc::internal::signal_impl::clear()' 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
+
   [C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::connect(const sigc::slot_base&)' has some indirect sub-type changes:
     return type changed:
       underlying type 'typedef std::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator' changed:
         typedef name changed from std::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator to std::__cxx11::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator
+    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
@@ -81,21 +145,80 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [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:
     return type changed:
       underlying type 'typedef std::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator' changed, as reported earlier
+    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 'typedef sigc::internal::signal_impl::iterator_type' changed:
       underlying type 'typedef std::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator' changed, as reported earlier
 
   [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:
     return type changed:
       underlying type 'typedef std::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator' changed, as reported earlier
+    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 'typedef sigc::internal::signal_impl::iterator_type' changed:
       underlying type 'typedef std::list<sigc::slot_base, std::allocator<sigc::slot_base> >::iterator' 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:
+      pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
+
+  [C] 'method sigc::internal::signal_impl::size_type sigc::internal::signal_impl::size()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const sigc::internal::signal_impl*' has sub-type changes:
+      in pointed to type 'const sigc::internal::signal_impl':
+        unqualified underlying type 'struct sigc::internal::signal_impl' changed, as reported earlier
+
+  [C] 'method void sigc::internal::signal_impl::sweep()' 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
+
+  [C] 'method void sigc::internal::signal_impl::unreference_exec()' 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
+
+  [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
+
+  [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
+
+  [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:
+      pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
+
+  [C] 'method void sigc::internal::trackable_callback_list::remove_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
+
+  [C] 'method void sigc::signal_base::block(bool)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
+      in pointed to type 'struct sigc::signal_base':
+        type size hasn't changed
+        1 base class change:
+          'struct sigc::trackable' changed:
+            details were reported earlier
+        1 data member change:
+          type of 'sigc::internal::signal_impl* sigc::signal_base::impl_' changed:
+            pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
+
+  [C] 'method bool sigc::signal_base::blocked()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const sigc::signal_base*' has sub-type changes:
+      in pointed to type 'const sigc::signal_base':
+        unqualified underlying type 'struct sigc::signal_base' changed, as reported earlier
+
+  [C] 'method void sigc::signal_base::clear()' 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
+
   [C] 'method sigc::signal_base::iterator_type sigc::signal_base::connect(const sigc::slot_base&)' has some indirect sub-type changes:
     return type changed:
       underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier
+    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
@@ -103,33 +226,23 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'method sigc::signal_base::iterator_type sigc::signal_base::erase(sigc::signal_base::iterator_type)' has some indirect sub-type changes:
     return type changed:
       underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier
+    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 'typedef sigc::signal_base::iterator_type' changed:
       underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier
 
   [C] 'method sigc::internal::signal_impl* sigc::signal_base::impl()' has some indirect sub-type changes:
     return type changed:
-      in pointed to type 'struct sigc::internal::signal_impl':
-        type size changed from 192 to 256 (in bits)
-        1 data member change:
-          type of 'std::list<sigc::slot_base, std::allocator<sigc::slot_base> > sigc::internal::signal_impl::slots_' changed:
-            type name changed from 'std::list<sigc::slot_base, std::allocator<sigc::slot_base> >' to 'std::__cxx11::list<sigc::slot_base, std::allocator<sigc::slot_base> >'
-            type size changed from 128 to 192 (in bits)
-            1 base class change:
-              'class std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >' changed:
-                type name changed from 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >' to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >'
-                type size changed from 128 to 192 (in bits)
-                1 data member change:
-                  type of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl' changed:
-                    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 std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node' changed, as reported earlier
-                      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'
+      pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
+    implicit parameter 0 of type 'const sigc::signal_base*' has sub-type changes:
+      in pointed to type 'const sigc::signal_base':
+        unqualified underlying type 'struct sigc::signal_base' changed, as reported earlier
 
   [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:
     return type changed:
       underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier
+    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 'typedef sigc::signal_base::iterator_type' changed:
       underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier
     parameter 2 of type 'const sigc::slot_base&' has sub-type changes:
@@ -138,48 +251,119 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   [C] 'method sigc::signal_base& sigc::signal_base::operator=(const sigc::signal_base&)' has some indirect sub-type changes:
     return type changed:
-      in referenced type 'struct sigc::signal_base':
-        type size hasn't changed
-        1 base class change:
-          'struct sigc::trackable' changed:
-            details were reported earlier
-        1 data member change:
-          type of 'sigc::internal::signal_impl* sigc::signal_base::impl_' changed:
-            pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
+      referenced type 'struct sigc::signal_base' changed, as reported earlier
+    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::signal_base&' has sub-type changes:
       in referenced type 'const sigc::signal_base':
         unqualified underlying type 'struct sigc::signal_base' changed, as reported earlier
 
   [C] 'method sigc::signal_base::signal_base(const sigc::signal_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::signal_base&' has sub-type changes:
       in referenced type 'const sigc::signal_base':
         unqualified underlying type 'struct sigc::signal_base' changed, as reported earlier
 
+  [C] 'method sigc::signal_base::size_type sigc::signal_base::size()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const sigc::signal_base*' has sub-type changes:
+      in pointed to type 'const sigc::signal_base':
+        unqualified underlying type 'struct sigc::signal_base' changed, as reported earlier
+
+  [C] 'method void sigc::signal_base::unblock()' 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
+
+  [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(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':
+        unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
+
   [C] 'method sigc::internal::trackable_callback_list* sigc::trackable::callback_list()' has some indirect sub-type changes:
     return type changed:
       pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
+    implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes:
+      in pointed to type 'const sigc::trackable':
+        unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
+
+  [C] 'method void sigc::trackable::notify_callbacks()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
+      pointed to type 'struct sigc::trackable' changed, as reported earlier
 
   [C] 'method sigc::trackable& sigc::trackable::operator=(const sigc::trackable&)' has some indirect sub-type changes:
     return type changed:
       referenced type 'struct sigc::trackable' changed, as reported earlier
+    implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
+      pointed to type 'struct sigc::trackable' changed, as reported earlier
     parameter 1 of type 'const sigc::trackable&' has sub-type changes:
       in referenced type 'const sigc::trackable':
         unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
 
+  [C] 'method void sigc::trackable::remove_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':
+        unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
+
   [C] 'method sigc::trackable::trackable(const sigc::trackable&)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
+      pointed to type 'struct sigc::trackable' changed, as reported earlier
     parameter 1 of type 'const sigc::trackable&' has sub-type changes:
       in referenced type 'const sigc::trackable':
         unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
 
+  [C] 'method sigc::trackable::trackable()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'sigc::trackable*' has sub-type changes:
+      pointed to type 'struct sigc::trackable' changed, as reported earlier
+
diff --git a/tests/data/test-abidiff/test-struct1-report.txt b/tests/data/test-abidiff/test-struct1-report.txt
index fe5064c..d74f520 100644
--- a/tests/data/test-abidiff/test-struct1-report.txt
+++ b/tests/data/test-abidiff/test-struct1-report.txt
@@ -3,6 +3,10 @@
     type size changed from 192 to 256 (in bits)
     1 member function insertion:
       'method virtual int s0::foo(int, char) const', virtual at voffset 2/2
+    1 member function change:
+      'method virtual s0::__deleting_dtor ()' has some sub-type changes:
+        parameter 1 of type 's0*' has sub-type changes:
+          pointed to type 'class s0' changed, as being reported
     1 data member deletion:
       'char s0::m1', at offset 96 (in bits)
     1 data member insertion:
diff --git a/tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt b/tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt
index 3fce90b..7f7f504 100644
--- a/tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt
+++ b/tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (57 filtered out), 0 Added functions
+Functions changes summary: 0 Removed, 0 Changed (217 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added variable
 
diff --git a/tests/data/test-diff-dwarf/test0-report.txt b/tests/data/test-diff-dwarf/test0-report.txt
index d8a213a..891859e 100644
--- a/tests/data/test-diff-dwarf/test0-report.txt
+++ b/tests/data/test-diff-dwarf/test0-report.txt
@@ -1,21 +1,33 @@
-Functions changes summary: 0 Removed, 1 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 3 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
 
   [A] 'method int S0::get_member0() const'
 
-1 function with some indirect sub-type change:
+3 functions with some indirect sub-type change:
+
+  [C] 'method void B0S0::member0() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const B0S0*' has sub-type changes:
+      in pointed to type 'const B0S0':
+        in unqualified underlying type 'class B0S0':
+          type size changed from 64 to 96 (in bits)
+          1 data member insertion:
+            'unsigned int B0S0::m2', at offset 64 (in bits)
+
+  [C] 'method void S0::member0() const' has some indirect sub-type changes:
+    'method void S0::member0() const' access changed from 'private' to 'public'
+    implicit parameter 0 of type 'const S0*' has sub-type changes:
+      in pointed to type 'const S0':
+        in unqualified underlying type 'class S0':
+          type size changed from 96 to 128 (in bits)
+          1 base class change:
+            'class B0S0' changed:
+              details were reported earlier
+          1 data member change:
+            'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
 
   [C] 'function void foo(S0&, S1*)' has some indirect sub-type changes:
     parameter 1 of type 'S0&' has sub-type changes:
-      in referenced type 'class S0':
-        type size changed from 96 to 128 (in bits)
-        1 base class change:
-          'class B0S0' changed:
-            type size changed from 64 to 96 (in bits)
-            1 data member insertion:
-              'unsigned int B0S0::m2', at offset 64 (in bits)
-        1 data member change:
-          'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
+      referenced type 'class S0' changed, as reported earlier
 
diff --git a/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt
index f18439f..34454f1 100644
--- a/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt
@@ -15,6 +15,9 @@ Variable symbols changes summary: 0 Removed, 3 Added variable symbols not refere
   [C] 'method void S::bar()' has some indirect sub-type changes:
     method void S::bar() is now declared virtual
       note that this is an ABI incompatible change to the vtable of struct S
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
+        type struct S was a declaration-only type and is now a defined type
 
 3 Added variable symbols not referenced by debug info:
 
diff --git a/tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt
index 423ddbe..b1fa4b3 100644
--- a/tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test29-vtable-changes-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 0 Changed, 1 Added function
+Functions changes summary: 0 Removed, 3 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
@@ -6,3 +6,33 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [A] 'method virtual void S::fn1()'
     note that this adds a new entry to the vtable of struct S
 
+3 functions with some indirect sub-type change:
+
+  [C] 'method virtual void S::fn0()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
+        type size hasn't changed
+        1 member function insertion:
+          'method virtual void S::fn1()', virtual at voffset 3/3
+        4 member function changes:
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual void S::fn0()' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+
+  [C] 'method virtual S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
+  [C] 'method virtual S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
diff --git a/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt
index 64e5604..f76d694 100644
--- a/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 1 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 4 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
@@ -6,9 +6,44 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [A] 'method virtual void S::fvtable_breaker()'
     note that this adds a new entry to the vtable of struct S
 
-1 function with some indirect sub-type change:
+4 functions with some indirect sub-type change:
+
+  [C] 'method virtual void S::fn0()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
+        type size hasn't changed
+        1 member function insertion:
+          'method virtual void S::fvtable_breaker()', virtual at voffset 3/4
+        5 member function changes:
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual void S::fn0()' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual void S::fn1()' has some sub-type changes:
+            the vtable offset of method virtual void S::fn1() changed from 3 to 4
+              note that this is an ABI incompatible change to the vtable of struct S
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
 
   [C] 'method virtual void S::fn1()' has some indirect sub-type changes:
     the vtable offset of method virtual void S::fn1() changed from 3 to 4
       note that this is an ABI incompatible change to the vtable of struct S
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
+  [C] 'method virtual S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
+  [C] 'method virtual S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
 
diff --git a/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt
index 624c123..d7b596e 100644
--- a/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 1 Removed, 1 Changed, 0 Added functions
+Functions changes summary: 1 Removed, 3 Changed, 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Removed function:
@@ -6,9 +6,37 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [D] 'method virtual void S::fn0()'
     note that this removes an entry from the vtable of struct S
 
-1 function with some indirect sub-type change:
+3 functions with some indirect sub-type change:
 
   [C] 'method virtual void S::fn1()' has some indirect sub-type changes:
     the vtable offset of method virtual void S::fn1() changed from 3 to 2
       note that this is an ABI incompatible change to the vtable of struct S
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
+        type size hasn't changed
+        1 member function deletion:
+          'method virtual void S::fn0()', virtual at voffset 2/3
+        4 member function changes:
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual S::~S(int)' has some sub-type changes:
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+          'method virtual void S::fn1()' has some sub-type changes:
+            the vtable offset of method virtual void S::fn1() changed from 3 to 2
+              note that this is an ABI incompatible change to the vtable of struct S
+            implicit parameter 0 of type 'S*' has sub-type changes:
+              pointed to type 'struct S' changed, as being reported
+
+  [C] 'method virtual S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
+  [C] 'method virtual S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
 
diff --git a/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt b/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt
index 5415622..4f4a765 100644
--- a/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt
+++ b/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt
@@ -1,12 +1,24 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 4 Changed, 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with some indirect sub-type change:
+4 functions with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
+  [C] 'method S::S()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
         type size changed from 32 to 64 (in bits)
         1 data member insertion:
           'int S::m1', at offset 32 (in bits)
 
+  [C] 'method S::S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
+  [C] 'method S::~S(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      pointed to type 'struct S' changed, as reported earlier
+
+  [C] 'function void foo(S&)' has some indirect sub-type changes:
+    parameter 1 of type 'S&' has sub-type changes:
+      referenced type 'struct S' changed, as reported earlier
+
diff --git a/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt b/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
index 78f91a5..fad1ed9 100644
--- a/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
+++ b/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
@@ -1,16 +1,38 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 3 Changed, 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with some indirect sub-type change:
+3 functions with some indirect sub-type change:
 
-  [C] 'function Interface* make_interface()' has some indirect sub-type changes:
-    return type changed:
+  [C] 'method virtual Interface::~Interface(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'Interface*' has sub-type changes:
       in pointed to type 'class Interface':
         type size hasn't changed
         1 member function insertion:
           'method virtual void Interface::method2()', virtual at voffset 3/4
-        1 member function change:
+        5 member function changes:
+          'method virtual Interface::~Interface(int)' has some sub-type changes:
+            implicit parameter 0 of type 'Interface*' has sub-type changes:
+              pointed to type 'class Interface' changed, as being reported
+          'method virtual Interface::~Interface(int)' has some sub-type changes:
+            implicit parameter 0 of type 'Interface*' has sub-type changes:
+              pointed to type 'class Interface' changed, as being reported
+          'method virtual Interface::~Interface(int)' has some sub-type changes:
+            implicit parameter 0 of type 'Interface*' has sub-type changes:
+              pointed to type 'class Interface' changed, as being reported
+          'method virtual void Interface::method1()' has some sub-type changes:
+            implicit parameter 0 of type 'Interface*' has sub-type changes:
+              pointed to type 'class Interface' changed, as being reported
           'method virtual void Interface::method3()' has some sub-type changes:
             the vtable offset of method virtual void Interface::method3() changed from 3 to 4
               note that this is an ABI incompatible change to the vtable of class Interface
+            implicit parameter 0 of type 'Interface*' has sub-type changes:
+              pointed to type 'class Interface' changed, as being reported
+
+  [C] 'method virtual Interface::~Interface(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'Interface*' has sub-type changes:
+      pointed to type 'class Interface' changed, as reported earlier
+
+  [C] 'function Interface* make_interface()' has some indirect sub-type changes:
+    return type changed:
+      pointed to type 'class Interface' changed, as reported earlier
 
diff --git a/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt b/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
index 087cfd4..bc30722 100644
--- a/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
+++ b/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
@@ -25,12 +25,24 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   [C] 'method void std::_Head_base<0ul, STR&&, false>::_Head_base<STR>(STR&&)' has some indirect sub-type changes:
     'method void std::_Head_base<0ul, STR&&, false>::_Head_base<STR>(STR&&) {_ZNSt10_Head_baseILm0EO3STRLb0EEC2IS0_St9true_typeEEOT_}' now becomes 'method void std::_Head_base<0, STR &&, false>::_Head_base<STR, std::true_type>(STR&&) {_ZNSt10_Head_baseILm0EO3STRLb0EEC2IS0_St9true_typeEEOT_}'
+    implicit parameter 0 of type 'std::_Head_base<0ul, STR&&, false>*' changed:
+      in pointed to type 'struct std::_Head_base<0ul, STR&&, false>':
+        type name changed from 'std::_Head_base<0ul, STR&&, false>' to 'std::_Head_base<0, STR &&, false>'
+        type size hasn't changed
+        1 data member change:
+          name of 'std::_Head_base<0ul, STR&&, false>::_M_head_impl' changed to 'std::_Head_base<0, STR &&, false>::_M_head_impl'
 
   [C] 'method STR& std::_Head_base<0ul, STR&&, false>::_M_head()' has some indirect sub-type changes:
     'method STR& std::_Head_base<0ul, STR&&, false>::_M_head() {_ZNSt10_Head_baseILm0EO3STRLb0EE7_M_headERKS2_}' now becomes 'method STR& std::_Head_base<0, STR &&, false>::_M_head() {_ZNSt10_Head_baseILm0EO3STRLb0EE7_M_headERKS2_}'
+    parameter 1 of type 'const std::_Head_base<0ul, STR&&, false>&' changed:
+      in referenced type 'const std::_Head_base<0ul, STR&&, false>':
+        'const std::_Head_base<0ul, STR&&, false>' changed to 'const std::_Head_base<0, STR &&, false>'
 
   [C] 'method STR& std::_Tuple_impl<0ul, STR&&>::_M_head()' has some indirect sub-type changes:
     'method STR& std::_Tuple_impl<0ul, STR&&>::_M_head() {_ZNSt11_Tuple_implILm0EJO3STREE7_M_headERKS2_}' now becomes 'method STR& std::_Tuple_impl<0, STR &&>::_M_head() {_ZNSt11_Tuple_implILm0EJO3STREE7_M_headERKS2_}'
+    parameter 1 of type 'const std::_Tuple_impl<0ul, STR&&>&' changed:
+      in referenced type 'const std::_Tuple_impl<0ul, STR&&>':
+        'const std::_Tuple_impl<0ul, STR&&>' changed to 'const std::_Tuple_impl<0, STR &&>'
 
   [C] 'method void std::_Tuple_impl<0ul, STR&&>::_Tuple_impl<STR>(STR&&)' has some indirect sub-type changes:
     Please note that the symbol of this function is _ZNSt11_Tuple_implILm0EJO3STREEC2IS0_JESt10false_typeEEOT_DpOT0_
@@ -38,6 +50,16 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     linkage names of method void std::_Tuple_impl<0ul, STR&&>::_Tuple_impl<STR>(STR&&)
     changed from '_ZNSt11_Tuple_implILm0EJO3STREEC2IS0_JESt10false_typeEEOT_DpOT0_, _ZNSt11_Tuple_implILm0EJO3STREEC1IS0_JESt10false_typeEEOT_DpOT0_' to '_ZNSt11_Tuple_implILm0EJO3STREEC2IS0_JESt10false_typeEEOT_DpOT0_'
     'method void std::_Tuple_impl<0ul, STR&&>::_Tuple_impl<STR>(STR&&) {_ZNSt11_Tuple_implILm0EJO3STREEC2IS0_JESt10false_typeEEOT_DpOT0_, _ZNSt11_Tuple_implILm0EJO3STREEC1IS0_JESt10false_typeEEOT_DpOT0_}' now becomes 'method void std::_Tuple_impl<0, STR &&>::_Tuple_impl<STR, std::false_type>(STR&&) {_ZNSt11_Tuple_implILm0EJO3STREEC2IS0_JESt10false_typeEEOT_DpOT0_}'
+    implicit parameter 0 of type 'std::_Tuple_impl<0ul, STR&&>*' changed:
+      in pointed to type 'struct std::_Tuple_impl<0ul, STR&&>':
+        type name changed from 'std::_Tuple_impl<0ul, STR&&>' to 'std::_Tuple_impl<0, STR &&>'
+        type size hasn't changed
+        2 base class deletions:
+          struct std::_Head_base<0ul, STR&&, false>
+          struct std::_Tuple_impl<1ul>
+        2 base class insertions:
+          struct std::_Head_base<0, STR &&, false>
+          struct std::_Tuple_impl<1>
 
   [C] 'function std::__add_c_ref<STR&&>::type std::__get_helper<0ul, STR&&>(const std::_Tuple_impl<0ul, STR&&>&)' has some indirect sub-type changes:
     'function std::__add_c_ref<STR&&>::type std::__get_helper<0ul, STR&&>(const std::_Tuple_impl<0ul, STR&&>&) {_ZSt12__get_helperILm0EO3STRJEENSt11__add_c_refIT0_E4typeERKSt11_Tuple_implIXT_EJS3_DpT1_EE}' now becomes 'function std::__add_c_ref<STR &&>::type std::__get_helper<0, STR &&>(const std::_Tuple_impl<0, STR &&>&) {_ZSt12__get_helperILm0EO3STRJEENSt11__add_c_refIT0_E4typeERKSt11_Tuple_implIXT_EJS3_DpT1_EE}'
@@ -67,6 +89,8 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     linkage names of method void std::tuple<STR&&>::tuple<STR>(STR&&)
     changed from '_ZNSt5tupleIJO3STREEC2IJS0_ESt9true_typeEEDpOT_, _ZNSt5tupleIJO3STREEC1IJS0_ESt9true_typeEEDpOT_' to '_ZNSt5tupleIJO3STREEC2IJS0_ESt9true_typeEEDpOT_'
     'method void std::tuple<STR&&>::tuple<STR>(STR&&) {_ZNSt5tupleIJO3STREEC2IJS0_ESt9true_typeEEDpOT_, _ZNSt5tupleIJO3STREEC1IJS0_ESt9true_typeEEDpOT_}' now becomes 'method void std::tuple<STR &&>::tuple<STR, std::true_type>(STR&&) {_ZNSt5tupleIJO3STREEC2IJS0_ESt9true_typeEEDpOT_}'
+    implicit parameter 0 of type 'std::tuple<STR&&>*' changed:
+      pointed to type 'class std::tuple<STR&&>' changed, as reported earlier
 
   [C] 'function void tpl<std::tuple<STR&&> >(std::tuple<STR&&>)' has some indirect sub-type changes:
     'function void tpl<std::tuple<STR&&> >(std::tuple<STR&&>) {_Z3tplISt5tupleIJO3STREEEvT_}' now becomes 'function void tpl<std::tuple<STR &&> >(std::tuple<STR &&>) {_Z3tplISt5tupleIJO3STREEEvT_}'
diff --git a/tests/data/test-diff-dwarf/test5-report.txt b/tests/data/test-diff-dwarf/test5-report.txt
index 63d7ffa..6cf7522 100644
--- a/tests/data/test-diff-dwarf/test5-report.txt
+++ b/tests/data/test-diff-dwarf/test5-report.txt
@@ -1,12 +1,17 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 2 Changed, 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with some indirect sub-type change:
+2 functions with some indirect sub-type change:
 
-  [C] 'function C0 foo()' has some indirect sub-type changes:
-    return type changed:
-      entity changed from 'class C0' to compatible type 'typedef c0_type'
+  [C] 'method C0::C0()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'C0*' has sub-type changes:
+      in pointed to type 'class C0':
         type size hasn't changed
         1 data member change:
           'int C0::m0' access changed from 'private' to 'public'
 
+  [C] 'function C0 foo()' has some indirect sub-type changes:
+    return type changed:
+      entity changed from 'class C0' to compatible type 'typedef c0_type'
+        details were reported earlier
+
diff --git a/tests/data/test-diff-dwarf/test8-report.txt b/tests/data/test-diff-dwarf/test8-report.txt
index 59834a5..26e0c10 100644
--- a/tests/data/test-diff-dwarf/test8-report.txt
+++ b/tests/data/test-diff-dwarf/test8-report.txt
@@ -1,21 +1,26 @@
-Functions changes summary: 0 Removed, 1 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 3 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
 
   [A] 'method B1::B1()'
 
-1 function with some indirect sub-type change:
+3 functions with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
+  [C] 'method B0::B0()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'B0*' has sub-type changes:
+      in pointed to type 'struct B0':
+        type size hasn't changed
+        1 data member change:
+          'char B0::m0' access changed from 'public' to 'private'
+
+  [C] 'method S::S()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
         type size changed from 64 to 96 (in bits)
         1 base class change:
           'struct B0' changed:
-            type size hasn't changed
-            1 data member change:
-              'char B0::m0' access changed from 'public' to 'private'
+            details were reported earlier
         1 base class insertion:
           class B1
         1 data member change:
@@ -24,3 +29,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size changed from 32 to 8 (in bits)
           and offset changed from 32 to 64 (in bits) (by +32 bits), access changed from 'public' to 'private'
 
+  [C] 'function void foo(S&)' has some indirect sub-type changes:
+    parameter 1 of type 'S&' has sub-type changes:
+      referenced type 'struct S' changed, as reported earlier
+
diff --git a/tests/data/test-diff-filter/test0-report.txt b/tests/data/test-diff-filter/test0-report.txt
index afa8757..ef7518b 100644
--- a/tests/data/test-diff-filter/test0-report.txt
+++ b/tests/data/test-diff-filter/test0-report.txt
@@ -1,23 +1,30 @@
-Functions changes summary: 0 Removed, 1 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 2 Changed (1 filtered out), 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
 
   [A] 'method int S0::get_member0() const'
 
-1 function with some indirect sub-type change:
+2 functions with some indirect sub-type change:
 
-  [C] 'function void foo(S0&, S1*)' has some indirect sub-type changes:
-    parameter 1 of type 'S0&' has sub-type changes:
-      in referenced type 'class S0':
-        type size changed from 96 to 128 (in bits)
-        1 base class change:
-          'class B0S0' changed:
-            type size changed from 64 to 96 (in bits)
-            1 data member insertion:
-              'unsigned int B0S0::m2', at offset 32 (in bits)
-            1 data member change:
-              'char B0S0::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
-        1 data member change:
-          'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits)
+  [C] 'method void B0S0::member0() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const B0S0*' has sub-type changes:
+      in pointed to type 'const B0S0':
+        in unqualified underlying type 'class B0S0':
+          type size changed from 64 to 96 (in bits)
+          1 data member insertion:
+            'unsigned int B0S0::m2', at offset 32 (in bits)
+          1 data member change:
+            'char B0S0::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
+
+  [C] 'method void S0::member0() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S0*' has sub-type changes:
+      in pointed to type 'const S0':
+        in unqualified underlying type 'class S0':
+          type size changed from 96 to 128 (in bits)
+          1 base class change:
+            'class B0S0' changed:
+              details were reported earlier
+          1 data member change:
+            'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits)
 
diff --git a/tests/data/test-diff-filter/test01-report.txt b/tests/data/test-diff-filter/test01-report.txt
index 73b907e..b8d1872 100644
--- a/tests/data/test-diff-filter/test01-report.txt
+++ b/tests/data/test-diff-filter/test01-report.txt
@@ -1,23 +1,35 @@
-Functions changes summary: 0 Removed, 1 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 3 Changed, 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
 
   [A] 'method int S0::get_member0() const'
 
-1 function with some indirect sub-type change:
+3 functions with some indirect sub-type change:
+
+  [C] 'method void B0S0::member0() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const B0S0*' has sub-type changes:
+      in pointed to type 'const B0S0':
+        in unqualified underlying type 'class B0S0':
+          type size changed from 64 to 96 (in bits)
+          1 data member insertion:
+            'unsigned int B0S0::m2', at offset 32 (in bits)
+          1 data member change:
+            'char B0S0::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
+
+  [C] 'method void S0::member0() const' has some indirect sub-type changes:
+    'method void S0::member0() const' access changed from 'private' to 'public'
+    implicit parameter 0 of type 'const S0*' has sub-type changes:
+      in pointed to type 'const S0':
+        in unqualified underlying type 'class S0':
+          type size changed from 96 to 128 (in bits)
+          1 base class change:
+            'class B0S0' changed:
+              details were reported earlier
+          1 data member change:
+            'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
 
   [C] 'function void foo(S0&, S1*)' has some indirect sub-type changes:
     parameter 1 of type 'S0&' has sub-type changes:
-      in referenced type 'class S0':
-        type size changed from 96 to 128 (in bits)
-        1 base class change:
-          'class B0S0' changed:
-            type size changed from 64 to 96 (in bits)
-            1 data member insertion:
-              'unsigned int B0S0::m2', at offset 32 (in bits)
-            1 data member change:
-              'char B0S0::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
-        1 data member change:
-          'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
+      referenced type 'class S0' changed, as reported earlier
 
diff --git a/tests/data/test-diff-filter/test10-report.txt b/tests/data/test-diff-filter/test10-report.txt
index 4d08d4b..35577b0 100644
--- a/tests/data/test-diff-filter/test10-report.txt
+++ b/tests/data/test-diff-filter/test10-report.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 2 Removed, 1 Changed, 0 Added functions
+Functions changes summary: 2 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 2 Removed functions:
@@ -8,9 +8,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
+  [C] 'method int S::mem_fn0()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
         type size changed from 32 to 8 (in bits)
         1 data member deletion:
           'unsigned int S::m', at offset 0 (in bits)
diff --git a/tests/data/test-diff-filter/test13-report.txt b/tests/data/test-diff-filter/test13-report.txt
index 17844fa..edec807 100644
--- a/tests/data/test-diff-filter/test13-report.txt
+++ b/tests/data/test-diff-filter/test13-report.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 1 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
@@ -7,9 +7,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
+  [C] 'method S::S()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
         type size changed from 64 to 96 (in bits)
         no base class change (1 filtered);
         1 base class insertion:
diff --git a/tests/data/test-diff-filter/test2-report.txt b/tests/data/test-diff-filter/test2-report.txt
index 3e68ab6..1755df6 100644
--- a/tests/data/test-diff-filter/test2-report.txt
+++ b/tests/data/test-diff-filter/test2-report.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 2 Changed, 1 Added functions
+Functions changes summary: 0 Removed, 2 Changed (3 filtered out), 1 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 Added function:
@@ -7,9 +7,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 2 functions with some indirect sub-type change:
 
-  [C] 'function void bar(C1&)' has some indirect sub-type changes:
-    parameter 1 of type 'C1&' has sub-type changes:
-      in referenced type 'class C1':
+  [C] 'method C1::C1()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'C1*' has sub-type changes:
+      in pointed to type 'class C1':
         type size changed from 8 to 64 (in bits)
         1 data member insertion:
           'int C1::m1', at offset 32 (in bits)
diff --git a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt
index 5db38b2..cd0c04b 100644
--- a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt
+++ b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
+Functions changes summary: 0 Removed, 1 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
diff --git a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt
index 95dd372..e7de99b 100644
--- a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt
+++ b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt
@@ -1,7 +1,7 @@
-Functions changes summary: 0 Removed, 3 Changed, 0 Added functions
+Functions changes summary: 0 Removed, 4 Changed, 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-3 functions with some indirect sub-type change:
+4 functions with some indirect sub-type change:
 
   [C] 'function void bar(s*)' has some indirect sub-type changes:
     parameter 1 of type 's*' has sub-type changes:
@@ -16,7 +16,13 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   [C] 'method s::s(const s&)' has some indirect sub-type changes:
     'method s::s(const s&)' access changed from 'public' to 'private'
+    implicit parameter 0 of type 's*' has sub-type changes:
+      pointed to type 'class s' changed, as reported earlier
     parameter 1 of type 'const s&' has sub-type changes:
       in referenced type 'const s':
         unqualified underlying type 'class s' changed, as reported earlier
 
+  [C] 'method s::s()' has some indirect sub-type changes:
+    implicit parameter 0 of type 's*' has sub-type changes:
+      pointed to type 'class s' changed, as reported earlier
+
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
index c4b3a76..c8c6e48 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 82 Removed, 6 Changed (14 filtered out), 1081 Added functions
+Functions changes summary: 82 Removed, 6 Changed (31 filtered out), 1081 Added functions
 Variables changes summary: 47 Removed, 1 Changed, 11 Added variables
 Function symbols changes summary: 7 Removed, 76 Added function symbols not referenced by debug info
 Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
@@ -1174,6 +1174,124 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
 
 6 functions with some indirect sub-type change:
 
+  [C] 'method void Engine::fini_process(bool)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'Engine*' has sub-type changes:
+      in pointed to type 'struct Engine':
+        type size changed from 2752 to 5504 (in bits)
+        1 data member deletion:
+          'mutex_t Engine::m_ptr_lock', at offset 1344 (in bits)
+        7 data member insertions:
+          'PtrDataTable Engine::m_targetptr_set', at offset 1664 (in bits)
+          'StreamMap Engine::m_stream_map', at offset 3072 (in bits)
+          'mutex_t Engine::m_stream_lock', at offset 3456 (in bits)
+          'int Engine::m_num_cores', at offset 3776 (in bits)
+          'int Engine::m_num_threads', at offset 3808 (in bits)
+          'std::bitset<1024ul> Engine::m_cpus', at offset 3840 (in bits)
+          'DynLibList Engine::m_dyn_libs', at offset 4864 (in bits)
+        4 data member changes:
+          type of 'Engine::PtrSet Engine::m_ptr_set' changed:
+            entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable'
+              type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
+              type size changed from 384 to 704 (in bits)
+              1 data member insertion:
+                'mutex_t PtrDataTable::m_ptr_lock', at offset 384 (in bits)
+              1 data member change:
+                type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
+                  typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet
+                  underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' changed:
+                    type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
+                    type size hasn't changed
+                    1 data member change:
+                      type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
+                        entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type'
+                          type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
+                          type size hasn't changed
+                          1 base class deletion:
+                            class std::allocator<std::_Rb_tree_node<PtrData> >
+                          2 data member deletions:
+                            'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
+                            'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
+                          1 data member change:
+                            type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
+                              type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
+                              type size changed from 8 to 384 (in bits)
+                              1 base class deletion:
+                                struct std::binary_function<PtrData, PtrData, bool>
+                              1 base class insertion:
+                                class std::allocator<std::_Rb_tree_node<PtrData> >
+                              3 data member insertions:
+                                'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bits)
+                                'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
+                                'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
+                            and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl'
+                      and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t'
+                and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list'
+          'Engine::SignalMap Engine::m_signal_map' offset changed from 1664 to 2368 (in bits) (by +704 bits)
+          'mutex_t Engine::m_signal_lock' offset changed from 2048 to 2752 (in bits) (by +704 bits)
+          type of 'coifunction* Engine::m_funcs[6]' changed:
+            type name changed from 'coifunction*[6]' to 'coifunction*[7]'
+            array type size changed from 384 to 448
+            array type subrange 1 changed length from 6 to 7
+          and offset changed from 2368 to 5056 (in bits) (by +2688 bits)
+
+  [C] 'method void OffloadDescriptor::cleanup()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'OffloadDescriptor*' has sub-type changes:
+      in pointed to type 'struct OffloadDescriptor':
+        type size changed from 2240 to 2368 (in bits)
+        9 data member insertions:
+          'bool OffloadDescriptor::m_wait_all_devices', at offset 320 (in bits)
+          'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 1824 (in bits)
+          'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 1952 (in bits)
+          '_Offload_stream OffloadDescriptor::m_stream', at offset 1984 (in bits)
+          'bool OffloadDescriptor::m_initial_need_runfunction', at offset 2248 (in bits)
+          'bool OffloadDescriptor::m_out_with_preallocated', at offset 2256 (in bits)
+          'bool OffloadDescriptor::m_preallocated_alloc', at offset 2264 (in bits)
+          'bool OffloadDescriptor::m_traceback_called', at offset 2272 (in bits)
+          'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 2304 (in bits)
+        8 data member changes (2 filtered):
+          'bool OffloadDescriptor::m_is_mandatory' offset changed from 320 to 328 (in bits) (by +8 bits)
+          'const bool OffloadDescriptor::m_is_openmp' offset changed from 328 to 336 (in bits) (by +8 bits)
+          type of 'VarDesc* OffloadDescriptor::m_vars' changed:
+            in pointed to type 'struct VarDesc':
+              type size hasn't changed
+              1 data member change:
+                type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
+                  type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
+                  type size hasn't changed
+                  1 data member changes (1 filtered):
+                    anonymous data member at offset 0 (in bits) changed from:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
+                    to:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
+          type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
+            in pointed to type 'struct OffloadDescriptor::VarExtra':
+              type size changed from 576 to 640 (in bits)
+              2 data member insertions:
+                'void* OffloadDescriptor::VarExtra::alloc', at offset 320 (in bits)
+                'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 608 (in bits)
+              4 data member changes (3 filtered):
+                'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
+                type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
+                  in pointed to type 'struct CeanReadRanges':
+                    type size changed from 512 to 576 (in bits)
+                    1 data member insertion:
+                      'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bits)
+                    7 data member changes:
+                      'void* CeanReadRanges::ptr' offset changed from 0 to 64 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::current_number' offset changed from 64 to 128 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::range_max_number' offset changed from 128 to 192 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::range_size' offset changed from 192 to 256 (in bits) (by +64 bits)
+                      'int CeanReadRanges::last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
+                      'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 384 to 448 (in bits) (by +64 bits)
+                and offset changed from 384 to 448 (in bits) (by +64 bits)
+                'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
+                'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
+          'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
+          'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 2048 to 2112 (in bits) (by +64 bits)
+          'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 2112 to 2176 (in bits) (by +64 bits)
+          'bool OffloadDescriptor::m_need_runfunction' offset changed from 2176 to 2240 (in bits) (by +64 bits)
+
   [C] 'method void OffloadDescriptor::report_coi_error(error_types, COIRESULT)' has some indirect sub-type changes:
     parameter 1 of type 'typedef error_types' changed:
       underlying type 'enum __anonymous_enum__' changed:
@@ -1294,20 +1412,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126'
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133'
 
-  [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' has some indirect sub-type changes:
-    parameter 1 of type 'VarDesc*' has sub-type changes:
-      in pointed to type 'struct VarDesc':
-        type size hasn't changed
-        1 data member change:
-          type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
-            type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
-            type size hasn't changed
-            1 data member changes (1 filtered):
-              anonymous data member at offset 0 (in bits) changed from:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
-              to:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
-
   [C] 'function void __offload_myoRegisterTables(InitTableEntry*, SharedTableEntry*, FptrTableEntry*)' has some indirect sub-type changes:
     parameter 1 of type 'InitTableEntry*' changed:
       in pointed to type 'struct InitTableEntry':
@@ -1320,111 +1424,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 parameter 1 of type 'typedef MyoArena' was added
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__1::func'
 
-  [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' has some indirect sub-type changes:
-    parameter 1 of type 'typedef OFFLOAD' has sub-type changes:
-      underlying type 'OffloadDescriptor*' changed:
-        in pointed to type 'struct OffloadDescriptor':
-          type size changed from 2240 to 2368 (in bits)
-          9 data member insertions:
-            'bool OffloadDescriptor::m_wait_all_devices', at offset 320 (in bits)
-            'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 1824 (in bits)
-            'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 1952 (in bits)
-            '_Offload_stream OffloadDescriptor::m_stream', at offset 1984 (in bits)
-            'bool OffloadDescriptor::m_initial_need_runfunction', at offset 2248 (in bits)
-            'bool OffloadDescriptor::m_out_with_preallocated', at offset 2256 (in bits)
-            'bool OffloadDescriptor::m_preallocated_alloc', at offset 2264 (in bits)
-            'bool OffloadDescriptor::m_traceback_called', at offset 2272 (in bits)
-            'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 2304 (in bits)
-          8 data member changes (2 filtered):
-            type of 'Engine& OffloadDescriptor::m_device' changed:
-              in referenced type 'struct Engine':
-                type size changed from 2752 to 5504 (in bits)
-                1 data member deletion:
-                  'mutex_t Engine::m_ptr_lock', at offset 1344 (in bits)
-                7 data member insertions:
-                  'PtrDataTable Engine::m_targetptr_set', at offset 1664 (in bits)
-                  'StreamMap Engine::m_stream_map', at offset 3072 (in bits)
-                  'mutex_t Engine::m_stream_lock', at offset 3456 (in bits)
-                  'int Engine::m_num_cores', at offset 3776 (in bits)
-                  'int Engine::m_num_threads', at offset 3808 (in bits)
-                  'std::bitset<1024ul> Engine::m_cpus', at offset 3840 (in bits)
-                  'DynLibList Engine::m_dyn_libs', at offset 4864 (in bits)
-                4 data member changes:
-                  type of 'Engine::PtrSet Engine::m_ptr_set' changed:
-                    entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable'
-                      type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
-                      type size changed from 384 to 704 (in bits)
-                      1 data member insertion:
-                        'mutex_t PtrDataTable::m_ptr_lock', at offset 384 (in bits)
-                      1 data member change:
-                        type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
-                          typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet
-                          underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' changed:
-                            type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
-                            type size hasn't changed
-                            1 data member change:
-                              type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
-                                entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type'
-                                  type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
-                                  type size hasn't changed
-                                  1 base class deletion:
-                                    class std::allocator<std::_Rb_tree_node<PtrData> >
-                                  2 data member deletions:
-                                    'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
-                                    'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
-                                  1 data member change:
-                                    type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
-                                      type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
-                                      type size changed from 8 to 384 (in bits)
-                                      1 base class deletion:
-                                        struct std::binary_function<PtrData, PtrData, bool>
-                                      1 base class insertion:
-                                        class std::allocator<std::_Rb_tree_node<PtrData> >
-                                      3 data member insertions:
-                                        'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bits)
-                                        'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
-                                        'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
-                                    and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl'
-                              and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t'
-                        and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list'
-                  'Engine::SignalMap Engine::m_signal_map' offset changed from 1664 to 2368 (in bits) (by +704 bits)
-                  'mutex_t Engine::m_signal_lock' offset changed from 2048 to 2752 (in bits) (by +704 bits)
-                  type of 'coifunction* Engine::m_funcs[6]' changed:
-                    type name changed from 'coifunction*[6]' to 'coifunction*[7]'
-                    array type size changed from 384 to 448
-                    array type subrange 1 changed length from 6 to 7
-                  and offset changed from 2368 to 5056 (in bits) (by +2688 bits)
-            'bool OffloadDescriptor::m_is_mandatory' offset changed from 320 to 328 (in bits) (by +8 bits)
-            'const bool OffloadDescriptor::m_is_openmp' offset changed from 328 to 336 (in bits) (by +8 bits)
-            type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
-              in pointed to type 'struct OffloadDescriptor::VarExtra':
-                type size changed from 576 to 640 (in bits)
-                2 data member insertions:
-                  'void* OffloadDescriptor::VarExtra::alloc', at offset 320 (in bits)
-                  'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 608 (in bits)
-                4 data member changes (3 filtered):
-                  'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
-                  type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
-                    in pointed to type 'struct CeanReadRanges':
-                      type size changed from 512 to 576 (in bits)
-                      1 data member insertion:
-                        'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bits)
-                      7 data member changes:
-                        'void* CeanReadRanges::ptr' offset changed from 0 to 64 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::current_number' offset changed from 64 to 128 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::range_max_number' offset changed from 128 to 192 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::range_size' offset changed from 192 to 256 (in bits) (by +64 bits)
-                        'int CeanReadRanges::last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
-                        'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 384 to 448 (in bits) (by +64 bits)
-                  and offset changed from 384 to 448 (in bits) (by +64 bits)
-                  'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
-                  'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
-            'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
-            'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 2048 to 2112 (in bits) (by +64 bits)
-            'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 2112 to 2176 (in bits) (by +64 bits)
-            'bool OffloadDescriptor::m_need_runfunction' offset changed from 2176 to 2240 (in bits) (by +64 bits)
-
   [C] 'function void __offload_register_image(void*)' has some indirect sub-type changes:
     return type changed:
       type name changed from 'void' to 'bool'
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
index 03c1542..55b1c0a 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 82 Removed, 6 Changed (14 filtered out), 1081 Added functions
+Functions changes summary: 82 Removed, 6 Changed (31 filtered out), 1081 Added functions
 Variables changes summary: 47 Removed, 1 Changed, 11 Added variables
 Function symbols changes summary: 7 Removed, 76 Added function symbols not referenced by debug info
 Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
@@ -1174,6 +1174,124 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
 
 6 functions with some indirect sub-type change:
 
+  [C] 'method void Engine::fini_process(bool)' at offload_engine.h:560:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'Engine*' has sub-type changes:
+      in pointed to type 'struct Engine' at offload_engine.h:395:1:
+        type size changed from 2752 to 5504 (in bits)
+        1 data member deletion:
+          'mutex_t Engine::m_ptr_lock', at offset 1344 (in bits) at offload_engine.h:474:1
+        7 data member insertions:
+          'PtrDataTable Engine::m_targetptr_set', at offset 1664 (in bits) at offload_engine.h:630:1
+          'StreamMap Engine::m_stream_map', at offset 3072 (in bits) at offload_engine.h:637:1
+          'mutex_t Engine::m_stream_lock', at offset 3456 (in bits) at offload_engine.h:638:1
+          'int Engine::m_num_cores', at offset 3776 (in bits) at offload_engine.h:639:1
+          'int Engine::m_num_threads', at offset 3808 (in bits) at offload_engine.h:640:1
+          'std::bitset<1024ul> Engine::m_cpus', at offset 3840 (in bits) at offload_engine.h:641:1
+          'DynLibList Engine::m_dyn_libs', at offset 4864 (in bits) at offload_engine.h:644:1
+        4 data member changes:
+          type of 'Engine::PtrSet Engine::m_ptr_set' changed:
+            entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable' at offload_engine.h:163:1
+              type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
+              type size changed from 384 to 704 (in bits)
+              1 data member insertion:
+                'mutex_t PtrDataTable::m_ptr_lock', at offset 384 (in bits) at offload_engine.h:204:1
+              1 data member change:
+                type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
+                  typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet at offload_engine.h:165:1
+                  underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' at stl_tree.h:357:1 changed:
+                    type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
+                    type size hasn't changed
+                    1 data member change:
+                      type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
+                        entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type' at stl_set.h:115:1
+                          type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
+                          type size hasn't changed
+                          1 base class deletion:
+                            class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
+                          2 data member deletions:
+                            'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits) at stl_tree.h:593:1
+                            'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits) at stl_tree.h:594:1
+                          1 data member change:
+                            type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
+                              type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
+                              type size changed from 8 to 384 (in bits)
+                              1 base class deletion:
+                                struct std::binary_function<PtrData, PtrData, bool> at stl_function.h:118:1
+                              1 base class insertion:
+                                class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
+                              3 data member insertions:
+                                'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bits) at stl_tree.h:592:1
+                                'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits) at stl_tree.h:593:1
+                                'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits) at stl_tree.h:594:1
+                            and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' at stl_tree.h:633:1
+                      and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' at stl_set.h:116:1
+                and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list' at offload_engine.h:203:1
+          'Engine::SignalMap Engine::m_signal_map' offset changed from 1664 to 2368 (in bits) (by +704 bits)
+          'mutex_t Engine::m_signal_lock' offset changed from 2048 to 2752 (in bits) (by +704 bits)
+          type of 'coifunction* Engine::m_funcs[6]' changed:
+            type name changed from 'coifunction*[6]' to 'coifunction*[7]'
+            array type size changed from 384 to 448
+            array type subrange 1 changed length from 6 to 7
+          and offset changed from 2368 to 5056 (in bits) (by +2688 bits)
+
+  [C] 'method void OffloadDescriptor::cleanup()' at offload_host.h:186:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'OffloadDescriptor*' has sub-type changes:
+      in pointed to type 'struct OffloadDescriptor' at offload_host.h:68:1:
+        type size changed from 2240 to 2368 (in bits)
+        9 data member insertions:
+          'bool OffloadDescriptor::m_wait_all_devices', at offset 320 (in bits) at offload_host.h:288:1
+          'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 1824 (in bits) at offload_host.h:326:1
+          'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 1952 (in bits) at offload_host.h:329:1
+          '_Offload_stream OffloadDescriptor::m_stream', at offset 1984 (in bits) at offload_host.h:332:1
+          'bool OffloadDescriptor::m_initial_need_runfunction', at offset 2248 (in bits) at offload_host.h:347:1
+          'bool OffloadDescriptor::m_out_with_preallocated', at offset 2256 (in bits) at offload_host.h:352:1
+          'bool OffloadDescriptor::m_preallocated_alloc', at offset 2264 (in bits) at offload_host.h:357:1
+          'bool OffloadDescriptor::m_traceback_called', at offset 2272 (in bits) at offload_host.h:360:1
+          'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 2304 (in bits) at offload_host.h:362:1
+        8 data member changes (2 filtered):
+          'bool OffloadDescriptor::m_is_mandatory' offset changed from 320 to 328 (in bits) (by +8 bits)
+          'const bool OffloadDescriptor::m_is_openmp' offset changed from 328 to 336 (in bits) (by +8 bits)
+          type of 'VarDesc* OffloadDescriptor::m_vars' changed:
+            in pointed to type 'struct VarDesc' at offload_common.h:254:1:
+              type size hasn't changed
+              1 data member change:
+                type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
+                  type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
+                  type size hasn't changed
+                  1 data member changes (1 filtered):
+                    anonymous data member at offset 0 (in bits) changed from:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
+                    to:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
+          type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
+            in pointed to type 'struct OffloadDescriptor::VarExtra' at offload_host.h:216:1:
+              type size changed from 576 to 640 (in bits)
+              2 data member insertions:
+                'void* OffloadDescriptor::VarExtra::alloc', at offset 320 (in bits) at offload_host.h:222:1
+                'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 608 (in bits) at offload_host.h:227:1
+              4 data member changes (3 filtered):
+                'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
+                type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
+                  in pointed to type 'struct CeanReadRanges' at cean_util.h:58:1:
+                    type size changed from 512 to 576 (in bits)
+                    1 data member insertion:
+                      'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bits) at cean_util.h:59:1
+                    7 data member changes:
+                      'void* CeanReadRanges::ptr' offset changed from 0 to 64 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::current_number' offset changed from 64 to 128 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::range_max_number' offset changed from 128 to 192 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::range_size' offset changed from 192 to 256 (in bits) (by +64 bits)
+                      'int CeanReadRanges::last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
+                      'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 384 to 448 (in bits) (by +64 bits)
+                and offset changed from 384 to 448 (in bits) (by +64 bits)
+                'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
+                'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
+          'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
+          'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 2048 to 2112 (in bits) (by +64 bits)
+          'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 2112 to 2176 (in bits) (by +64 bits)
+          'bool OffloadDescriptor::m_need_runfunction' offset changed from 2176 to 2240 (in bits) (by +64 bits)
+
   [C] 'method void OffloadDescriptor::report_coi_error(error_types, COIRESULT)' at offload_host.h:206:1 has some indirect sub-type changes:
     parameter 1 of type 'typedef error_types' changed:
       underlying type 'enum __anonymous_enum__' at liboffload_error_codes.h:38:1 changed:
@@ -1294,20 +1412,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126' at liboffload_error_codes.h:38:1
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133' at liboffload_error_codes.h:38:1
 
-  [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' at offload_host.h:157:1 has some indirect sub-type changes:
-    parameter 1 of type 'VarDesc*' has sub-type changes:
-      in pointed to type 'struct VarDesc' at offload_common.h:254:1:
-        type size hasn't changed
-        1 data member change:
-          type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
-            type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
-            type size hasn't changed
-            1 data member changes (1 filtered):
-              anonymous data member at offset 0 (in bits) changed from:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
-              to:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
-
   [C] 'function void __offload_myoRegisterTables(InitTableEntry*, SharedTableEntry*, FptrTableEntry*)' at offload_myo_host.cpp:691:1 has some indirect sub-type changes:
     parameter 1 of type 'InitTableEntry*' changed:
       in pointed to type 'struct InitTableEntry' at offload_table.h:296:1:
@@ -1320,111 +1424,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 parameter 1 of type 'typedef MyoArena' was added
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__1::func' at offload_table.h:295:1
 
-  [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' at compiler_if_host.cpp:456:1 has some indirect sub-type changes:
-    parameter 1 of type 'typedef OFFLOAD' has sub-type changes:
-      underlying type 'OffloadDescriptor*' changed:
-        in pointed to type 'struct OffloadDescriptor' at offload_host.h:68:1:
-          type size changed from 2240 to 2368 (in bits)
-          9 data member insertions:
-            'bool OffloadDescriptor::m_wait_all_devices', at offset 320 (in bits) at offload_host.h:288:1
-            'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 1824 (in bits) at offload_host.h:326:1
-            'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 1952 (in bits) at offload_host.h:329:1
-            '_Offload_stream OffloadDescriptor::m_stream', at offset 1984 (in bits) at offload_host.h:332:1
-            'bool OffloadDescriptor::m_initial_need_runfunction', at offset 2248 (in bits) at offload_host.h:347:1
-            'bool OffloadDescriptor::m_out_with_preallocated', at offset 2256 (in bits) at offload_host.h:352:1
-            'bool OffloadDescriptor::m_preallocated_alloc', at offset 2264 (in bits) at offload_host.h:357:1
-            'bool OffloadDescriptor::m_traceback_called', at offset 2272 (in bits) at offload_host.h:360:1
-            'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 2304 (in bits) at offload_host.h:362:1
-          8 data member changes (2 filtered):
-            type of 'Engine& OffloadDescriptor::m_device' changed:
-              in referenced type 'struct Engine' at offload_engine.h:395:1:
-                type size changed from 2752 to 5504 (in bits)
-                1 data member deletion:
-                  'mutex_t Engine::m_ptr_lock', at offset 1344 (in bits) at offload_engine.h:474:1
-                7 data member insertions:
-                  'PtrDataTable Engine::m_targetptr_set', at offset 1664 (in bits) at offload_engine.h:630:1
-                  'StreamMap Engine::m_stream_map', at offset 3072 (in bits) at offload_engine.h:637:1
-                  'mutex_t Engine::m_stream_lock', at offset 3456 (in bits) at offload_engine.h:638:1
-                  'int Engine::m_num_cores', at offset 3776 (in bits) at offload_engine.h:639:1
-                  'int Engine::m_num_threads', at offset 3808 (in bits) at offload_engine.h:640:1
-                  'std::bitset<1024ul> Engine::m_cpus', at offset 3840 (in bits) at offload_engine.h:641:1
-                  'DynLibList Engine::m_dyn_libs', at offset 4864 (in bits) at offload_engine.h:644:1
-                4 data member changes:
-                  type of 'Engine::PtrSet Engine::m_ptr_set' changed:
-                    entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable' at offload_engine.h:163:1
-                      type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
-                      type size changed from 384 to 704 (in bits)
-                      1 data member insertion:
-                        'mutex_t PtrDataTable::m_ptr_lock', at offset 384 (in bits) at offload_engine.h:204:1
-                      1 data member change:
-                        type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
-                          typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet at offload_engine.h:165:1
-                          underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' at stl_tree.h:357:1 changed:
-                            type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
-                            type size hasn't changed
-                            1 data member change:
-                              type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
-                                entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type' at stl_set.h:115:1
-                                  type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
-                                  type size hasn't changed
-                                  1 base class deletion:
-                                    class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
-                                  2 data member deletions:
-                                    'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits) at stl_tree.h:593:1
-                                    'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits) at stl_tree.h:594:1
-                                  1 data member change:
-                                    type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
-                                      type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
-                                      type size changed from 8 to 384 (in bits)
-                                      1 base class deletion:
-                                        struct std::binary_function<PtrData, PtrData, bool> at stl_function.h:118:1
-                                      1 base class insertion:
-                                        class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
-                                      3 data member insertions:
-                                        'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bits) at stl_tree.h:592:1
-                                        'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits) at stl_tree.h:593:1
-                                        'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits) at stl_tree.h:594:1
-                                    and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' at stl_tree.h:633:1
-                              and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' at stl_set.h:116:1
-                        and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list' at offload_engine.h:203:1
-                  'Engine::SignalMap Engine::m_signal_map' offset changed from 1664 to 2368 (in bits) (by +704 bits)
-                  'mutex_t Engine::m_signal_lock' offset changed from 2048 to 2752 (in bits) (by +704 bits)
-                  type of 'coifunction* Engine::m_funcs[6]' changed:
-                    type name changed from 'coifunction*[6]' to 'coifunction*[7]'
-                    array type size changed from 384 to 448
-                    array type subrange 1 changed length from 6 to 7
-                  and offset changed from 2368 to 5056 (in bits) (by +2688 bits)
-            'bool OffloadDescriptor::m_is_mandatory' offset changed from 320 to 328 (in bits) (by +8 bits)
-            'const bool OffloadDescriptor::m_is_openmp' offset changed from 328 to 336 (in bits) (by +8 bits)
-            type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
-              in pointed to type 'struct OffloadDescriptor::VarExtra' at offload_host.h:216:1:
-                type size changed from 576 to 640 (in bits)
-                2 data member insertions:
-                  'void* OffloadDescriptor::VarExtra::alloc', at offset 320 (in bits) at offload_host.h:222:1
-                  'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 608 (in bits) at offload_host.h:227:1
-                4 data member changes (3 filtered):
-                  'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
-                  type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
-                    in pointed to type 'struct CeanReadRanges' at cean_util.h:58:1:
-                      type size changed from 512 to 576 (in bits)
-                      1 data member insertion:
-                        'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bits) at cean_util.h:59:1
-                      7 data member changes:
-                        'void* CeanReadRanges::ptr' offset changed from 0 to 64 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::current_number' offset changed from 64 to 128 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::range_max_number' offset changed from 128 to 192 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::range_size' offset changed from 192 to 256 (in bits) (by +64 bits)
-                        'int CeanReadRanges::last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
-                        'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 384 to 448 (in bits) (by +64 bits)
-                  and offset changed from 384 to 448 (in bits) (by +64 bits)
-                  'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
-                  'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
-            'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
-            'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 2048 to 2112 (in bits) (by +64 bits)
-            'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 2112 to 2176 (in bits) (by +64 bits)
-            'bool OffloadDescriptor::m_need_runfunction' offset changed from 2176 to 2240 (in bits) (by +64 bits)
-
   [C] 'function void __offload_register_image(void*)' at offload_host.cpp:5531:1 has some indirect sub-type changes:
     return type changed:
       type name changed from 'void' to 'bool'
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
index f28bb6b..4b74ded 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 82 Removed, 6 Changed (14 filtered out), 1081 Added functions
+Functions changes summary: 82 Removed, 6 Changed (31 filtered out), 1081 Added functions
 Variables changes summary: 47 Removed, 1 Changed, 11 Added variables
 Function symbols changes summary: 7 Removed, 76 Added function symbols not referenced by debug info
 Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
@@ -1174,6 +1174,124 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
 
 6 functions with some indirect sub-type change:
 
+  [C] 'method void Engine::fini_process(bool)' at offload_engine.h:560:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'Engine*' has sub-type changes:
+      in pointed to type 'struct Engine' at offload_engine.h:395:1:
+        type size changed from 0x158 to 0x2b0 (in bytes)
+        1 data member deletion:
+          'mutex_t Engine::m_ptr_lock', at offset 0xa8 (in bytes) at offload_engine.h:474:1
+        7 data member insertions:
+          'PtrDataTable Engine::m_targetptr_set', at offset 0xd0 (in bytes) at offload_engine.h:630:1
+          'StreamMap Engine::m_stream_map', at offset 0x180 (in bytes) at offload_engine.h:637:1
+          'mutex_t Engine::m_stream_lock', at offset 0x1b0 (in bytes) at offload_engine.h:638:1
+          'int Engine::m_num_cores', at offset 0x1d8 (in bytes) at offload_engine.h:639:1
+          'int Engine::m_num_threads', at offset 0x1dc (in bytes) at offload_engine.h:640:1
+          'std::bitset<1024ul> Engine::m_cpus', at offset 0x1e0 (in bytes) at offload_engine.h:641:1
+          'DynLibList Engine::m_dyn_libs', at offset 0x260 (in bytes) at offload_engine.h:644:1
+        4 data member changes:
+          type of 'Engine::PtrSet Engine::m_ptr_set' changed:
+            entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable' at offload_engine.h:163:1
+              type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
+              type size changed from 0x30 to 0x58 (in bytes)
+              1 data member insertion:
+                'mutex_t PtrDataTable::m_ptr_lock', at offset 0x30 (in bytes) at offload_engine.h:204:1
+              1 data member change:
+                type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
+                  typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet at offload_engine.h:165:1
+                  underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' at stl_tree.h:357:1 changed:
+                    type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
+                    type size hasn't changed
+                    1 data member change:
+                      type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
+                        entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type' at stl_set.h:115:1
+                          type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
+                          type size hasn't changed
+                          1 base class deletion:
+                            class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
+                          2 data member deletions:
+                            'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 0x8 (in bytes) at stl_tree.h:593:1
+                            'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 0x28 (in bytes) at stl_tree.h:594:1
+                          1 data member change:
+                            type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
+                              type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
+                              type size changed from 0x1 to 0x30 (in bytes)
+                              1 base class deletion:
+                                struct std::binary_function<PtrData, PtrData, bool> at stl_function.h:118:1
+                              1 base class insertion:
+                                class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
+                              3 data member insertions:
+                                'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bytes) at stl_tree.h:592:1
+                                'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 0x8 (in bytes) at stl_tree.h:593:1
+                                'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 0x28 (in bytes) at stl_tree.h:594:1
+                            and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' at stl_tree.h:633:1
+                      and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' at stl_set.h:116:1
+                and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list' at offload_engine.h:203:1
+          'Engine::SignalMap Engine::m_signal_map' offset changed from 0xd0 to 0x128 (in bytes) (by +0x58 bytes)
+          'mutex_t Engine::m_signal_lock' offset changed from 0x100 to 0x158 (in bytes) (by +0x58 bytes)
+          type of 'coifunction* Engine::m_funcs[6]' changed:
+            type name changed from 'coifunction*[6]' to 'coifunction*[7]'
+            array type size changed from 0x180 to 0x1c0
+            array type subrange 1 changed length from 6 to 7
+          and offset changed from 0x128 to 0x278 (in bytes) (by +0x150 bytes)
+
+  [C] 'method void OffloadDescriptor::cleanup()' at offload_host.h:186:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'OffloadDescriptor*' has sub-type changes:
+      in pointed to type 'struct OffloadDescriptor' at offload_host.h:68:1:
+        type size changed from 0x118 to 0x128 (in bytes)
+        9 data member insertions:
+          'bool OffloadDescriptor::m_wait_all_devices', at offset 0x28 (in bytes) at offload_host.h:288:1
+          'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 0xe4 (in bytes) at offload_host.h:326:1
+          'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 0xf4 (in bytes) at offload_host.h:329:1
+          '_Offload_stream OffloadDescriptor::m_stream', at offset 0xf8 (in bytes) at offload_host.h:332:1
+          'bool OffloadDescriptor::m_initial_need_runfunction', at offset 0x119 (in bytes) at offload_host.h:347:1
+          'bool OffloadDescriptor::m_out_with_preallocated', at offset 0x11a (in bytes) at offload_host.h:352:1
+          'bool OffloadDescriptor::m_preallocated_alloc', at offset 0x11b (in bytes) at offload_host.h:357:1
+          'bool OffloadDescriptor::m_traceback_called', at offset 0x11c (in bytes) at offload_host.h:360:1
+          'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 0x120 (in bytes) at offload_host.h:362:1
+        8 data member changes (2 filtered):
+          'bool OffloadDescriptor::m_is_mandatory' offset changed from 0x28 to 0x29 (in bytes) (by +0x1 bytes)
+          'const bool OffloadDescriptor::m_is_openmp' offset changed from 0x29 to 0x2a (in bytes) (by +0x1 bytes)
+          type of 'VarDesc* OffloadDescriptor::m_vars' changed:
+            in pointed to type 'struct VarDesc' at offload_common.h:254:1:
+              type size hasn't changed
+              1 data member change:
+                type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
+                  type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
+                  type size hasn't changed
+                  1 data member changes (1 filtered):
+                    anonymous data member at offset 0 (in bytes) changed from:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
+                    to:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
+          type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
+            in pointed to type 'struct OffloadDescriptor::VarExtra' at offload_host.h:216:1:
+              type size changed from 0x48 to 0x50 (in bytes)
+              2 data member insertions:
+                'void* OffloadDescriptor::VarExtra::alloc', at offset 0x28 (in bytes) at offload_host.h:222:1
+                'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 0x4c (in bytes) at offload_host.h:227:1
+              4 data member changes (3 filtered):
+                'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
+                type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
+                  in pointed to type 'struct CeanReadRanges' at cean_util.h:58:1:
+                    type size changed from 0x40 to 0x48 (in bytes)
+                    1 data member insertion:
+                      'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bytes) at cean_util.h:59:1
+                    7 data member changes:
+                      'void* CeanReadRanges::ptr' offset changed from 0 to 0x8 (in bytes) (by +0x8 bytes)
+                      'int64_t CeanReadRanges::current_number' offset changed from 0x8 to 0x10 (in bytes) (by +0x8 bytes)
+                      'int64_t CeanReadRanges::range_max_number' offset changed from 0x10 to 0x18 (in bytes) (by +0x8 bytes)
+                      'int64_t CeanReadRanges::range_size' offset changed from 0x18 to 0x20 (in bytes) (by +0x8 bytes)
+                      'int CeanReadRanges::last_noncont_ind' offset changed from 0x20 to 0x28 (in bytes) (by +0x8 bytes)
+                      'int64_t CeanReadRanges::init_offset' offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
+                      'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 0x30 to 0x38 (in bytes) (by +0x8 bytes)
+                and offset changed from 0x30 to 0x38 (in bytes) (by +0x8 bytes)
+                'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 0x38 to 0x40 (in bytes) (by +0x8 bytes)
+                'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 0x40 to 0x48 (in bytes) (by +0x8 bytes)
+          'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 0xf8 to 0x100 (in bytes) (by +0x8 bytes)
+          'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 0x100 to 0x108 (in bytes) (by +0x8 bytes)
+          'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 0x108 to 0x110 (in bytes) (by +0x8 bytes)
+          'bool OffloadDescriptor::m_need_runfunction' offset changed from 0x110 to 0x118 (in bytes) (by +0x8 bytes)
+
   [C] 'method void OffloadDescriptor::report_coi_error(error_types, COIRESULT)' at offload_host.h:206:1 has some indirect sub-type changes:
     parameter 1 of type 'typedef error_types' changed:
       underlying type 'enum __anonymous_enum__' at liboffload_error_codes.h:38:1 changed:
@@ -1294,20 +1412,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126' at liboffload_error_codes.h:38:1
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133' at liboffload_error_codes.h:38:1
 
-  [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' at offload_host.h:157:1 has some indirect sub-type changes:
-    parameter 1 of type 'VarDesc*' has sub-type changes:
-      in pointed to type 'struct VarDesc' at offload_common.h:254:1:
-        type size hasn't changed
-        1 data member change:
-          type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
-            type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
-            type size hasn't changed
-            1 data member changes (1 filtered):
-              anonymous data member at offset 0 (in bytes) changed from:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
-              to:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
-
   [C] 'function void __offload_myoRegisterTables(InitTableEntry*, SharedTableEntry*, FptrTableEntry*)' at offload_myo_host.cpp:691:1 has some indirect sub-type changes:
     parameter 1 of type 'InitTableEntry*' changed:
       in pointed to type 'struct InitTableEntry' at offload_table.h:296:1:
@@ -1320,111 +1424,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 parameter 1 of type 'typedef MyoArena' was added
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__1::func' at offload_table.h:295:1
 
-  [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' at compiler_if_host.cpp:456:1 has some indirect sub-type changes:
-    parameter 1 of type 'typedef OFFLOAD' has sub-type changes:
-      underlying type 'OffloadDescriptor*' changed:
-        in pointed to type 'struct OffloadDescriptor' at offload_host.h:68:1:
-          type size changed from 0x118 to 0x128 (in bytes)
-          9 data member insertions:
-            'bool OffloadDescriptor::m_wait_all_devices', at offset 0x28 (in bytes) at offload_host.h:288:1
-            'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 0xe4 (in bytes) at offload_host.h:326:1
-            'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 0xf4 (in bytes) at offload_host.h:329:1
-            '_Offload_stream OffloadDescriptor::m_stream', at offset 0xf8 (in bytes) at offload_host.h:332:1
-            'bool OffloadDescriptor::m_initial_need_runfunction', at offset 0x119 (in bytes) at offload_host.h:347:1
-            'bool OffloadDescriptor::m_out_with_preallocated', at offset 0x11a (in bytes) at offload_host.h:352:1
-            'bool OffloadDescriptor::m_preallocated_alloc', at offset 0x11b (in bytes) at offload_host.h:357:1
-            'bool OffloadDescriptor::m_traceback_called', at offset 0x11c (in bytes) at offload_host.h:360:1
-            'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 0x120 (in bytes) at offload_host.h:362:1
-          8 data member changes (2 filtered):
-            type of 'Engine& OffloadDescriptor::m_device' changed:
-              in referenced type 'struct Engine' at offload_engine.h:395:1:
-                type size changed from 0x158 to 0x2b0 (in bytes)
-                1 data member deletion:
-                  'mutex_t Engine::m_ptr_lock', at offset 0xa8 (in bytes) at offload_engine.h:474:1
-                7 data member insertions:
-                  'PtrDataTable Engine::m_targetptr_set', at offset 0xd0 (in bytes) at offload_engine.h:630:1
-                  'StreamMap Engine::m_stream_map', at offset 0x180 (in bytes) at offload_engine.h:637:1
-                  'mutex_t Engine::m_stream_lock', at offset 0x1b0 (in bytes) at offload_engine.h:638:1
-                  'int Engine::m_num_cores', at offset 0x1d8 (in bytes) at offload_engine.h:639:1
-                  'int Engine::m_num_threads', at offset 0x1dc (in bytes) at offload_engine.h:640:1
-                  'std::bitset<1024ul> Engine::m_cpus', at offset 0x1e0 (in bytes) at offload_engine.h:641:1
-                  'DynLibList Engine::m_dyn_libs', at offset 0x260 (in bytes) at offload_engine.h:644:1
-                4 data member changes:
-                  type of 'Engine::PtrSet Engine::m_ptr_set' changed:
-                    entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable' at offload_engine.h:163:1
-                      type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
-                      type size changed from 0x30 to 0x58 (in bytes)
-                      1 data member insertion:
-                        'mutex_t PtrDataTable::m_ptr_lock', at offset 0x30 (in bytes) at offload_engine.h:204:1
-                      1 data member change:
-                        type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
-                          typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet at offload_engine.h:165:1
-                          underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' at stl_tree.h:357:1 changed:
-                            type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
-                            type size hasn't changed
-                            1 data member change:
-                              type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
-                                entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type' at stl_set.h:115:1
-                                  type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
-                                  type size hasn't changed
-                                  1 base class deletion:
-                                    class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
-                                  2 data member deletions:
-                                    'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 0x8 (in bytes) at stl_tree.h:593:1
-                                    'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 0x28 (in bytes) at stl_tree.h:594:1
-                                  1 data member change:
-                                    type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
-                                      type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
-                                      type size changed from 0x1 to 0x30 (in bytes)
-                                      1 base class deletion:
-                                        struct std::binary_function<PtrData, PtrData, bool> at stl_function.h:118:1
-                                      1 base class insertion:
-                                        class std::allocator<std::_Rb_tree_node<PtrData> > at allocator.h:95:1
-                                      3 data member insertions:
-                                        'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bytes) at stl_tree.h:592:1
-                                        'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 0x8 (in bytes) at stl_tree.h:593:1
-                                        'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 0x28 (in bytes) at stl_tree.h:594:1
-                                    and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' at stl_tree.h:633:1
-                              and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' at stl_set.h:116:1
-                        and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list' at offload_engine.h:203:1
-                  'Engine::SignalMap Engine::m_signal_map' offset changed from 0xd0 to 0x128 (in bytes) (by +0x58 bytes)
-                  'mutex_t Engine::m_signal_lock' offset changed from 0x100 to 0x158 (in bytes) (by +0x58 bytes)
-                  type of 'coifunction* Engine::m_funcs[6]' changed:
-                    type name changed from 'coifunction*[6]' to 'coifunction*[7]'
-                    array type size changed from 0x180 to 0x1c0
-                    array type subrange 1 changed length from 6 to 7
-                  and offset changed from 0x128 to 0x278 (in bytes) (by +0x150 bytes)
-            'bool OffloadDescriptor::m_is_mandatory' offset changed from 0x28 to 0x29 (in bytes) (by +0x1 bytes)
-            'const bool OffloadDescriptor::m_is_openmp' offset changed from 0x29 to 0x2a (in bytes) (by +0x1 bytes)
-            type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
-              in pointed to type 'struct OffloadDescriptor::VarExtra' at offload_host.h:216:1:
-                type size changed from 0x48 to 0x50 (in bytes)
-                2 data member insertions:
-                  'void* OffloadDescriptor::VarExtra::alloc', at offset 0x28 (in bytes) at offload_host.h:222:1
-                  'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 0x4c (in bytes) at offload_host.h:227:1
-                4 data member changes (3 filtered):
-                  'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
-                  type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
-                    in pointed to type 'struct CeanReadRanges' at cean_util.h:58:1:
-                      type size changed from 0x40 to 0x48 (in bytes)
-                      1 data member insertion:
-                        'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bytes) at cean_util.h:59:1
-                      7 data member changes:
-                        'void* CeanReadRanges::ptr' offset changed from 0 to 0x8 (in bytes) (by +0x8 bytes)
-                        'int64_t CeanReadRanges::current_number' offset changed from 0x8 to 0x10 (in bytes) (by +0x8 bytes)
-                        'int64_t CeanReadRanges::range_max_number' offset changed from 0x10 to 0x18 (in bytes) (by +0x8 bytes)
-                        'int64_t CeanReadRanges::range_size' offset changed from 0x18 to 0x20 (in bytes) (by +0x8 bytes)
-                        'int CeanReadRanges::last_noncont_ind' offset changed from 0x20 to 0x28 (in bytes) (by +0x8 bytes)
-                        'int64_t CeanReadRanges::init_offset' offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
-                        'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 0x30 to 0x38 (in bytes) (by +0x8 bytes)
-                  and offset changed from 0x30 to 0x38 (in bytes) (by +0x8 bytes)
-                  'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 0x38 to 0x40 (in bytes) (by +0x8 bytes)
-                  'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 0x40 to 0x48 (in bytes) (by +0x8 bytes)
-            'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 0xf8 to 0x100 (in bytes) (by +0x8 bytes)
-            'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 0x100 to 0x108 (in bytes) (by +0x8 bytes)
-            'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 0x108 to 0x110 (in bytes) (by +0x8 bytes)
-            'bool OffloadDescriptor::m_need_runfunction' offset changed from 0x110 to 0x118 (in bytes) (by +0x8 bytes)
-
   [C] 'function void __offload_register_image(void*)' at offload_host.cpp:5531:1 has some indirect sub-type changes:
     return type changed:
       type name changed from 'void' to 'bool'
diff --git a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
index 28feddf..135d1df 100644
--- a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
+++ b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 2 Changed (63 filtered out), 13 Added functions
+Functions changes summary: 0 Removed, 10 Changed (174 filtered out), 13 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: 0 Removed, 6 Added variable symbols not referenced by debug info
@@ -25,7 +25,7 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
   [A] 'function std::unexpected_handler std::get_unexpected()'
   [A] 'method std::regex_error::regex_error(std::regex_constants::error_type)'
 
-2 functions with some indirect sub-type change:
+10 functions with some indirect sub-type change:
 
   [C] 'function __cxxabiv1::__cxa_dependent_exception* __cxxabiv1::__cxa_allocate_dependent_exception()' has some indirect sub-type changes:
     return type changed:
@@ -41,12 +41,135 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
           '__cxxabiv1::__cxa_exception* __cxxabiv1::__cxa_dependent_exception::nextPropagatingException' offset changed from 160 to 192 (in bits) (by +32 bits)
           'int __cxxabiv1::__cxa_dependent_exception::propagationCount' offset changed from 192 to 224 (in bits) (by +32 bits)
 
+  [C] 'method virtual std::__future_base::_Async_state_common::~_Async_state_common(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::__future_base::_Async_state_common*' has sub-type changes:
+      in pointed to type 'class std::__future_base::_Async_state_common':
+        type size hasn't changed
+        1 base class change:
+          'class std::__future_base::_State_base' changed:
+            type size hasn't changed
+            1 member function changes (3 filtered):
+              'method virtual std::__future_base::_State_base* std::__future_base::_State_base::_M_run_deferred()' has some sub-type changes:
+                return type changed:
+                  entity changed from 'std::__future_base::_State_base*' to 'void'
+                  type size changed from 32 to 0 (in bits)
+            1 data member change:
+              type of 'std::__future_base::_State_base::_Ptr_type std::__future_base::_State_base::_M_result' changed:
+                underlying type 'typedef std::__future_base::_Ptr' changed:
+                  underlying type 'class std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>' changed:
+                    type name changed from 'std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>' to 'std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>'
+                    type size hasn't changed
+                    1 data member change:
+                      type of 'std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::__tuple_type std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::_M_t' changed:
+                        typedef name changed from std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::__tuple_type to std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>::__tuple_type
+                        underlying type 'class std::tuple<std::__future_base::_Result<void>*, std::__future_base::_Result_base::_Deleter>' changed:
+                          type name changed from 'std::tuple<std::__future_base::_Result<void>*, std::__future_base::_Result_base::_Deleter>' to 'std::tuple<std::__future_base::_Result_base*, std::__future_base::_Result_base::_Deleter>'
+                          type size hasn't changed
+                          1 base class deletion:
+                            struct std::_Tuple_impl<0u, std::__future_base::_Result<void>*, std::__future_base::_Result_base::_Deleter>
+                          1 base class insertion:
+                            struct std::_Tuple_impl<0u, std::__future_base::_Result_base*, std::__future_base::_Result_base::_Deleter>
+                      and name of 'std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::_M_t' changed to 'std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>::_M_t'
+        1 member function changes (3 filtered):
+          'method virtual std::__future_base::_Async_state_common::~_Async_state_common(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::__future_base::_Async_state_common*' has sub-type changes:
+              pointed to type 'class std::__future_base::_Async_state_common' changed, as being reported
+
+  [C] 'method virtual std::__future_base::_State_base::~_State_base(int)' has some indirect sub-type changes:
+    linkage names of method virtual std::__future_base::_State_base::~_State_base(int)
+    changed from '_ZNSt13__future_base11_State_baseD2Ev@@GLIBCXX_3.4.15, _ZNSt13__future_base11_State_baseD1Ev@@GLIBCXX_3.4.15' to '_ZNSt13__future_base11_State_baseD1Ev@@GLIBCXX_3.4.15, _ZNSt13__future_base11_State_baseD2Ev@@GLIBCXX_3.4.15'
+    implicit parameter 0 of type 'std::__future_base::_State_base*' has sub-type changes:
+      pointed to type 'class std::__future_base::_State_base' changed, as reported earlier
+
   [C] 'function void std::__throw_regex_error(std::regex_constants::error_type)' has some indirect sub-type changes:
     parameter 1 of type 'enum std::regex_constants::error_type' has sub-type changes:
       type size hasn't changed
       1 enumerator deletion:
         'std::regex_constants::error_type::_S_error_last' value '13'
 
+  [C] 'method void std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_M_allocate_internal_buffer()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >':
+        type size hasn't changed
+        1 member function changes (13 filtered):
+          'method virtual std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::~basic_filebuf(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        1 data member change:
+          type of 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type* std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_M_codecvt' changed:
+            in pointed to type 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type':
+              in unqualified underlying type 'typedef std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type':
+                underlying type 'class std::codecvt<wchar_t, char, __mbstate_t>' changed:
+                  type size hasn't changed
+                  no base class change (1 filtered);
+                  2 member function insertions:
+                    'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_out(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&) const', virtual at voffset 2/8
+                    'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_in(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&) const', virtual at voffset 4/8
+                  no member function changes (10 filtered);
+
+  [C] 'method std::basic_fstream<wchar_t, std::char_traits<wchar_t> >* std::basic_fstream<wchar_t, std::char_traits<wchar_t> >::basic_fstream(int, void**, const char*, std::ios_base::openmode)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_fstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_fstream<wchar_t, std::char_traits<wchar_t> >':
+        type size hasn't changed
+        1 member function changes (3 filtered):
+          'method virtual std::basic_fstream<wchar_t, std::char_traits<wchar_t> >::~basic_fstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_fstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_fstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        no data member change (1 filtered);
+
+  [C] 'method std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >* std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::basic_ifstream(int, void**, const char*, std::ios_base::openmode)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >':
+        type size hasn't changed
+        3 member function changes (1 filtered):
+          'method virtual std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::~basic_ifstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+          'method virtual std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::~basic_ifstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+          'method virtual std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::~basic_ifstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        no data member change (1 filtered);
+
+  [C] 'method std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >* std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >::basic_ofstream(int, void**, const char*, std::ios_base::openmode)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >':
+        type size hasn't changed
+        1 member function changes (3 filtered):
+          'method virtual std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >::~basic_ofstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        no data member change (1 filtered);
+
+  [C] 'method std::codecvt_byname<wchar_t, char, __mbstate_t>* std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(const char*, std::size_t)' has some indirect sub-type changes:
+    Please note that the symbol of this function is _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@@GLIBCXX_3.4
+     and it aliases symbol: _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@@GLIBCXX_3.4
+    implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
+      in pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>':
+        type size hasn't changed
+        1 base class change:
+          'class std::codecvt<wchar_t, char, __mbstate_t>' changed:
+            details were reported earlier
+        2 member function changes (1 filtered):
+          'method virtual std::codecvt_byname<wchar_t, char, __mbstate_t>::~codecvt_byname(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
+              pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>' changed, as being reported
+          'method virtual std::codecvt_byname<wchar_t, char, __mbstate_t>::~codecvt_byname(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
+              pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>' changed, as being reported
+
+  [C] 'method virtual std::regex_error::~regex_error(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::regex_error*' has sub-type changes:
+      in pointed to type 'class std::regex_error':
+        type size hasn't changed
+        1 member function changes (2 filtered):
+          'method virtual std::regex_error::~regex_error(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::regex_error*' has sub-type changes:
+              pointed to type 'class std::regex_error' changed, as being reported
+        no data member change (1 filtered);
+
 6 Added variable symbols not referenced by debug info:
 
   [A] _ZTISt16bad_array_length@@CXXABI_1.3.8
diff --git a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
index ec25bf6..d128d69 100644
--- a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
+++ b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 2 Changed (63 filtered out), 13 Added functions
+Functions changes summary: 0 Removed, 10 Changed (174 filtered out), 13 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: 0 Removed, 6 Added variable symbols not referenced by debug info
@@ -25,7 +25,7 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
   [A] 'function std::unexpected_handler std::get_unexpected()'
   [A] 'method std::regex_error::regex_error(std::regex_constants::error_type)'
 
-2 functions with some indirect sub-type change:
+10 functions with some indirect sub-type change:
 
   [C] 'function __cxxabiv1::__cxa_dependent_exception* __cxxabiv1::__cxa_allocate_dependent_exception()' at eh_alloc.cc:158:1 has some indirect sub-type changes:
     return type changed:
@@ -41,12 +41,135 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
           '__cxxabiv1::__cxa_exception* __cxxabiv1::__cxa_dependent_exception::nextPropagatingException' offset changed from 160 to 192 (in bits) (by +32 bits)
           'int __cxxabiv1::__cxa_dependent_exception::propagationCount' offset changed from 192 to 224 (in bits) (by +32 bits)
 
+  [C] 'method virtual std::__future_base::_Async_state_common::~_Async_state_common(int)' at compatibility-thread-c++0x.cc:117:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::__future_base::_Async_state_common*' has sub-type changes:
+      in pointed to type 'class std::__future_base::_Async_state_common' at compatibility-thread-c++0x.cc:106:1:
+        type size hasn't changed
+        1 base class change:
+          'class std::__future_base::_State_base' at future:306:1 changed:
+            type size hasn't changed
+            1 member function changes (3 filtered):
+              'method virtual std::__future_base::_State_base* std::__future_base::_State_base::_M_run_deferred()' has some sub-type changes:
+                return type changed:
+                  entity changed from 'std::__future_base::_State_base*' to 'void'
+                  type size changed from 32 to 0 (in bits)
+            1 data member change:
+              type of 'std::__future_base::_State_base::_Ptr_type std::__future_base::_State_base::_M_result' changed:
+                underlying type 'typedef std::__future_base::_Ptr' at future:253:1 changed:
+                  underlying type 'class std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>' at unique_ptr.h:109:1 changed:
+                    type name changed from 'std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>' to 'std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>'
+                    type size hasn't changed
+                    1 data member change:
+                      type of 'std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::__tuple_type std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::_M_t' changed:
+                        typedef name changed from std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::__tuple_type to std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>::__tuple_type at unique_ptr.h:146:1
+                        underlying type 'class std::tuple<std::__future_base::_Result<void>*, std::__future_base::_Result_base::_Deleter>' at tuple:521:1 changed:
+                          type name changed from 'std::tuple<std::__future_base::_Result<void>*, std::__future_base::_Result_base::_Deleter>' to 'std::tuple<std::__future_base::_Result_base*, std::__future_base::_Result_base::_Deleter>'
+                          type size hasn't changed
+                          1 base class deletion:
+                            struct std::_Tuple_impl<0u, std::__future_base::_Result<void>*, std::__future_base::_Result_base::_Deleter> at tuple:229:1
+                          1 base class insertion:
+                            struct std::_Tuple_impl<0u, std::__future_base::_Result_base*, std::__future_base::_Result_base::_Deleter> at tuple:231:1
+                      and name of 'std::unique_ptr<std::__future_base::_Result<void>, std::__future_base::_Result_base::_Deleter>::_M_t' changed to 'std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>::_M_t' at unique_ptr.h:147:1
+        1 member function changes (3 filtered):
+          'method virtual std::__future_base::_Async_state_common::~_Async_state_common(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::__future_base::_Async_state_common*' has sub-type changes:
+              pointed to type 'class std::__future_base::_Async_state_common' changed, as being reported
+
+  [C] 'method virtual std::__future_base::_State_base::~_State_base(int)' at compatibility-thread-c++0x.cc:103:1 has some indirect sub-type changes:
+    linkage names of method virtual std::__future_base::_State_base::~_State_base(int)
+    changed from '_ZNSt13__future_base11_State_baseD2Ev@@GLIBCXX_3.4.15, _ZNSt13__future_base11_State_baseD1Ev@@GLIBCXX_3.4.15' to '_ZNSt13__future_base11_State_baseD1Ev@@GLIBCXX_3.4.15, _ZNSt13__future_base11_State_baseD2Ev@@GLIBCXX_3.4.15'
+    implicit parameter 0 of type 'std::__future_base::_State_base*' has sub-type changes:
+      pointed to type 'class std::__future_base::_State_base' changed at future:306:1, as reported earlier
+
   [C] 'function void std::__throw_regex_error(std::regex_constants::error_type)' at functexcept.cc:139:1 has some indirect sub-type changes:
     parameter 1 of type 'enum std::regex_constants::error_type' has sub-type changes:
       type size hasn't changed
       1 enumerator deletion:
         'std::regex_constants::error_type::_S_error_last' value '13'
 
+  [C] 'method void std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_M_allocate_internal_buffer()' at fstream.tcc:47:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >' at fstream:72:1:
+        type size hasn't changed
+        1 member function changes (13 filtered):
+          'method virtual std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::~basic_filebuf(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        1 data member change:
+          type of 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type* std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::_M_codecvt' changed:
+            in pointed to type 'const std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type':
+              in unqualified underlying type 'typedef std::basic_filebuf<wchar_t, std::char_traits<wchar_t> >::__codecvt_type' at fstream:86:1:
+                underlying type 'class std::codecvt<wchar_t, char, __mbstate_t>' at codecvt.h:398:1 changed:
+                  type size hasn't changed
+                  no base class change (1 filtered);
+                  2 member function insertions:
+                    'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_out(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&) const' at codecvt_members.cc:43:1, virtual at voffset 2/8
+                    'method virtual std::codecvt_base::result std::codecvt<wchar_t, char, __mbstate_t>::do_in(std::codecvt<wchar_t, char, __mbstate_t>::state_type&, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*, const std::codecvt<wchar_t, char, __mbstate_t>::extern_type*&, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*, std::codecvt<wchar_t, char, __mbstate_t>::intern_type*&) const' at codecvt_members.cc:118:1, virtual at voffset 4/8
+                  no member function changes (10 filtered);
+
+  [C] 'method std::basic_fstream<wchar_t, std::char_traits<wchar_t> >* std::basic_fstream<wchar_t, std::char_traits<wchar_t> >::basic_fstream(int, void**, const char*, std::ios_base::openmode)' at fstream:819:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_fstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_fstream<wchar_t, std::char_traits<wchar_t> >' at fstream:779:1:
+        type size hasn't changed
+        1 member function changes (3 filtered):
+          'method virtual std::basic_fstream<wchar_t, std::char_traits<wchar_t> >::~basic_fstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_fstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_fstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        no data member change (1 filtered);
+
+  [C] 'method std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >* std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::basic_ifstream(int, void**, const char*, std::ios_base::openmode)' at fstream:470:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' at fstream:430:1:
+        type size hasn't changed
+        3 member function changes (1 filtered):
+          'method virtual std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::~basic_ifstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+          'method virtual std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::~basic_ifstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+          'method virtual std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >::~basic_ifstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ifstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        no data member change (1 filtered);
+
+  [C] 'method std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >* std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >::basic_ofstream(int, void**, const char*, std::ios_base::openmode)' at fstream:643:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+      in pointed to type 'class std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >' at fstream:602:1:
+        type size hasn't changed
+        1 member function changes (3 filtered):
+          'method virtual std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >::~basic_ofstream(int, void**)' has some sub-type changes:
+            implicit parameter 0 of type 'std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >*' has sub-type changes:
+              pointed to type 'class std::basic_ofstream<wchar_t, std::char_traits<wchar_t> >' changed, as being reported
+        no data member change (1 filtered);
+
+  [C] 'method std::codecvt_byname<wchar_t, char, __mbstate_t>* std::codecvt_byname<wchar_t, char, __mbstate_t>::codecvt_byname(const char*, std::size_t)' at codecvt.h:462:1 has some indirect sub-type changes:
+    Please note that the symbol of this function is _ZNSt14codecvt_bynameIwc11__mbstate_tEC1EPKcj@@GLIBCXX_3.4
+     and it aliases symbol: _ZNSt14codecvt_bynameIwc11__mbstate_tEC2EPKcj@@GLIBCXX_3.4
+    implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
+      in pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>' at codecvt.h:458:1:
+        type size hasn't changed
+        1 base class change:
+          'class std::codecvt<wchar_t, char, __mbstate_t>' at codecvt.h:398:1 changed:
+            details were reported earlier
+        2 member function changes (1 filtered):
+          'method virtual std::codecvt_byname<wchar_t, char, __mbstate_t>::~codecvt_byname(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
+              pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>' changed, as being reported
+          'method virtual std::codecvt_byname<wchar_t, char, __mbstate_t>::~codecvt_byname(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::codecvt_byname<wchar_t, char, __mbstate_t>*' has sub-type changes:
+              pointed to type 'class std::codecvt_byname<wchar_t, char, __mbstate_t>' changed, as being reported
+
+  [C] 'method virtual std::regex_error::~regex_error(int)' at regex.cc:36:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::regex_error*' has sub-type changes:
+      in pointed to type 'class std::regex_error' at regex_error.h:135:1:
+        type size hasn't changed
+        1 member function changes (2 filtered):
+          'method virtual std::regex_error::~regex_error(int)' has some sub-type changes:
+            implicit parameter 0 of type 'std::regex_error*' has sub-type changes:
+              pointed to type 'class std::regex_error' changed, as being reported
+        no data member change (1 filtered);
+
 6 Added variable symbols not referenced by debug info:
 
   [A] _ZTISt16bad_array_length@@CXXABI_1.3.8
diff --git a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
index f7280b4..64f7639 100644
--- a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
+++ b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 82 Removed, 6 Changed (14 filtered out), 0 Added (1081 filtered out) functions
+Functions changes summary: 82 Removed, 6 Changed (31 filtered out), 0 Added (1081 filtered out) functions
 Variables changes summary: 47 Removed, 1 Changed, 0 Added (11 filtered out) variables
 Function symbols changes summary: 7 Removed, 0 Added (76 filtered out) function symbols not referenced by debug info
 Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
@@ -90,6 +90,124 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
 
 6 functions with some indirect sub-type change:
 
+  [C] 'method void Engine::fini_process(bool)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'Engine*' has sub-type changes:
+      in pointed to type 'struct Engine':
+        type size changed from 2752 to 5504 (in bits)
+        1 data member deletion:
+          'mutex_t Engine::m_ptr_lock', at offset 1344 (in bits)
+        7 data member insertions:
+          'PtrDataTable Engine::m_targetptr_set', at offset 1664 (in bits)
+          'StreamMap Engine::m_stream_map', at offset 3072 (in bits)
+          'mutex_t Engine::m_stream_lock', at offset 3456 (in bits)
+          'int Engine::m_num_cores', at offset 3776 (in bits)
+          'int Engine::m_num_threads', at offset 3808 (in bits)
+          'std::bitset<1024ul> Engine::m_cpus', at offset 3840 (in bits)
+          'DynLibList Engine::m_dyn_libs', at offset 4864 (in bits)
+        4 data member changes:
+          type of 'Engine::PtrSet Engine::m_ptr_set' changed:
+            entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable'
+              type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
+              type size changed from 384 to 704 (in bits)
+              1 data member insertion:
+                'mutex_t PtrDataTable::m_ptr_lock', at offset 384 (in bits)
+              1 data member change:
+                type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
+                  typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet
+                  underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' changed:
+                    type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
+                    type size hasn't changed
+                    1 data member change:
+                      type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
+                        entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type'
+                          type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
+                          type size hasn't changed
+                          1 base class deletion:
+                            class std::allocator<std::_Rb_tree_node<PtrData> >
+                          2 data member deletions:
+                            'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
+                            'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
+                          1 data member change:
+                            type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
+                              type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
+                              type size changed from 8 to 384 (in bits)
+                              1 base class deletion:
+                                struct std::binary_function<PtrData, PtrData, bool>
+                              1 base class insertion:
+                                class std::allocator<std::_Rb_tree_node<PtrData> >
+                              3 data member insertions:
+                                'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bits)
+                                'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
+                                'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
+                            and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl'
+                      and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t'
+                and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list'
+          'Engine::SignalMap Engine::m_signal_map' offset changed from 1664 to 2368 (in bits) (by +704 bits)
+          'mutex_t Engine::m_signal_lock' offset changed from 2048 to 2752 (in bits) (by +704 bits)
+          type of 'coifunction* Engine::m_funcs[6]' changed:
+            type name changed from 'coifunction*[6]' to 'coifunction*[7]'
+            array type size changed from 384 to 448
+            array type subrange 1 changed length from 6 to 7
+          and offset changed from 2368 to 5056 (in bits) (by +2688 bits)
+
+  [C] 'method void OffloadDescriptor::cleanup()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'OffloadDescriptor*' has sub-type changes:
+      in pointed to type 'struct OffloadDescriptor':
+        type size changed from 2240 to 2368 (in bits)
+        9 data member insertions:
+          'bool OffloadDescriptor::m_wait_all_devices', at offset 320 (in bits)
+          'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 1824 (in bits)
+          'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 1952 (in bits)
+          '_Offload_stream OffloadDescriptor::m_stream', at offset 1984 (in bits)
+          'bool OffloadDescriptor::m_initial_need_runfunction', at offset 2248 (in bits)
+          'bool OffloadDescriptor::m_out_with_preallocated', at offset 2256 (in bits)
+          'bool OffloadDescriptor::m_preallocated_alloc', at offset 2264 (in bits)
+          'bool OffloadDescriptor::m_traceback_called', at offset 2272 (in bits)
+          'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 2304 (in bits)
+        8 data member changes (2 filtered):
+          'bool OffloadDescriptor::m_is_mandatory' offset changed from 320 to 328 (in bits) (by +8 bits)
+          'const bool OffloadDescriptor::m_is_openmp' offset changed from 328 to 336 (in bits) (by +8 bits)
+          type of 'VarDesc* OffloadDescriptor::m_vars' changed:
+            in pointed to type 'struct VarDesc':
+              type size hasn't changed
+              1 data member change:
+                type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
+                  type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
+                  type size hasn't changed
+                  1 data member changes (1 filtered):
+                    anonymous data member at offset 0 (in bits) changed from:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
+                    to:
+                      struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
+          type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
+            in pointed to type 'struct OffloadDescriptor::VarExtra':
+              type size changed from 576 to 640 (in bits)
+              2 data member insertions:
+                'void* OffloadDescriptor::VarExtra::alloc', at offset 320 (in bits)
+                'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 608 (in bits)
+              4 data member changes (3 filtered):
+                'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
+                type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
+                  in pointed to type 'struct CeanReadRanges':
+                    type size changed from 512 to 576 (in bits)
+                    1 data member insertion:
+                      'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bits)
+                    7 data member changes:
+                      'void* CeanReadRanges::ptr' offset changed from 0 to 64 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::current_number' offset changed from 64 to 128 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::range_max_number' offset changed from 128 to 192 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::range_size' offset changed from 192 to 256 (in bits) (by +64 bits)
+                      'int CeanReadRanges::last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
+                      'int64_t CeanReadRanges::init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
+                      'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 384 to 448 (in bits) (by +64 bits)
+                and offset changed from 384 to 448 (in bits) (by +64 bits)
+                'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
+                'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
+          'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
+          'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 2048 to 2112 (in bits) (by +64 bits)
+          'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 2112 to 2176 (in bits) (by +64 bits)
+          'bool OffloadDescriptor::m_need_runfunction' offset changed from 2176 to 2240 (in bits) (by +64 bits)
+
   [C] 'method void OffloadDescriptor::report_coi_error(error_types, COIRESULT)' has some indirect sub-type changes:
     parameter 1 of type 'typedef error_types' changed:
       underlying type 'enum __anonymous_enum__' changed:
@@ -210,20 +328,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126'
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133'
 
-  [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' has some indirect sub-type changes:
-    parameter 1 of type 'VarDesc*' has sub-type changes:
-      in pointed to type 'struct VarDesc':
-        type size hasn't changed
-        1 data member change:
-          type of 'union {struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}; uint32_t bits;} VarDesc::flags' changed:
-            type name changed from 'VarDesc::__anonymous_union__2' to 'varDescFlags'
-            type size hasn't changed
-            1 data member changes (1 filtered):
-              anonymous data member at offset 0 (in bits) changed from:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst;}
-              to:
-                struct {uint32_t is_static; uint32_t is_static_dstn; uint32_t has_length; uint32_t is_stack_buf; uint32_t targetptr; uint32_t preallocated; uint32_t is_pointer; uint32_t sink_addr; uint32_t alloc_disp; uint32_t is_noncont_src; uint32_t is_noncont_dst; uint32_t always_copy; uint32_t always_delete; uint32_t pin;}
-
   [C] 'function void __offload_myoRegisterTables(InitTableEntry*, SharedTableEntry*, FptrTableEntry*)' has some indirect sub-type changes:
     parameter 1 of type 'InitTableEntry*' changed:
       in pointed to type 'struct InitTableEntry':
@@ -236,111 +340,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 parameter 1 of type 'typedef MyoArena' was added
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__1::func'
 
-  [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' has some indirect sub-type changes:
-    parameter 1 of type 'typedef OFFLOAD' has sub-type changes:
-      underlying type 'OffloadDescriptor*' changed:
-        in pointed to type 'struct OffloadDescriptor':
-          type size changed from 2240 to 2368 (in bits)
-          9 data member insertions:
-            'bool OffloadDescriptor::m_wait_all_devices', at offset 320 (in bits)
-            'uint32_t OffloadDescriptor::m_in_deps_allocated', at offset 1824 (in bits)
-            'uint32_t OffloadDescriptor::m_out_deps_allocated', at offset 1952 (in bits)
-            '_Offload_stream OffloadDescriptor::m_stream', at offset 1984 (in bits)
-            'bool OffloadDescriptor::m_initial_need_runfunction', at offset 2248 (in bits)
-            'bool OffloadDescriptor::m_out_with_preallocated', at offset 2256 (in bits)
-            'bool OffloadDescriptor::m_preallocated_alloc', at offset 2264 (in bits)
-            'bool OffloadDescriptor::m_traceback_called', at offset 2272 (in bits)
-            'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::m_omp_async_last_event_type', at offset 2304 (in bits)
-          8 data member changes (2 filtered):
-            type of 'Engine& OffloadDescriptor::m_device' changed:
-              in referenced type 'struct Engine':
-                type size changed from 2752 to 5504 (in bits)
-                1 data member deletion:
-                  'mutex_t Engine::m_ptr_lock', at offset 1344 (in bits)
-                7 data member insertions:
-                  'PtrDataTable Engine::m_targetptr_set', at offset 1664 (in bits)
-                  'StreamMap Engine::m_stream_map', at offset 3072 (in bits)
-                  'mutex_t Engine::m_stream_lock', at offset 3456 (in bits)
-                  'int Engine::m_num_cores', at offset 3776 (in bits)
-                  'int Engine::m_num_threads', at offset 3808 (in bits)
-                  'std::bitset<1024ul> Engine::m_cpus', at offset 3840 (in bits)
-                  'DynLibList Engine::m_dyn_libs', at offset 4864 (in bits)
-                4 data member changes:
-                  type of 'Engine::PtrSet Engine::m_ptr_set' changed:
-                    entity changed from 'typedef Engine::PtrSet' to compatible type 'class PtrDataTable'
-                      type name changed from 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >' to 'PtrDataTable'
-                      type size changed from 384 to 704 (in bits)
-                      1 data member insertion:
-                        'mutex_t PtrDataTable::m_ptr_lock', at offset 384 (in bits)
-                      1 data member change:
-                        type of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed:
-                          typedef name changed from std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type to PtrDataTable::PtrSet
-                          underlying type 'class std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' changed:
-                            type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >' to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >'
-                            type size hasn't changed
-                            1 data member change:
-                              type of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed:
-                                entity changed from 'struct std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to compatible type 'typedef std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_Rep_type'
-                                  type name changed from 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >'
-                                  type size hasn't changed
-                                  1 base class deletion:
-                                    class std::allocator<std::_Rb_tree_node<PtrData> >
-                                  2 data member deletions:
-                                    'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
-                                    'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
-                                  1 data member change:
-                                    type of 'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed:
-                                      type name changed from 'std::less<PtrData>' to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>'
-                                      type size changed from 8 to 384 (in bits)
-                                      1 base class deletion:
-                                        struct std::binary_function<PtrData, PtrData, bool>
-                                      1 base class insertion:
-                                        class std::allocator<std::_Rb_tree_node<PtrData> >
-                                      3 data member insertions:
-                                        'std::less<PtrData> std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare', at offset 0 (in bits)
-                                        'std::_Rb_tree_node_base std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_header', at offset 64 (in bits)
-                                        'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::size_type std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_node_count', at offset 320 (in bits)
-                                    and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_Rb_tree_impl<std::less<PtrData>, true>::_M_key_compare' changed to 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl'
-                              and name of 'std::_Rb_tree<PtrData, PtrData, std::_Identity<PtrData>, std::less<PtrData>, std::allocator<PtrData> >::_M_impl' changed to 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t'
-                        and name of 'std::set<PtrData, std::less<PtrData>, std::allocator<PtrData> >::_M_t' changed to 'PtrDataTable::list'
-                  'Engine::SignalMap Engine::m_signal_map' offset changed from 1664 to 2368 (in bits) (by +704 bits)
-                  'mutex_t Engine::m_signal_lock' offset changed from 2048 to 2752 (in bits) (by +704 bits)
-                  type of 'coifunction* Engine::m_funcs[6]' changed:
-                    type name changed from 'coifunction*[6]' to 'coifunction*[7]'
-                    array type size changed from 384 to 448
-                    array type subrange 1 changed length from 6 to 7
-                  and offset changed from 2368 to 5056 (in bits) (by +2688 bits)
-            'bool OffloadDescriptor::m_is_mandatory' offset changed from 320 to 328 (in bits) (by +8 bits)
-            'const bool OffloadDescriptor::m_is_openmp' offset changed from 328 to 336 (in bits) (by +8 bits)
-            type of 'OffloadDescriptor::VarExtra* OffloadDescriptor::m_vars_extra' changed:
-              in pointed to type 'struct OffloadDescriptor::VarExtra':
-                type size changed from 576 to 640 (in bits)
-                2 data member insertions:
-                  'void* OffloadDescriptor::VarExtra::alloc', at offset 320 (in bits)
-                  'OffloadDescriptor::OmpAsyncLastEventType OffloadDescriptor::VarExtra::omp_last_event_type', at offset 608 (in bits)
-                4 data member changes (3 filtered):
-                  'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
-                  type of 'CeanReadRanges* OffloadDescriptor::VarExtra::read_rng_dst' changed:
-                    in pointed to type 'struct CeanReadRanges':
-                      type size changed from 512 to 576 (in bits)
-                      1 data member insertion:
-                        'Arr_Desc* CeanReadRanges::arr_desc', at offset 0 (in bits)
-                      7 data member changes:
-                        'void* CeanReadRanges::ptr' offset changed from 0 to 64 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::current_number' offset changed from 64 to 128 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::range_max_number' offset changed from 128 to 192 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::range_size' offset changed from 192 to 256 (in bits) (by +64 bits)
-                        'int CeanReadRanges::last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
-                        'int64_t CeanReadRanges::init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
-                        'CeanReadDim CeanReadRanges::Dim[1]' offset changed from 384 to 448 (in bits) (by +64 bits)
-                  and offset changed from 384 to 448 (in bits) (by +64 bits)
-                  'int64_t OffloadDescriptor::VarExtra::ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
-                  'bool OffloadDescriptor::VarExtra::is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
-            'OffloadHostTimerData* OffloadDescriptor::m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
-            'uint64_t OffloadDescriptor::m_in_datalen' offset changed from 2048 to 2112 (in bits) (by +64 bits)
-            'uint64_t OffloadDescriptor::m_out_datalen' offset changed from 2112 to 2176 (in bits) (by +64 bits)
-            'bool OffloadDescriptor::m_need_runfunction' offset changed from 2176 to 2240 (in bits) (by +64 bits)
-
   [C] 'function void __offload_register_image(void*)' has some indirect sub-type changes:
     return type changed:
       type name changed from 'void' to 'bool'
diff --git a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt
index 0ffaa85..9e12abd 100644
--- a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt
+++ b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-1.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 82 Removed, 6 Changed (14 filtered out), 0 Added (1081 filtered out) functions
+Functions changes summary: 82 Removed, 6 Changed (31 filtered out), 0 Added (1081 filtered out) functions
 Variables changes summary: 0 Removed (47 filtered out), 1 Changed, 0 Added (11 filtered out) variables
 Function symbols changes summary: 7 Removed, 0 Added (76 filtered out) function symbols not referenced by debug info
 Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
diff --git a/tests/data/test-diff-filter/test4-report.txt b/tests/data/test-diff-filter/test4-report.txt
index 97239c7..31e12bb 100644
--- a/tests/data/test-diff-filter/test4-report.txt
+++ b/tests/data/test-diff-filter/test4-report.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
+Functions changes summary: 0 Removed, 0 Changed (4 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-filter/test41-report-0.txt b/tests/data/test-diff-filter/test41-report-0.txt
index da9a820..94242f7 100644
--- a/tests/data/test-diff-filter/test41-report-0.txt
+++ b/tests/data/test-diff-filter/test41-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 8 Removed, 2 Changed (10 filtered out), 16 Added functions
+Functions changes summary: 8 Removed, 6 Changed (7 filtered out), 16 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 Function symbols changes summary: 1 Removed, 0 Added function symbol not referenced by debug info
 Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referenced by debug info
@@ -34,7 +34,50 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
     note that this adds a new entry to the vtable of class std::tr1::_Sp_counted_base<__gnu_cxx::_Lock_policy::_S_atomic>
   [A] 'function void std::tr1::__enable_shared_from_this_helper<__gnu_cxx::_Lock_policy::_S_atomic>(const std::tr1::__shared_count<__gnu_cxx::_Lock_policy::_S_atomic>&, ...)'    {_ZNSt3tr132__enable_shared_from_this_helperILN9__gnu_cxx12_Lock_policyE2EEEvRKNS_14__shared_countIXT_EEEz}
 
-2 functions with some indirect sub-type change:
+6 functions with some indirect sub-type change:
+
+  [C] 'method abigail::interned_string abigail::xml_writer::write_context::get_id_for_type(abigail::ir::type_base*) const' at abg-writer.cc:247:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'const abigail::xml_writer::write_context*' has sub-type changes:
+      in pointed to type 'const abigail::xml_writer::write_context':
+        in unqualified underlying type 'class abigail::xml_writer::write_context' at abg-writer.cc:155:1:
+          type size hasn't changed
+          8 data member changes (2 filtered):
+            'std::ostream& abigail::xml_writer::write_context::m_ostream' has *some* difference - please report as a bug
+            'abigail::xml_writer::type_ptr_map abigail::xml_writer::write_context::m_type_id_map' has *some* difference - please report as a bug
+            type of 'abigail::xml_writer::type_ptr_map abigail::xml_writer::write_context::m_emitted_decl_only_map' changed:
+              underlying type 'class std::tr1::unordered_map<abigail::ir::type_base*, abigail::interned_string, abigail::xml_writer::type_hasher, abigail::diff_utils::deep_ptr_eq_functor, std::allocator<std::pair<abigail::ir::type_base* const, abigail::interned_string> > >' at unordered_map.h:180:1 changed:
+                type name changed from 'std::tr1::unordered_map<abigail::ir::type_base*, abigail::interned_string, abigail::xml_writer::type_hasher, abigail::diff_utils::deep_ptr_eq_functor, std::allocator<std::pair<abigail::ir::type_base* const, abigail::interned_string> > >' to 'std::tr1::unordered_map<abigail::ir::type_base *, abigail::interned_string, abigail::xml_writer::type_hasher, abigail::diff_utils::deep_ptr_eq_functor, std::allocator<std::pair<abigail::ir::type_base *const, abigail::interned_string> > >'
+                type size hasn't changed
+                1 base class deletion:
+                  class std::tr1::__unordered_map<abigail::ir::type_base*, abigail::interned_string, abigail::xml_writer::type_hasher, abigail::diff_utils::deep_ptr_eq_functor, std::allocator<std::pair<abigail::ir::type_base* const, abigail::interned_string> >, false> at unordered_map.h:43:1
+                1 base class insertion:
+                  class std::tr1::__unordered_map<abigail::ir::type_base *, abigail::interned_string, abigail::xml_writer::type_hasher, abigail::diff_utils::deep_ptr_eq_functor, std::allocator<std::pair<abigail::ir::type_base *const, abigail::interned_string> >, false> at unordered_map.h:43:1
+            'abigail::xml_writer::type_ptr_map abigail::xml_writer::write_context::m_referenced_types_map' has *some* difference - please report as a bug
+            type of 'abigail::xml_writer::fn_tmpl_shared_ptr_map abigail::xml_writer::write_context::m_fn_tmpl_id_map' changed:
+              underlying type 'class std::tr1::unordered_map<std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, abigail::ir::function_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::function_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >' at unordered_map.h:180:1 changed:
+                type name changed from 'std::tr1::unordered_map<std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, abigail::ir::function_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::function_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >' to 'std::tr1::unordered_map<std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char>, abigail::ir::function_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::function_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char> > > >'
+                type size hasn't changed
+                1 base class deletion:
+                  class std::tr1::__unordered_map<std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, abigail::ir::function_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::function_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, false> at unordered_map.h:43:1
+                1 base class insertion:
+                  class std::tr1::__unordered_map<std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char>, abigail::ir::function_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::function_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::function_tdecl>, std::__cxx11::basic_string<char> > >, false> at unordered_map.h:43:1
+            type of 'abigail::xml_writer::class_tmpl_shared_ptr_map abigail::xml_writer::write_context::m_class_tmpl_id_map' changed:
+              underlying type 'class std::tr1::unordered_map<std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, abigail::ir::class_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::class_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >' at unordered_map.h:180:1 changed:
+                type name changed from 'std::tr1::unordered_map<std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, abigail::ir::class_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::class_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >' to 'std::tr1::unordered_map<std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char>, abigail::ir::class_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::class_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char> > > >'
+                type size hasn't changed
+                1 base class deletion:
+                  class std::tr1::__unordered_map<std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, abigail::ir::class_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::class_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, false> at unordered_map.h:43:1
+                1 base class insertion:
+                  class std::tr1::__unordered_map<std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char>, abigail::ir::class_tdecl::shared_ptr_hash, std::equal_to<std::tr1::shared_ptr<abigail::ir::class_tdecl> >, std::allocator<std::pair<const std::tr1::shared_ptr<abigail::ir::class_tdecl>, std::__cxx11::basic_string<char> > >, false> at unordered_map.h:43:1
+            type of 'abigail::ir::string_elf_symbol_sptr_map_type abigail::xml_writer::write_context::m_fun_symbol_map' changed:
+              underlying type 'class std::tr1::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::tr1::shared_ptr<abigail::ir::elf_symbol>, std::tr1::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::tr1::shared_ptr<abigail::ir::elf_symbol> > > >' at unordered_map.h:180:1 changed:
+                type name changed from 'std::tr1::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::tr1::shared_ptr<abigail::ir::elf_symbol>, std::tr1::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::tr1::shared_ptr<abigail::ir::elf_symbol> > > >' to 'std::tr1::unordered_map<std::__cxx11::basic_string<char>, std::tr1::shared_ptr<abigail::ir::elf_symbol>, std::tr1::hash<std::__cxx11::basic_string<char> >, std::equal_to<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::tr1::shared_ptr<abigail::ir::elf_symbol> > > >'
+                type size hasn't changed
+                1 base class deletion:
+                  class std::tr1::__unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::tr1::shared_ptr<abigail::ir::elf_symbol>, std::tr1::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::tr1::shared_ptr<abigail::ir::elf_symbol> > >, false> at unordered_map.h:43:1
+                1 base class insertion:
+                  class std::tr1::__unordered_map<std::__cxx11::basic_string<char>, std::tr1::shared_ptr<abigail::ir::elf_symbol>, std::tr1::hash<std::__cxx11::basic_string<char> >, std::equal_to<std::__cxx11::basic_string<char> >, std::allocator<std::pair<const std::__cxx11::basic_string<char>, std::tr1::shared_ptr<abigail::ir::elf_symbol> > >, false> at unordered_map.h:43:1
+            'abigail::ir::string_elf_symbol_sptr_map_type abigail::xml_writer::write_context::m_var_symbol_map' has *some* difference - please report as a bug
 
   [C] 'method void abigail::xml_writer::write_context::record_type_as_emitted(const abigail::ir::type_base_sptr&)' at abg-writer.cc:473:1 has some indirect sub-type changes:
     parameter 1 of type 'const abigail::ir::type_base_sptr&' has sub-type changes:
@@ -48,6 +91,84 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
               class std::tr1::__shared_ptr<abigail::ir::type_base, __gnu_cxx::_Lock_policy::_S_atomic> at shared_ptr.h:539:1
 
   [C] 'method bool abigail::xml_writer::write_context::type_ptr_cmp::operator()(const abigail::ir::type_base*, const abigail::ir::type_base*) const' at abg-writer.cc:359:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'const abigail::xml_writer::write_context::type_ptr_cmp*' has sub-type changes:
+      in pointed to type 'const abigail::xml_writer::write_context::type_ptr_cmp':
+        in unqualified underlying type 'struct abigail::xml_writer::write_context::type_ptr_cmp' at abg-writer.cc:337:1:
+          type size hasn't changed
+          1 data member change:
+            'abigail::xml_writer::type_ptr_map* abigail::xml_writer::write_context::type_ptr_cmp::map' has *some* difference - please report as a bug
+
+  [C] 'method void std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_initialize_map(std::size_t)' at stl_deque.h:625:1 has some indirect sub-type changes:
+    'method void std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_initialize_map(std::size_t) {_ZNSt11_Deque_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_initialize_mapEm}' now becomes 'method void std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_M_initialize_map(std::size_t) {_ZNSt11_Deque_baseINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EE17_M_initialize_mapEm}'
+    implicit parameter 0 of type 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*' changed:
+      in pointed to type 'class std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' at stl_deque.h:458:1:
+        type name changed from 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' to 'std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >'
+        type size hasn't changed
+        1 data member change:
+          type of 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Deque_impl std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_impl' changed:
+            type name changed from 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Deque_impl' to 'std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Deque_impl'
+            type size hasn't changed
+            1 base class deletion:
+              class std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > at allocator.h:108:1
+            1 base class insertion:
+              class std::allocator<std::__cxx11::basic_string<char> > at allocator.h:108:1
+            3 data member changes (1 filtered):
+              name of 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Deque_impl::_M_map' changed to 'std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Deque_impl::_M_map' at stl_deque.h:550:1
+              name of 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Deque_impl::_M_start' changed to 'std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Deque_impl::_M_start' at stl_deque.h:552:1
+              type of 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::iterator std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Deque_impl::_M_finish' changed:
+                typedef name changed from std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::iterator to std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::iterator at stl_deque.h:485:1
+                underlying type 'struct std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>' at stl_deque.h:106:1 changed:
+                  type name changed from 'std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>' to 'std::_Deque_iterator<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> &, std::__cxx11::basic_string<char> *>'
+                  type size hasn't changed
+                  1 data member changes (3 filtered):
+                    type of 'std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>::_Map_pointer std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>::_M_node' changed:
+                      typedef name changed from std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>::_Map_pointer to std::_Deque_iterator<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> &, std::__cxx11::basic_string<char> *>::_Map_pointer at stl_deque.h:112:1
+                      underlying type 'typedef std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>::__ptr_to' at stl_deque.h:116:1 changed:
+                        entity changed from 'typedef std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>::__ptr_to' to compatible type 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >**'
+                          in pointed to type 'class std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >':
+                            entity changed from 'class std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >' to 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*'
+                            type size changed from 256 to 64 (in bits)
+                    and name of 'std::_Deque_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*>::_M_node' changed to 'std::_Deque_iterator<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> &, std::__cxx11::basic_string<char> *>::_M_node' at stl_deque.h:140:1
+              and name of 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_Deque_impl::_M_finish' changed to 'std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Deque_impl::_M_finish' at stl_deque.h:553:1
+          and name of 'std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_impl' changed to 'std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_M_impl' at stl_deque.h:631:1
+
+  [C] 'method void std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_M_initialize_map(std::size_t)' at stl_deque.h:625:1 has some indirect sub-type changes:
+    implicit parameter 0 of type 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >*' has sub-type changes:
+      in pointed to type 'class std::_Deque_base<unsigned int, std::allocator<unsigned int> >' at stl_deque.h:458:1:
+        type size hasn't changed
+        1 data member change:
+          type of 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Deque_impl std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_M_impl' changed:
+            type size hasn't changed
+            3 data member changes:
+              'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Map_pointer std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Deque_impl::_M_map' has *some* difference - please report as a bug
+              'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::iterator std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Deque_impl::_M_start' has *some* difference - please report as a bug
+              type of 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::iterator std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Deque_impl::_M_finish' changed:
+                underlying type 'struct std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>' at stl_deque.h:106:1 changed:
+                  type name changed from 'std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>' to 'std::_Deque_iterator<unsigned int, unsigned int &, unsigned int *>'
+                  type size hasn't changed
+                  1 data member changes (3 filtered):
+                    type of 'std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::_Map_pointer std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::_M_node' changed:
+                      typedef name changed from std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::_Map_pointer to std::_Deque_iterator<unsigned int, unsigned int &, unsigned int *>::_Map_pointer at stl_deque.h:112:1
+                      underlying type 'typedef std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::__ptr_to' at stl_deque.h:116:1 changed:
+                        entity changed from 'typedef std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::__ptr_to' to compatible type 'unsigned int**'
+                          in pointed to type 'unsigned int':
+                            entity changed from 'unsigned int' to 'unsigned int*'
+                            type size changed from 32 to 64 (in bits)
+                    and name of 'std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::_M_node' changed to 'std::_Deque_iterator<unsigned int, unsigned int &, unsigned int *>::_M_node' at stl_deque.h:140:1
+
+  [C] 'method std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~deque(int)' at stl_deque.h:1040:1 has some indirect sub-type changes:
+    linkage names of method std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~deque(int)
+    changed from '_ZNSt5dequeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev, _ZNSt5dequeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED1Ev' to '_ZNSt5dequeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev'
+    'method std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::~deque(int) {_ZNSt5dequeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev, _ZNSt5dequeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED1Ev}' now becomes 'method std::deque<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::~deque() {_ZNSt5dequeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS5_EED2Ev}'
+    implicit parameter 0 of type 'std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*' changed:
+      in pointed to type 'class std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' at stl_deque.h:829:1:
+        type name changed from 'std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >' to 'std::deque<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >'
+        type size hasn't changed
+        1 base class deletion:
+          class std::_Deque_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > at stl_deque.h:458:1
+        1 base class insertion:
+          class std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > > at stl_deque.h:458:1
+    parameter 1 of type 'int' was removed
 
 1 Removed function symbol not referenced by debug info:
 
diff --git a/tests/data/test-diff-filter/test9-report.txt b/tests/data/test-diff-filter/test9-report.txt
index 867b83a..0ba712e 100644
--- a/tests/data/test-diff-filter/test9-report.txt
+++ b/tests/data/test-diff-filter/test9-report.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 1 Changed, 2 Added functions
+Functions changes summary: 0 Removed, 1 Changed (1 filtered out), 2 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 2 Added functions:
@@ -8,9 +8,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
+  [C] 'method int S::mem_fn0()' has some indirect sub-type changes:
+    implicit parameter 0 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S':
         type size changed from 8 to 32 (in bits)
         1 data member insertion:
           'int S::m0', at offset 0 (in bits)
diff --git a/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt b/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
index 2a679d6..5bc57e8 100644
--- a/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
+++ b/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
@@ -1,5 +1,5 @@
 ================ changes of 'libsigc-2.0.so.0.0.0'===============
-  Functions changes summary: 1 Removed, 2 Changed (17 filtered out), 1 Added functions
+  Functions changes summary: 1 Removed, 2 Changed (58 filtered out), 1 Added functions
   Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   1 Removed function:
@@ -12,57 +12,56 @@
 
   2 functions with some indirect sub-type change:
 
-    [C] 'method sigc::connection::connection(const sigc::connection&)' has some indirect sub-type changes:
-      parameter 1 of type 'const sigc::connection&' has sub-type changes:
-        in referenced type 'const sigc::connection':
-          in unqualified underlying type 'struct sigc::connection':
-            type size hasn't changed
-            1 data member change:
-              type of 'sigc::slot_base* sigc::connection::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* sigc::slot_base::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* sigc::trackable::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 sigc::internal::trackable_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_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* std::__detail::_List_node_base::_M_next', at offset 0 (in bits)
-                                                        'std::__detail::_List_node_base* std::__detail::_List_node_base::_M_prev', at offset 64 (in bits)
-                                                      1 data member insertion:
-                                                        'unsigned long int std::_List_node<long unsigned 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 sigc::internal::trackable_callback_list::clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
+    [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* sigc::connection::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* sigc::slot_base::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* sigc::trackable::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 sigc::internal::trackable_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_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 std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_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* std::__detail::_List_node_base::_M_next', at offset 0 (in bits)
+                                                      'std::__detail::_List_node_base* std::__detail::_List_node_base::_M_prev', at offset 64 (in bits)
+                                                    1 data member insertion:
+                                                      'unsigned long int std::_List_node<long unsigned 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 sigc::internal::trackable_callback_list::clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
 
-    [C] 'method sigc::internal::signal_impl* sigc::signal_base::impl() const' has some indirect sub-type changes:
-      return type changed:
+    [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:
         in pointed to type 'struct sigc::internal::signal_impl':
           type size changed from 192 to 256 (in bits)
           1 data member change:
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 ba49f8a..63d1fa5 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, 8 Changed (16 filtered out), 17 Added functions
+  Functions changes summary: 0 Removed, 13 Changed (94 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,32 +24,191 @@
     [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:
-
-    [C] 'method void tbb::internal::concurrent_queue_base_v3::assign(const tbb::internal::concurrent_queue_base&)' at concurrent_queue.cpp:570:1 has some indirect sub-type changes:
-      parameter 1 of type 'const tbb::internal::concurrent_queue_base&' has sub-type changes:
-        in referenced type 'const tbb::internal::concurrent_queue_base':
-          in unqualified underlying type 'typedef tbb::internal::concurrent_queue_base' at concurrent_queue.cpp:57:1:
-            underlying type 'class tbb::internal::concurrent_queue_base_v3' at _concurrent_queue_impl.h:816:1 changed:
-              type size hasn't changed
-              1 data member change:
-                type of 'tbb::internal::concurrent_queue_rep* tbb::internal::concurrent_queue_base_v3::my_rep' changed:
-                  in pointed to type 'class tbb::internal::concurrent_queue_rep' at concurrent_queue_v2.cpp:102:1:
+  13 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* tbb::filter::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 tbb::internal::input_buffer::array_mutex' changed:
                     type size hasn't changed
-                    2 data member changes (1 filtered):
-                      type of 'tbb::internal::concurrent_monitor tbb::internal::concurrent_queue_rep::items_avail' changed:
-                        type size hasn't changed
-                        1 data member change:
-                          'tbb::spin_mutex tbb::internal::concurrent_monitor::mutex_ec' offset changed from 0 to 8 (in bits) (by +8 bits)
-                      type of 'tbb::internal::micro_queue tbb::internal::concurrent_queue_rep::array[8]' changed:
-                        array element type 'struct tbb::internal::micro_queue' changed:
-                          type size hasn't changed
-                          1 data member change:
-                            type of 'tbb::spin_mutex tbb::internal::micro_queue::page_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
-                        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 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:
+        in pointed to type 'const tbb::internal::allocate_root_with_context_proxy':
+          in unqualified underlying type 'class tbb::internal::allocate_root_with_context_proxy' at task.h:131:1:
+            type size hasn't changed
+            1 data member change:
+              type of 'tbb::task_group_context& tbb::internal::allocate_root_with_context_proxy::my_context' changed:
+                in referenced type 'class tbb::task_group_context' at task.h:302:1:
+                  type size hasn't changed
+                  1 data member insertion:
+                    'tbb::internal::cpu_ctl_env_space tbb::task_group_context::my_cpu_ctl_env', at offset 896 (in bits) at task.h:380:1
+                  2 data member changes (1 filtered):
+                    type of 'char tbb::task_group_context::_leading_padding[80]' changed:
+                      type name changed from 'char[80]' to 'char[72]'
+                      array type size changed from 640 to 576
+                      array type subrange 1 changed length from 80 to 72
+                    type of 'tbb::internal::generic_scheduler* tbb::task_group_context::my_owner' changed:
+                      in pointed to type 'class tbb::internal::generic_scheduler' at scheduler.h:110:1:
+                        type size changed from 3136 to 3072 (in bits)
+                        1 base class change:
+                          'struct tbb::internal::scheduler_state' at scheduler.h:73:1 changed:
+                            type size changed from 576 to 704 (in bits)
+                            2 data member insertions:
+                              'volatile intptr_t* tbb::internal::scheduler_state::my_ref_top_priority', at offset 576 (in bits) at scheduler.h:96:1
+                              'volatile uintptr_t* tbb::internal::scheduler_state::my_ref_reload_epoch', at offset 640 (in bits) at scheduler.h:99:1
+                            2 data member changes (1 filtered):
+                              type of 'tbb::internal::arena* tbb::internal::scheduler_state::my_arena' changed:
+                                in pointed to type 'class tbb::internal::arena' at arena.h:160:1:
+                                  type size hasn't changed
+                                  1 base class deletion:
+                                    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
+                                  1 data member change:
+                                    type of 'tbb::internal::arena_slot tbb::internal::arena::my_slots[1]' changed:
+                                      array element type 'struct tbb::internal::arena_slot' changed:
+                                        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
+                                      type size hasn't changed
+                              type of 'tbb::internal::mail_inbox tbb::internal::scheduler_state::my_inbox' changed:
+                                type size hasn't changed
+                                1 data member change:
+                                  type of 'tbb::internal::mail_outbox* tbb::internal::mail_inbox::my_putter' changed:
+                                    in pointed to type 'class tbb::internal::mail_outbox' at mailbox.h:103:1:
+                                      type size hasn't changed
+                                      1 base class deletion:
+                                        class tbb::internal::unpadded_mail_outbox at mailbox.h:97:1
+                                      1 base class insertion:
+                                        struct tbb::internal::padded<tbb::internal::unpadded_mail_outbox, 128ul> at tbb_stddef.h:251:1
+                                      1 data member deletion:
+                                        'char tbb::internal::mail_outbox::pad[104]', at offset 136 (in bits) at mailbox.h:114:1
+                        1 member function deletion:
+                          'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&, bool)' at scheduler.h:391:1, virtual at voffset 7/7
+                        1 member function insertion:
+                          'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&)' at scheduler.h:362:1, virtual at voffset 7/7
+                        1 member function changes (3 filtered):
+                          'method virtual void tbb::internal::generic_scheduler::spawn(tbb::task&, tbb::task*&)' has some sub-type changes:
+                            implicit parameter 0 of type 'tbb::internal::generic_scheduler*' has sub-type changes:
+                              pointed to type 'class tbb::internal::generic_scheduler' changed, as being reported
+                        3 data member deletions:
+                          'unsigned int tbb::internal::generic_scheduler::hint_for_push', at offset 896 (in bits) at scheduler.h:171:1
+                          'volatile intptr_t* tbb::internal::generic_scheduler::my_ref_top_priority', at offset 2560 (in bits) at scheduler.h:433:1
+                          'volatile uintptr_t* tbb::internal::generic_scheduler::my_ref_reload_epoch', at offset 2752 (in bits) at scheduler.h:443:1
+                        18 data member changes:
+                          'uintptr_t tbb::internal::generic_scheduler::my_stealing_threshold' offset changed from 704 to 832 (in bits) (by +128 bits)
+                          type of 'tbb::internal::market* tbb::internal::generic_scheduler::my_market' changed:
+                            in pointed to type 'class tbb::internal::market' at market.h:49:1:
+                              type size changed from 1664 to 1728 (in bits)
+                              1 member function changes (7 filtered):
+                                'method virtual rml::job* tbb::internal::market::create_one_job()' has some sub-type changes:
+                                  implicit parameter 0 of type 'tbb::internal::market*' has sub-type changes:
+                                    pointed to type 'class tbb::internal::market' changed, as being reported
+                              1 data member insertion:
+                                'bool tbb::internal::market::join_workers', at offset 384 (in bits) at market.h:88:1
+                              7 data member changes:
+                                type of 'tbb::internal::market::arenas_list_mutex_type tbb::internal::market::my_arenas_list_mutex' changed:
+                                  underlying type 'typedef tbb::internal::scheduler_mutex_type' at scheduler_common.h:123:1 changed:
+                                    typedef name changed from tbb::internal::scheduler_mutex_type to tbb::spin_rw_mutex at spin_rw_mutex.h:38:1
+                                    underlying type 'class tbb::spin_mutex' at spin_mutex.h:47:1 changed:
+                                      type name changed from 'tbb::spin_mutex' to 'tbb::spin_rw_mutex_v3'
+                                      type size changed from 8 to 64 (in bits)
+                                      1 base class insertion:
+                                        class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
+                                      1 data member change:
+                                        type of '__TBB_atomic_flag tbb::spin_mutex::flag' changed:
+                                          typedef name changed from __TBB_atomic_flag to tbb::spin_rw_mutex_v3::state_t at spin_rw_mutex.h:214:1
+                                          underlying type 'typedef __TBB_Flag' at tbb_machine.h:875:1 changed:
+                                            typedef name changed from __TBB_Flag to intptr_t at stdint.h:119:1
+                                            underlying type 'unsigned char' changed:
+                                              type name changed from 'unsigned char' to 'long int'
+                                              type size changed from 8 to 64 (in bits)
+                                        and name of 'tbb::spin_mutex::flag' changed to 'tbb::spin_rw_mutex_v3::state' at spin_rw_mutex.h:224:1
+                                'intptr_t tbb::internal::market::my_global_top_priority' offset changed from 384 to 448 (in bits) (by +64 bits)
+                                'intptr_t tbb::internal::market::my_global_bottom_priority' offset changed from 448 to 512 (in bits) (by +64 bits)
+                                'uintptr_t tbb::internal::market::my_global_reload_epoch' offset changed from 512 to 576 (in bits) (by +64 bits)
+                                type of 'tbb::internal::market::priority_level_info tbb::internal::market::my_priority_levels[3]' changed:
+                                  array element type 'struct tbb::internal::market::priority_level_info' changed:
+                                    type size hasn't changed
+                                    1 data member change:
+                                      type of 'tbb::internal::intrusive_list_base<tbb::internal::intrusive_list<tbb::internal::arena>, tbb::internal::arena>::iterator tbb::internal::market::priority_level_info::next_arena' changed:
+                                        entity changed from 'class tbb::internal::intrusive_list_base<tbb::internal::intrusive_list<tbb::internal::arena>, tbb::internal::arena>::iterator' to 'tbb::internal::arena*'
+                                        type size hasn't changed
+                                  type size hasn't changed
+                                and offset changed from 576 to 640 (in bits) (by +64 bits)
+                                'uintptr_t tbb::internal::market::my_arenas_aba_epoch' offset changed from 1536 to 1600 (in bits) (by +64 bits)
+                                'tbb::internal::generic_scheduler* tbb::internal::market::my_workers[1]' offset changed from 1600 to 1664 (in bits) (by +64 bits)
+                          and offset changed from 768 to 896 (in bits) (by +128 bits)
+                          'tbb::internal::FastRandom tbb::internal::generic_scheduler::my_random' offset changed from 832 to 960 (in bits) (by +128 bits)
+                          'tbb::task* tbb::internal::generic_scheduler::my_free_list' offset changed from 960 to 1024 (in bits) (by +64 bits)
+                          'tbb::task* tbb::internal::generic_scheduler::my_dummy_task' offset changed from 1024 to 1088 (in bits) (by +64 bits)
+                          'long int tbb::internal::generic_scheduler::my_ref_count' offset changed from 1088 to 1152 (in bits) (by +64 bits)
+                          'bool tbb::internal::generic_scheduler::my_auto_initialized' offset changed from 1152 to 1216 (in bits) (by +64 bits)
+                          'intptr_t tbb::internal::generic_scheduler::my_small_task_count' offset changed from 1216 to 1280 (in bits) (by +64 bits)
+                          'tbb::task* tbb::internal::generic_scheduler::my_return_list' offset changed from 1280 to 1344 (in bits) (by +64 bits)
+                          'char tbb::internal::generic_scheduler::_padding1[112]' offset changed from 1344 to 1408 (in bits) (by +64 bits)
+                          'tbb::internal::context_list_node_t tbb::internal::generic_scheduler::my_context_list_head' offset changed from 2240 to 2304 (in bits) (by +64 bits)
+                          'tbb::spin_mutex tbb::internal::generic_scheduler::my_context_list_mutex' offset changed from 2368 to 2432 (in bits) (by +64 bits)
+                          'uintptr_t tbb::internal::generic_scheduler::my_context_state_propagation_epoch' offset changed from 2432 to 2496 (in bits) (by +64 bits)
+                          'tbb::atomic<long unsigned int> tbb::internal::generic_scheduler::my_local_ctx_list_update' offset changed from 2496 to 2560 (in bits) (by +64 bits)
+                          'uintptr_t tbb::internal::generic_scheduler::my_local_reload_epoch' offset changed from 2816 to 2752 (in bits) (by -64 bits)
+                          'volatile bool tbb::internal::generic_scheduler::my_pool_reshuffling_pending' offset changed from 2880 to 2816 (in bits) (by -64 bits)
+                          'tbb::atomic<long unsigned int> tbb::internal::generic_scheduler::my_nonlocal_ctx_list_update' offset changed from 2944 to 2880 (in bits) (by -64 bits)
+                          '__cilk_tbb_unwatch_thunk tbb::internal::generic_scheduler::my_cilk_unwatch_thunk' offset changed from 3008 to 2944 (in bits) (by -64 bits)
+
+    [C] 'method tbb::internal::concurrent_queue_base::concurrent_queue_base(std::size_t)' at concurrent_queue_v2.cpp:200:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'tbb::internal::concurrent_queue_base*' has sub-type changes:
+        in pointed to type 'class tbb::internal::concurrent_queue_base' at concurrent_queue_v2.h:41:1:
+          type size hasn't changed
+          1 member function deletion:
+            'method virtual tbb::internal::concurrent_queue_base::~concurrent_queue_base(int)' at concurrent_queue_v2.cpp:225:1
+          1 member function insertion:
+            'method virtual tbb::internal::concurrent_queue_base::~concurrent_queue_base(int)' at concurrent_queue_v2.cpp:217:1
+          1 member function changes (3 filtered):
+            'method virtual tbb::internal::concurrent_queue_base::~concurrent_queue_base(int)' has some sub-type changes:
+              implicit parameter 0 of type 'tbb::internal::concurrent_queue_base*' has sub-type changes:
+                pointed to type 'class tbb::internal::concurrent_queue_base' changed, as being reported
+          1 data member change:
+            type of 'tbb::internal::concurrent_queue_rep* tbb::internal::concurrent_queue_base::my_rep' changed:
+              in pointed to type 'class tbb::internal::concurrent_queue_rep' at concurrent_queue_v2.cpp:102:1:
+                type size hasn't changed
+                1 data member changes (2 filtered):
+                  type of 'tbb::internal::concurrent_monitor tbb::internal::concurrent_queue_rep::items_avail' changed:
+                    type size hasn't changed
+                    1 data member change:
+                      'tbb::spin_mutex tbb::internal::concurrent_monitor::mutex_ec' offset changed from 0 to 8 (in bits) (by +8 bits)
+
+    [C] 'method bool tbb::internal::hash_map_segment_base::internal_grow_predicate() const' at concurrent_hash_map.cpp:44:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'const tbb::internal::hash_map_segment_base*' has sub-type changes:
+        in pointed to type 'const tbb::internal::hash_map_segment_base':
+          in unqualified underlying type 'struct tbb::internal::hash_map_segment_base' at concurrent_hash_map.cpp:27:1:
+            type size hasn't changed
+            1 data member change:
+              type of 'tbb::internal::hash_map_segment_base::segment_mutex_t tbb::internal::hash_map_segment_base::my_mutex' changed:
+                underlying type 'typedef tbb::spin_rw_mutex' at spin_rw_mutex.h:39:1 changed:
+                  underlying type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:43:1 changed:
+                    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] 'function void tbb::internal::throw_exception_v4(tbb::internal::exception_id)' at tbb_misc.cpp:119:1 has some indirect sub-type changes:
       parameter 1 of type 'enum tbb::internal::exception_id' has sub-type changes:
@@ -59,154 +218,54 @@
         1 enumerator change:
           'tbb::internal::exception_id::eid_max' from value '20' to '21' at tbb_exception.h:79:1
 
-    [C] 'method void tbb::mutex::scoped_lock::internal_acquire(tbb::mutex&)' at mutex.h:129:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::mutex&' has sub-type changes:
-        in referenced type 'class tbb::mutex' at mutex.h:40:1:
+    [C] 'method void tbb::mutex::internal_construct()' at mutex.h:218:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'tbb::mutex*' has sub-type changes:
+        in pointed to type 'class tbb::mutex' at 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::pipeline::run(std::size_t, tbb::task_group_context&)' at pipeline.cpp:633:1 has some indirect sub-type changes:
-      parameter 2 of type 'tbb::task_group_context&' has sub-type changes:
-        in referenced type 'class tbb::task_group_context' at task.h:302:1:
-          type size hasn't changed
-          1 data member insertion:
-            'tbb::internal::cpu_ctl_env_space tbb::task_group_context::my_cpu_ctl_env', at offset 896 (in bits) at task.h:380:1
-          2 data member changes (1 filtered):
-            type of 'char tbb::task_group_context::_leading_padding[80]' changed:
-              type name changed from 'char[80]' to 'char[72]'
-              array type size changed from 640 to 576
-              array type subrange 1 changed length from 80 to 72
-            type of 'tbb::internal::generic_scheduler* tbb::task_group_context::my_owner' changed:
-              in pointed to type 'class tbb::internal::generic_scheduler' at scheduler.h:110:1:
-                type size changed from 3136 to 3072 (in bits)
-                1 base class change:
-                  'struct tbb::internal::scheduler_state' at scheduler.h:73:1 changed:
-                    type size changed from 576 to 704 (in bits)
-                    2 data member insertions:
-                      'volatile intptr_t* tbb::internal::scheduler_state::my_ref_top_priority', at offset 576 (in bits) at scheduler.h:96:1
-                      'volatile uintptr_t* tbb::internal::scheduler_state::my_ref_reload_epoch', at offset 640 (in bits) at scheduler.h:99:1
-                    2 data member changes (1 filtered):
-                      type of 'tbb::internal::arena* tbb::internal::scheduler_state::my_arena' changed:
-                        in pointed to type 'class tbb::internal::arena' at arena.h:160:1:
-                          type size hasn't changed
-                          1 base class deletion:
-                            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
-                          1 data member change:
-                            type of 'tbb::internal::arena_slot tbb::internal::arena::my_slots[1]' changed:
-                              array element type 'struct tbb::internal::arena_slot' changed:
-                                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
-                              type size hasn't changed
-                      type of 'tbb::internal::mail_inbox tbb::internal::scheduler_state::my_inbox' changed:
-                        type size hasn't changed
-                        1 data member change:
-                          type of 'tbb::internal::mail_outbox* tbb::internal::mail_inbox::my_putter' changed:
-                            in pointed to type 'class tbb::internal::mail_outbox' at mailbox.h:103:1:
-                              type size hasn't changed
-                              1 base class deletion:
-                                class tbb::internal::unpadded_mail_outbox at mailbox.h:97:1
-                              1 base class insertion:
-                                struct tbb::internal::padded<tbb::internal::unpadded_mail_outbox, 128ul> at tbb_stddef.h:251:1
-                              1 data member deletion:
-                                'char tbb::internal::mail_outbox::pad[104]', at offset 136 (in bits) at mailbox.h:114:1
-                1 member function deletion:
-                  'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&, bool)' at scheduler.h:391:1, virtual at voffset 7/7
-                1 member function insertion:
-                  'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&)' at scheduler.h:362:1, virtual at voffset 7/7
-                3 data member deletions:
-                  'unsigned int tbb::internal::generic_scheduler::hint_for_push', at offset 896 (in bits) at scheduler.h:171:1
-                  'volatile intptr_t* tbb::internal::generic_scheduler::my_ref_top_priority', at offset 2560 (in bits) at scheduler.h:433:1
-                  'volatile uintptr_t* tbb::internal::generic_scheduler::my_ref_reload_epoch', at offset 2752 (in bits) at scheduler.h:443:1
-                18 data member changes:
-                  'uintptr_t tbb::internal::generic_scheduler::my_stealing_threshold' offset changed from 704 to 832 (in bits) (by +128 bits)
-                  type of 'tbb::internal::market* tbb::internal::generic_scheduler::my_market' changed:
-                    in pointed to type 'class tbb::internal::market' at market.h:49:1:
-                      type size changed from 1664 to 1728 (in bits)
-                      1 data member insertion:
-                        'bool tbb::internal::market::join_workers', at offset 384 (in bits) at market.h:88:1
-                      7 data member changes:
-                        type of 'tbb::internal::market::arenas_list_mutex_type tbb::internal::market::my_arenas_list_mutex' changed:
-                          underlying type 'typedef tbb::internal::scheduler_mutex_type' at scheduler_common.h:123:1 changed:
-                            typedef name changed from tbb::internal::scheduler_mutex_type to tbb::spin_rw_mutex at spin_rw_mutex.h:38:1
-                            underlying type 'class tbb::spin_mutex' at spin_mutex.h:47:1 changed:
-                              type name changed from 'tbb::spin_mutex' to 'tbb::spin_rw_mutex_v3'
-                              type size changed from 8 to 64 (in bits)
-                              1 base class insertion:
-                                class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
-                              1 data member change:
-                                type of '__TBB_atomic_flag tbb::spin_mutex::flag' changed:
-                                  typedef name changed from __TBB_atomic_flag to tbb::spin_rw_mutex_v3::state_t at spin_rw_mutex.h:214:1
-                                  underlying type 'typedef __TBB_Flag' at tbb_machine.h:875:1 changed:
-                                    typedef name changed from __TBB_Flag to intptr_t at stdint.h:119:1
-                                    underlying type 'unsigned char' changed:
-                                      type name changed from 'unsigned char' to 'long int'
-                                      type size changed from 8 to 64 (in bits)
-                                and name of 'tbb::spin_mutex::flag' changed to 'tbb::spin_rw_mutex_v3::state' at spin_rw_mutex.h:224:1
-                        'intptr_t tbb::internal::market::my_global_top_priority' offset changed from 384 to 448 (in bits) (by +64 bits)
-                        'intptr_t tbb::internal::market::my_global_bottom_priority' offset changed from 448 to 512 (in bits) (by +64 bits)
-                        'uintptr_t tbb::internal::market::my_global_reload_epoch' offset changed from 512 to 576 (in bits) (by +64 bits)
-                        type of 'tbb::internal::market::priority_level_info tbb::internal::market::my_priority_levels[3]' changed:
-                          array element type 'struct tbb::internal::market::priority_level_info' changed:
-                            type size hasn't changed
-                            1 data member change:
-                              type of 'tbb::internal::intrusive_list_base<tbb::internal::intrusive_list<tbb::internal::arena>, tbb::internal::arena>::iterator tbb::internal::market::priority_level_info::next_arena' changed:
-                                entity changed from 'class tbb::internal::intrusive_list_base<tbb::internal::intrusive_list<tbb::internal::arena>, tbb::internal::arena>::iterator' to 'tbb::internal::arena*'
-                                type size hasn't changed
-                          type size hasn't changed
-                        and offset changed from 576 to 640 (in bits) (by +64 bits)
-                        'uintptr_t tbb::internal::market::my_arenas_aba_epoch' offset changed from 1536 to 1600 (in bits) (by +64 bits)
-                        'tbb::internal::generic_scheduler* tbb::internal::market::my_workers[1]' offset changed from 1600 to 1664 (in bits) (by +64 bits)
-                  and offset changed from 768 to 896 (in bits) (by +128 bits)
-                  'tbb::internal::FastRandom tbb::internal::generic_scheduler::my_random' offset changed from 832 to 960 (in bits) (by +128 bits)
-                  'tbb::task* tbb::internal::generic_scheduler::my_free_list' offset changed from 960 to 1024 (in bits) (by +64 bits)
-                  'tbb::task* tbb::internal::generic_scheduler::my_dummy_task' offset changed from 1024 to 1088 (in bits) (by +64 bits)
-                  'long int tbb::internal::generic_scheduler::my_ref_count' offset changed from 1088 to 1152 (in bits) (by +64 bits)
-                  'bool tbb::internal::generic_scheduler::my_auto_initialized' offset changed from 1152 to 1216 (in bits) (by +64 bits)
-                  'intptr_t tbb::internal::generic_scheduler::my_small_task_count' offset changed from 1216 to 1280 (in bits) (by +64 bits)
-                  'tbb::task* tbb::internal::generic_scheduler::my_return_list' offset changed from 1280 to 1344 (in bits) (by +64 bits)
-                  'char tbb::internal::generic_scheduler::_padding1[112]' offset changed from 1344 to 1408 (in bits) (by +64 bits)
-                  'tbb::internal::context_list_node_t tbb::internal::generic_scheduler::my_context_list_head' offset changed from 2240 to 2304 (in bits) (by +64 bits)
-                  'tbb::spin_mutex tbb::internal::generic_scheduler::my_context_list_mutex' offset changed from 2368 to 2432 (in bits) (by +64 bits)
-                  'uintptr_t tbb::internal::generic_scheduler::my_context_state_propagation_epoch' offset changed from 2432 to 2496 (in bits) (by +64 bits)
-                  'tbb::atomic<long unsigned int> tbb::internal::generic_scheduler::my_local_ctx_list_update' offset changed from 2496 to 2560 (in bits) (by +64 bits)
-                  'uintptr_t tbb::internal::generic_scheduler::my_local_reload_epoch' offset changed from 2816 to 2752 (in bits) (by -64 bits)
-                  'volatile bool tbb::internal::generic_scheduler::my_pool_reshuffling_pending' offset changed from 2880 to 2816 (in bits) (by -64 bits)
-                  'tbb::atomic<long unsigned int> tbb::internal::generic_scheduler::my_nonlocal_ctx_list_update' offset changed from 2944 to 2880 (in bits) (by -64 bits)
-                  '__cilk_tbb_unwatch_thunk tbb::internal::generic_scheduler::my_cilk_unwatch_thunk' offset changed from 3008 to 2944 (in bits) (by -64 bits)
-
-    [C] 'method void tbb::queuing_mutex::scoped_lock::acquire(tbb::queuing_mutex&)' at queuing_mutex.h:84:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::queuing_mutex&' has sub-type changes:
-        in referenced type 'class tbb::queuing_mutex' at queuing_mutex.h:45:1:
+    [C] 'method bool tbb::mutex::scoped_lock::internal_try_acquire(tbb::mutex&)' at mutex.h:132:1 has some indirect sub-type changes:
+      parameter 1 of type 'tbb::mutex&' has sub-type changes:
+        referenced type 'class tbb::mutex' changed at mutex.h:48:1, as reported earlier
+
+    [C] 'method void tbb::queuing_mutex::internal_construct()' at queuing_mutex.h:106:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'tbb::queuing_mutex*' has sub-type changes:
+        in pointed to type 'class tbb::queuing_mutex' at queuing_mutex.h:45: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::queuing_rw_mutex::scoped_lock::acquire(tbb::queuing_rw_mutex&, bool)' at queuing_rw_mutex.h:95:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::queuing_rw_mutex&' has sub-type changes:
-        in referenced type 'class tbb::queuing_rw_mutex' at queuing_rw_mutex.h:47:1:
+    [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:
+        in pointed to type 'class tbb::queuing_rw_mutex' at queuing_rw_mutex.h:47: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::recursive_mutex::scoped_lock::internal_acquire(tbb::recursive_mutex&)' at recursive_mutex.h:139:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::recursive_mutex&' has sub-type changes:
-        in referenced type 'class tbb::recursive_mutex' at recursive_mutex.h:39:1:
+    [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:
+        in pointed to type 'class tbb::recursive_mutex' at recursive_mutex.h:39: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 bool tbb::spin_mutex::scoped_lock::internal_try_acquire(tbb::spin_mutex&)' at spin_mutex.h:69:1 has some indirect sub-type changes:
+    [C] 'method bool tbb::recursive_mutex::scoped_lock::internal_try_acquire(tbb::recursive_mutex&)' at recursive_mutex.h:142:1 has some indirect sub-type changes:
+      parameter 1 of type 'tbb::recursive_mutex&' has sub-type changes:
+        referenced type 'class tbb::recursive_mutex' changed at recursive_mutex.h:47:1, as reported earlier
+
+    [C] 'method void tbb::spin_mutex::scoped_lock::internal_acquire(tbb::spin_mutex&)' at spin_mutex.h:66:1 has some indirect sub-type changes:
       parameter 1 of type 'tbb::spin_mutex&' has sub-type changes:
         referenced type 'class tbb::spin_mutex' changed at spin_mutex.h:47:1, as reported earlier
 
+    [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 bef715b..daf0622 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, 7 Changed (17 filtered out), 17 Added functions
+  Functions changes summary: 0 Removed, 13 Changed (94 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,49 @@
     [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}
 
-  7 functions with some indirect sub-type change:
+  13 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);
+          no data member changes (5 filtered);
+
+    [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:
+        in pointed to type 'const tbb::internal::allocate_root_with_context_proxy':
+          in unqualified underlying type 'class tbb::internal::allocate_root_with_context_proxy' at task.h:131:1:
+            type size hasn't changed
+            1 data member change:
+              type of 'tbb::task_group_context& tbb::internal::allocate_root_with_context_proxy::my_context' changed:
+                in referenced type 'class tbb::task_group_context' at task.h:302:1:
+                  type size hasn't changed
+                  1 data member insertion:
+                    'tbb::internal::cpu_ctl_env_space tbb::task_group_context::my_cpu_ctl_env', at offset 896 (in bits) at task.h:380:1
+                  1 data member changes (2 filtered):
+                    type of 'char tbb::task_group_context::_leading_padding[80]' changed:
+                      type name changed from 'char[80]' to 'char[72]'
+                      array type size changed from 640 to 576
+                      array type subrange 1 changed length from 80 to 72
+
+    [C] 'method void tbb::internal::concurrent_queue_base_v3::assign(const tbb::internal::concurrent_queue_base&)' at concurrent_queue.cpp:570:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'tbb::internal::concurrent_queue_base_v3*' has sub-type changes:
+        in pointed to type 'class tbb::internal::concurrent_queue_base_v3' at _concurrent_queue_impl.h:834:1:
+          type size hasn't changed
+          1 member function deletion:
+            'method virtual tbb::internal::concurrent_queue_base_v3::~concurrent_queue_base_v3(int)' at concurrent_queue.cpp:361:1
+          1 member function insertion:
+            'method virtual tbb::internal::concurrent_queue_base_v3::~concurrent_queue_base_v3(int)' at concurrent_queue.cpp:370:1
+          1 member function changes (6 filtered):
+            'method virtual tbb::internal::concurrent_queue_base_v3::~concurrent_queue_base_v3(int)' has some sub-type changes:
+              implicit parameter 0 of type 'tbb::internal::concurrent_queue_base_v3*' has sub-type changes:
+                pointed to type 'class tbb::internal::concurrent_queue_base_v3' changed, as being reported
+          no data member change (1 filtered);
 
     [C] 'function void tbb::internal::throw_exception_v4(tbb::internal::exception_id)' at tbb_misc.cpp:119:1 has some indirect sub-type changes:
       parameter 1 of type 'enum tbb::internal::exception_id' has sub-type changes:
@@ -34,53 +76,62 @@
         1 enumerator change:
           'tbb::internal::exception_id::eid_max' from value '20' to '21' at tbb_exception.h:79:1
 
-    [C] 'method void tbb::mutex::scoped_lock::internal_acquire(tbb::mutex&)' at mutex.h:129:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::mutex&' has sub-type changes:
-        in referenced type 'class tbb::mutex' at mutex.h:40:1:
+    [C] 'method void tbb::mutex::internal_construct()' at mutex.h:218:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'tbb::mutex*' has sub-type changes:
+        in pointed to type 'class tbb::mutex' at 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::pipeline::run(std::size_t, tbb::task_group_context&)' at pipeline.cpp:633:1 has some indirect sub-type changes:
-      parameter 2 of type 'tbb::task_group_context&' has sub-type changes:
-        in referenced type 'class tbb::task_group_context' at task.h:302:1:
-          type size hasn't changed
-          1 data member insertion:
-            'tbb::internal::cpu_ctl_env_space tbb::task_group_context::my_cpu_ctl_env', at offset 896 (in bits) at task.h:380:1
-          1 data member changes (2 filtered):
-            type of 'char tbb::task_group_context::_leading_padding[80]' changed:
-              type name changed from 'char[80]' to 'char[72]'
-              array type size changed from 640 to 576
-              array type subrange 1 changed length from 80 to 72
-
-    [C] 'method void tbb::queuing_mutex::scoped_lock::acquire(tbb::queuing_mutex&)' at queuing_mutex.h:84:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::queuing_mutex&' has sub-type changes:
-        in referenced type 'class tbb::queuing_mutex' at queuing_mutex.h:45:1:
+    [C] 'method bool tbb::mutex::scoped_lock::internal_try_acquire(tbb::mutex&)' at mutex.h:132:1 has some indirect sub-type changes:
+      parameter 1 of type 'tbb::mutex&' has sub-type changes:
+        referenced type 'class tbb::mutex' changed at mutex.h:48:1, as reported earlier
+
+    [C] 'method void tbb::queuing_mutex::internal_construct()' at queuing_mutex.h:106:1 has some indirect sub-type changes:
+      implicit parameter 0 of type 'tbb::queuing_mutex*' has sub-type changes:
+        in pointed to type 'class tbb::queuing_mutex' at queuing_mutex.h:45: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::queuing_rw_mutex::scoped_lock::acquire(tbb::queuing_rw_mutex&, bool)' at queuing_rw_mutex.h:95:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::queuing_rw_mutex&' has sub-type changes:
-        in referenced type 'class tbb::queuing_rw_mutex' at queuing_rw_mutex.h:47:1:
+    [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:
+        in pointed to type 'class tbb::queuing_rw_mutex' at queuing_rw_mutex.h:47: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::recursive_mutex::scoped_lock::internal_acquire(tbb::recursive_mutex&)' at recursive_mutex.h:139:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::recursive_mutex&' has sub-type changes:
-        in referenced type 'class tbb::recursive_mutex' at recursive_mutex.h:39:1:
+    [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:
+        in pointed to type 'class tbb::recursive_mutex' at recursive_mutex.h:39: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_mutex::scoped_lock::internal_acquire(tbb::spin_mutex&)' at spin_mutex.h:66:1 has some indirect sub-type changes:
-      parameter 1 of type 'tbb::spin_mutex&' has sub-type changes:
-        in referenced type 'class tbb::spin_mutex' at spin_mutex.h:40:1:
+    [C] 'method bool tbb::recursive_mutex::scoped_lock::internal_try_acquire(tbb::recursive_mutex&)' at recursive_mutex.h:142:1 has some indirect sub-type changes:
+      parameter 1 of type 'tbb::recursive_mutex&' has sub-type changes:
+        referenced type 'class tbb::recursive_mutex' changed at recursive_mutex.h:47:1, as reported earlier
+
+    [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 bool tbb::spin_mutex::scoped_lock::internal_try_acquire(tbb::spin_mutex&)' at spin_mutex.h:69:1 has some indirect sub-type changes:
+      parameter 1 of type 'tbb::spin_mutex&' has sub-type changes:
+        referenced type 'class tbb::spin_mutex' changed at spin_mutex.h:47:1, as reported earlier
+
+    [C] 'method void tbb::spin_rw_mutex::internal_acquire_reader()' at spin_rw_mutex_v2.h:44:1 has some indirect sub-type changes:
+      parameter 1 of type 'tbb::spin_rw_mutex*' has sub-type changes:
+        in pointed to type 'typedef tbb::spin_rw_mutex' at spin_rw_mutex.h:38:1:
+          underlying type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:43:1 changed:
+            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);
+
   3 Removed variable symbols not referenced by debug info:
 
     [D] _ZTVN3rml16versioned_objectE
diff --git a/tests/data/test-diff-suppr/test24-soname-report-0.txt b/tests/data/test-diff-suppr/test24-soname-report-0.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-0.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-0.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-1.txt b/tests/data/test-diff-suppr/test24-soname-report-1.txt
index 8e0c021..19b8801 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-1.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-1.txt
@@ -1,12 +1,13 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size changed from 32 to 64 (in bits)
-        1 data member insertion:
-          'char S::m1', at offset 32 (in bits)
+  [C] 'method int S::get() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S*' has sub-type changes:
+      in pointed to type 'const S':
+        in unqualified underlying type 'struct S':
+          type size changed from 32 to 64 (in bits)
+          1 data member insertion:
+            'char S::m1', at offset 32 (in bits)
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-10.txt b/tests/data/test-diff-suppr/test24-soname-report-10.txt
index 8e0c021..19b8801 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-10.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-10.txt
@@ -1,12 +1,13 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size changed from 32 to 64 (in bits)
-        1 data member insertion:
-          'char S::m1', at offset 32 (in bits)
+  [C] 'method int S::get() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S*' has sub-type changes:
+      in pointed to type 'const S':
+        in unqualified underlying type 'struct S':
+          type size changed from 32 to 64 (in bits)
+          1 data member insertion:
+            'char S::m1', at offset 32 (in bits)
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-11.txt b/tests/data/test-diff-suppr/test24-soname-report-11.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-11.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-11.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-12.txt b/tests/data/test-diff-suppr/test24-soname-report-12.txt
index 8e0c021..19b8801 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-12.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-12.txt
@@ -1,12 +1,13 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size changed from 32 to 64 (in bits)
-        1 data member insertion:
-          'char S::m1', at offset 32 (in bits)
+  [C] 'method int S::get() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S*' has sub-type changes:
+      in pointed to type 'const S':
+        in unqualified underlying type 'struct S':
+          type size changed from 32 to 64 (in bits)
+          1 data member insertion:
+            'char S::m1', at offset 32 (in bits)
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-13.txt b/tests/data/test-diff-suppr/test24-soname-report-13.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-13.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-13.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-14.txt b/tests/data/test-diff-suppr/test24-soname-report-14.txt
index 8e0c021..19b8801 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-14.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-14.txt
@@ -1,12 +1,13 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size changed from 32 to 64 (in bits)
-        1 data member insertion:
-          'char S::m1', at offset 32 (in bits)
+  [C] 'method int S::get() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S*' has sub-type changes:
+      in pointed to type 'const S':
+        in unqualified underlying type 'struct S':
+          type size changed from 32 to 64 (in bits)
+          1 data member insertion:
+            'char S::m1', at offset 32 (in bits)
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-15.txt b/tests/data/test-diff-suppr/test24-soname-report-15.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-15.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-15.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-16.txt b/tests/data/test-diff-suppr/test24-soname-report-16.txt
index 8e0c021..19b8801 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-16.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-16.txt
@@ -1,12 +1,13 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size changed from 32 to 64 (in bits)
-        1 data member insertion:
-          'char S::m1', at offset 32 (in bits)
+  [C] 'method int S::get() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S*' has sub-type changes:
+      in pointed to type 'const S':
+        in unqualified underlying type 'struct S':
+          type size changed from 32 to 64 (in bits)
+          1 data member insertion:
+            'char S::m1', at offset 32 (in bits)
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-2.txt b/tests/data/test-diff-suppr/test24-soname-report-2.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-2.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-2.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-3.txt b/tests/data/test-diff-suppr/test24-soname-report-3.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-3.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-3.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-4.txt b/tests/data/test-diff-suppr/test24-soname-report-4.txt
index 8e0c021..19b8801 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-4.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-4.txt
@@ -1,12 +1,13 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size changed from 32 to 64 (in bits)
-        1 data member insertion:
-          'char S::m1', at offset 32 (in bits)
+  [C] 'method int S::get() const' has some indirect sub-type changes:
+    implicit parameter 0 of type 'const S*' has sub-type changes:
+      in pointed to type 'const S':
+        in unqualified underlying type 'struct S':
+          type size changed from 32 to 64 (in bits)
+          1 data member insertion:
+            'char S::m1', at offset 32 (in bits)
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-5.txt b/tests/data/test-diff-suppr/test24-soname-report-5.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-5.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-5.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-6.txt b/tests/data/test-diff-suppr/test24-soname-report-6.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-6.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-6.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-7.txt b/tests/data/test-diff-suppr/test24-soname-report-7.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-7.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-7.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-8.txt b/tests/data/test-diff-suppr/test24-soname-report-8.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-8.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-8.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test24-soname-report-9.txt b/tests/data/test-diff-suppr/test24-soname-report-9.txt
index 9666a8f..97239c7 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-9.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-9.txt
@@ -1,3 +1,3 @@
-Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (3 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
diff --git a/tests/data/test-diff-suppr/test31-report-1.txt b/tests/data/test-diff-suppr/test31-report-1.txt
index 43f3610..5e29177 100644
--- a/tests/data/test-diff-suppr/test31-report-1.txt
+++ b/tests/data/test-diff-suppr/test31-report-1.txt
@@ -1,11 +1,11 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
 
-  [C] 'function void hidden::foo(hidden::S0&)' has some indirect sub-type changes:
-    parameter 1 of type 'hidden::S0&' has sub-type changes:
-      in referenced type 'struct hidden::S0':
+  [C] 'method hidden::S0::S0(int)' has some indirect sub-type changes:
+    implicit parameter 0 of type 'hidden::S0*' has sub-type changes:
+      in pointed to type 'struct hidden::S0':
         type size changed from 32 to 64 (in bits)
         1 data member insertion:
           'char hidden::S0::m1', at offset 32 (in bits)
diff --git a/tests/data/test-diff-suppr/test33-report-0.txt b/tests/data/test-diff-suppr/test33-report-0.txt
index 29d6cf5..07f6812 100644
--- a/tests/data/test-diff-suppr/test33-report-0.txt
+++ b/tests/data/test-diff-suppr/test33-report-0.txt
@@ -1,4 +1,4 @@
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 1 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
 1 function with some indirect sub-type change:
