[applied] comparison: Avoid sorting diff nodes with wrong criteria

Message ID 87mthygkas.fsf_-_@seketeli.org
State New
Headers
Series [applied] comparison: Avoid sorting diff nodes with wrong criteria |

Commit Message

Dodji Seketeli March 10, 2022, 10:43 a.m. UTC
  Hello,

[...]

> On Tue, 8 Mar 2022 at 17:42, Dodji Seketeli <dodji@seketeli.org> wrote:

>> I am thus proposing the patch below.  Would it address your issue?

Giuliano Procida <gprocida@google.com> a écrit:

[...]

> Absolutely! There is no chance of sort causing stability issues if
> it's not used at all. More importantly, it's a real bug fix.

Thank you for testing the patch.

I have applied it to master.  I am just pasting what got applied here
for good measure.

Thanks.

This should address PR28939, reported at
https://sourceware.org/bugzilla/show_bug.cgi?id=28939

In function_type_diff::chain_into_hierarchy, the diff details
represented by the diff nodes of the function parameters are already
sorted in the vector priv->sorted_changed_parms_by_id_.  Note that the
sorting of function parameter diff nodes was done using a criterion
that takes into account the position of each function parameter.

Members of the vector priv->sorted_changed_parms_by_id_ are then added
to the diff graph using diff::append_child_node.

The problem is that diff::append_child_node sorts the children nodes
/again/, this time using a criterion that is different from the one
used in function_type_diff::chain_into_hierarchy.  This is wrong.

This patch prevents diff::append_child_node from sorting the children
node because they have been sorted already.

	* src/abg-comparison.cc (diff::append_child_node): Do not sort
	children nodes here because they must have been sorted already.
	* tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt: Adjust.
	* tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt: Likewise.
	* tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewise.
	* tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: Likewise.
	* tests/data/test-diff-filter/test41-report-0.txt: Likewise.
	* tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt:
	Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
---
 src/abg-comparison.cc                         |  5 --
 .../test30-pr18904-rvalueref-report0.txt      |  6 +--
 .../test30-pr18904-rvalueref-report1.txt      |  6 +--
 .../test30-pr18904-rvalueref-report2.txt      |  6 +--
 .../test35-pr18754-no-added-syms-report-0.txt |  6 +--
 .../data/test-diff-filter/test41-report-0.txt | 49 ++++++++++---------
 ...libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt | 19 +++----
 7 files changed, 45 insertions(+), 52 deletions(-)
  

Patch

diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc
index 5e61ba50..193af52f 100644
--- a/src/abg-comparison.cc
+++ b/src/abg-comparison.cc
@@ -2005,11 +2005,6 @@  diff::append_child_node(diff_sptr d)
   // above.
   priv_->children_.push_back(d.get());
 
-  diff_less_than_functor comp;
-  std::sort(priv_->children_.begin(),
-	    priv_->children_.end(),
-	    comp);
-
   d->priv_->parent_ = this;
 }
 
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 20b3859f..77510262 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
@@ -1270,8 +1270,7 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 'void* alloc', at offset 320 (in bits)
                 'OffloadDescriptor::OmpAsyncLastEventType omp_last_event_type', at offset 608 (in bits)
               4 data member changes (3 filtered):
-                'CeanReadRanges* read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
-                type of 'CeanReadRanges* read_rng_dst' changed:
+                type of 'CeanReadRanges* read_rng_src' changed:
                   in pointed to type 'struct CeanReadRanges':
                     type size changed from 512 to 576 (in bits)
                     1 data member insertion:
@@ -1284,7 +1283,8 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                       'int last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
                       'int64_t init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
                       'CeanReadDim 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)
+                and offset changed from 320 to 384 (in bits) (by +64 bits)
+                'CeanReadRanges* read_rng_dst' offset changed from 384 to 448 (in bits) (by +64 bits)
                 'int64_t ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
                 'bool is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
           'OffloadHostTimerData* m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
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 65fa3f1a..5cf624c1 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
@@ -1270,8 +1270,7 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 'void* alloc', at offset 320 (in bits) at offload_host.h:222:1
                 'OffloadDescriptor::OmpAsyncLastEventType omp_last_event_type', at offset 608 (in bits) at offload_host.h:227:1
               4 data member changes (3 filtered):
-                'CeanReadRanges* read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
-                type of 'CeanReadRanges* read_rng_dst' changed:
+                type of 'CeanReadRanges* read_rng_src' 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:
@@ -1284,7 +1283,8 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                       'int last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
                       'int64_t init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
                       'CeanReadDim 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)
+                and offset changed from 320 to 384 (in bits) (by +64 bits)
+                'CeanReadRanges* read_rng_dst' offset changed from 384 to 448 (in bits) (by +64 bits)
                 'int64_t ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
                 'bool is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
           'OffloadHostTimerData* m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
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 0248394f..68014539 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
@@ -1270,8 +1270,7 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 'void* alloc', at offset 0x28 (in bytes) at offload_host.h:222:1
                 'OffloadDescriptor::OmpAsyncLastEventType omp_last_event_type', at offset 0x4c (in bytes) at offload_host.h:227:1
               4 data member changes (3 filtered):
-                'CeanReadRanges* read_rng_src' offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
-                type of 'CeanReadRanges* read_rng_dst' changed:
+                type of 'CeanReadRanges* read_rng_src' 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:
@@ -1284,7 +1283,8 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                       'int last_noncont_ind' offset changed from 0x20 to 0x28 (in bytes) (by +0x8 bytes)
                       'int64_t init_offset' offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
                       'CeanReadDim 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)
+                and offset changed from 0x28 to 0x30 (in bytes) (by +0x8 bytes)
+                'CeanReadRanges* read_rng_dst' offset changed from 0x30 to 0x38 (in bytes) (by +0x8 bytes)
                 'int64_t ptr_arr_offset' offset changed from 0x38 to 0x40 (in bytes) (by +0x8 bytes)
                 'bool is_arr_ptr_el' offset changed from 0x40 to 0x48 (in bytes) (by +0x8 bytes)
           'OffloadHostTimerData* m_timer_data' offset changed from 0xf8 to 0x100 (in bytes) (by +0x8 bytes)
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 75b7116d..e14819a4 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
@@ -186,8 +186,7 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                 'void* alloc', at offset 320 (in bits)
                 'OffloadDescriptor::OmpAsyncLastEventType omp_last_event_type', at offset 608 (in bits)
               4 data member changes (3 filtered):
-                'CeanReadRanges* read_rng_src' offset changed from 320 to 384 (in bits) (by +64 bits)
-                type of 'CeanReadRanges* read_rng_dst' changed:
+                type of 'CeanReadRanges* read_rng_src' changed:
                   in pointed to type 'struct CeanReadRanges':
                     type size changed from 512 to 576 (in bits)
                     1 data member insertion:
@@ -200,7 +199,8 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
                       'int last_noncont_ind' offset changed from 256 to 320 (in bits) (by +64 bits)
                       'int64_t init_offset' offset changed from 320 to 384 (in bits) (by +64 bits)
                       'CeanReadDim 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)
+                and offset changed from 320 to 384 (in bits) (by +64 bits)
+                'CeanReadRanges* read_rng_dst' offset changed from 384 to 448 (in bits) (by +64 bits)
                 'int64_t ptr_arr_offset' offset changed from 448 to 512 (in bits) (by +64 bits)
                 'bool is_arr_ptr_el' offset changed from 512 to 576 (in bits) (by +64 bits)
           'OffloadHostTimerData* m_timer_data' offset changed from 1984 to 2048 (in bits) (by +64 bits)
diff --git a/tests/data/test-diff-filter/test41-report-0.txt b/tests/data/test-diff-filter/test41-report-0.txt
index e6caf368..2da31ef6 100644
--- a/tests/data/test-diff-filter/test41-report-0.txt
+++ b/tests/data/test-diff-filter/test41-report-0.txt
@@ -42,7 +42,7 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
         in unqualified underlying type 'class abigail::xml_writer::write_context' at abg-writer.cc:155:1:
           type size hasn't changed
           4 data member changes (3 filtered):
-            type of 'abigail::xml_writer::type_ptr_map m_emitted_decl_only_map' changed:
+            type of 'abigail::xml_writer::type_ptr_map m_type_id_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
@@ -113,23 +113,25 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
             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 _M_finish' changed:
+              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> > > >::_Map_pointer _M_map' 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> > > >::_Map_pointer to std::_Deque_base<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::_Map_pointer at stl_deque.h:542: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> >*>::_Map_pointer' at stl_deque.h:123:1 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_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
+              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 _M_start' 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 _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
+                    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_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
+              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:
@@ -139,20 +141,21 @@  Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
         1 data member change:
           type of 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Deque_impl _M_impl' changed:
             type size hasn't changed
-            1 data member changes (2 filtered):
-              type of 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::iterator _M_finish' changed:
+            2 data member changes (1 filtered):
+              type of 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::_Map_pointer _M_map' changed:
+                underlying type 'typedef std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>::_Map_pointer' at stl_deque.h:123:1 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)
+              type of 'std::_Deque_base<unsigned int, std::allocator<unsigned int> >::iterator _M_start' 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 _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
+                    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
 
 1 Removed function symbol not referenced by debug info:
 
diff --git a/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt b/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
index 3c05d925..a837ba48 100644
--- a/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
+++ b/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
@@ -16,18 +16,13 @@ 
           in pointed to type 'struct _IceConn' at ICEconn.h:131:1:
             type size hasn't changed
             2 data member changes (3 filtered):
-              type of 'IceListenObj listen_obj' changed:
-                underlying type '_IceListenObj*' changed:
-                  in pointed to type 'struct _IceListenObj' at ICElibint.h:120:1:
-                    type size hasn't changed
-                    1 data member change:
-                      type of '_XtransConnInfo* trans_conn' changed:
-                        in pointed to type 'struct _XtransConnInfo' at Xtransint.h:136:1:
-                          type size changed from 640 to 768 (in bits)
-                          2 data member insertions:
-                            '_XtransConnFd* recv_fds', at offset 640 (in bits) at Xtransint.h:148:1
-                            '_XtransConnFd* send_fds', at offset 704 (in bits) at Xtransint.h:149:1
-                          no data member change (1 filtered);
+              type of '_XtransConnInfo* trans_conn' changed:
+                in pointed to type 'struct _XtransConnInfo' at Xtransint.h:136:1:
+                  type size changed from 640 to 768 (in bits)
+                  2 data member insertions:
+                    '_XtransConnFd* recv_fds', at offset 640 (in bits) at Xtransint.h:148:1
+                    '_XtransConnFd* send_fds', at offset 704 (in bits) at Xtransint.h:149:1
+                  no data member change (1 filtered);
               type of '_IcePingWait* ping_waits' changed:
                 in pointed to type 'struct _IcePingWait' at ICEconn.h:48:1:
                   entity changed from 'struct _IcePingWait' to compatible type 'typedef _IcePingWait' at ICEconn.h:48:1