From patchwork Thu Mar 10 10:43:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Dodji Seketeli X-Patchwork-Id: 51837 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 917C43857C75 for ; Thu, 10 Mar 2022 10:43:20 +0000 (GMT) X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from relay9-d.mail.gandi.net (relay9-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::229]) by sourceware.org (Postfix) with ESMTPS id D4C5C3858410 for ; Thu, 10 Mar 2022 10:43:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D4C5C3858410 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=seketeli.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=seketeli.org Received: (Authenticated sender: dodji@seketeli.org) by mail.gandi.net (Postfix) with ESMTPSA id C165AFF80A; Thu, 10 Mar 2022 10:43:08 +0000 (UTC) Received: by localhost (Postfix, from userid 1000) id 22C3F581C3A; Thu, 10 Mar 2022 11:43:07 +0100 (CET) From: Dodji Seketeli To: Giuliano Procida Subject: [PATCH, applied] comparison: Avoid sorting diff nodes with wrong criteria Organization: Me, myself and I References: <20220303145619.385117-1-gprocida@google.com> <87r17cgx3t.fsf@seketeli.org> X-Operating-System: Fedora 36 X-URL: http://www.seketeli.net/~dodji Date: Thu, 10 Mar 2022 11:43:07 +0100 In-Reply-To: (Giuliano Procida's message of "Wed, 9 Mar 2022 10:41:44 +0000") Message-ID: <87mthygkas.fsf_-_@seketeli.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , Cc: maennich@google.com, libabigail@sourceware.org, kernel-team@android.com Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" Hello, [...] > On Tue, 8 Mar 2022 at 17:42, Dodji Seketeli wrote: >> I am thus proposing the patch below. Would it address your issue? Giuliano Procida 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 --- 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(-) 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 > >' at unordered_map.h:180:1 changed: type name changed from 'std::tr1::unordered_map > >' to 'std::tr1::unordered_map > >' 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 > at allocator.h:108:1 3 data member changes (1 filtered): - name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Deque_impl::_M_map' changed to 'std::_Deque_base, std::allocator > >::_Deque_impl::_M_map' at stl_deque.h:550:1 - name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Deque_impl::_M_start' changed to 'std::_Deque_base, std::allocator > >::_Deque_impl::_M_start' at stl_deque.h:552:1 - type of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::iterator _M_finish' changed: + type of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Map_pointer _M_map' changed: + typedef name changed from std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Map_pointer to std::_Deque_base, std::allocator > >::_Map_pointer at stl_deque.h:542:1 + underlying type 'typedef std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::_Map_pointer' at stl_deque.h:123:1 changed: + typedef name changed from std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::_Map_pointer to std::_Deque_iterator, std::__cxx11::basic_string &, std::__cxx11::basic_string *>::_Map_pointer at stl_deque.h:112:1 + underlying type 'typedef std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::__ptr_to' at stl_deque.h:116:1 changed: + entity changed from 'typedef std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::__ptr_to' to compatible type 'std::__cxx11::basic_string, std::allocator >**' + in pointed to type 'class std::__cxx11::basic_string, std::allocator >': + entity changed from 'class std::__cxx11::basic_string, std::allocator >' to 'std::__cxx11::basic_string, std::allocator >*' + type size changed from 256 to 64 (in bits) + and name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Deque_impl::_M_map' changed to 'std::_Deque_base, std::allocator > >::_Deque_impl::_M_map' at stl_deque.h:550:1 + type of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::iterator _M_start' changed: typedef name changed from std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::iterator to std::_Deque_base, std::allocator > >::iterator at stl_deque.h:485:1 underlying type 'struct std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>' at stl_deque.h:106:1 changed: type name changed from 'std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>' to 'std::_Deque_iterator, std::__cxx11::basic_string &, std::__cxx11::basic_string *>' type size hasn't changed 1 data member changes (3 filtered): - type of 'std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::_Map_pointer _M_node' changed: - typedef name changed from std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::_Map_pointer to std::_Deque_iterator, std::__cxx11::basic_string &, std::__cxx11::basic_string *>::_Map_pointer at stl_deque.h:112:1 - underlying type 'typedef std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::__ptr_to' at stl_deque.h:116:1 changed: - entity changed from 'typedef std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::__ptr_to' to compatible type 'std::__cxx11::basic_string, std::allocator >**' - in pointed to type 'class std::__cxx11::basic_string, std::allocator >': - entity changed from 'class std::__cxx11::basic_string, std::allocator >' to 'std::__cxx11::basic_string, std::allocator >*' - type size changed from 256 to 64 (in bits) - and name of 'std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::_M_node' changed to 'std::_Deque_iterator, std::__cxx11::basic_string &, std::__cxx11::basic_string *>::_M_node' at stl_deque.h:140:1 - and name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Deque_impl::_M_finish' changed to 'std::_Deque_base, std::allocator > >::_Deque_impl::_M_finish' at stl_deque.h:553:1 + name of 'std::_Deque_iterator, std::allocator >, std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >*>::_M_node' changed to 'std::_Deque_iterator, std::__cxx11::basic_string &, std::__cxx11::basic_string *>::_M_node' at stl_deque.h:140:1 + and name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Deque_impl::_M_start' changed to 'std::_Deque_base, std::allocator > >::_Deque_impl::_M_start' at stl_deque.h:552:1 + name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Deque_impl::_M_finish' changed to 'std::_Deque_base, std::allocator > >::_Deque_impl::_M_finish' at stl_deque.h:553:1 and name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_M_impl' changed to 'std::_Deque_base, std::allocator > >::_M_impl' at stl_deque.h:631:1 [C] 'method void std::_Deque_base >::_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 >::_Deque_impl _M_impl' changed: type size hasn't changed - 1 data member changes (2 filtered): - type of 'std::_Deque_base >::iterator _M_finish' changed: + 2 data member changes (1 filtered): + type of 'std::_Deque_base >::_Map_pointer _M_map' changed: + underlying type 'typedef std::_Deque_iterator::_Map_pointer' at stl_deque.h:123:1 changed: + typedef name changed from std::_Deque_iterator::_Map_pointer to std::_Deque_iterator::_Map_pointer at stl_deque.h:112:1 + underlying type 'typedef std::_Deque_iterator::__ptr_to' at stl_deque.h:116:1 changed: + entity changed from 'typedef std::_Deque_iterator::__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 >::iterator _M_start' changed: underlying type 'struct std::_Deque_iterator' at stl_deque.h:106:1 changed: type name changed from 'std::_Deque_iterator' to 'std::_Deque_iterator' type size hasn't changed 1 data member changes (3 filtered): - type of 'std::_Deque_iterator::_Map_pointer _M_node' changed: - typedef name changed from std::_Deque_iterator::_Map_pointer to std::_Deque_iterator::_Map_pointer at stl_deque.h:112:1 - underlying type 'typedef std::_Deque_iterator::__ptr_to' at stl_deque.h:116:1 changed: - entity changed from 'typedef std::_Deque_iterator::__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::_M_node' changed to 'std::_Deque_iterator::_M_node' at stl_deque.h:140:1 + name of 'std::_Deque_iterator::_M_node' changed to 'std::_Deque_iterator::_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