From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay6-d.mail.gandi.net (relay6-d.mail.gandi.net [217.70.183.198]) by sourceware.org (Postfix) with ESMTPS id B36663858D35 for ; Tue, 8 Mar 2022 17:42:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B36663858D35 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 88410C0008; Tue, 8 Mar 2022 17:41:59 +0000 (UTC) Received: by localhost (Postfix, from userid 1000) id DEB805802B4; Tue, 8 Mar 2022 18:41:58 +0100 (CET) From: Dodji Seketeli To: Giuliano Procida Cc: libabigail@sourceware.org, kernel-team@android.com, maennich@google.com Subject: Re: [PATCH] Increase stability of child diff order Organization: Me, myself and I References: <20220303145619.385117-1-gprocida@google.com> X-Operating-System: Fedora 36 X-URL: http://www.seketeli.net/~dodji Date: Tue, 08 Mar 2022 18:41:58 +0100 In-Reply-To: <20220303145619.385117-1-gprocida@google.com> (Giuliano Procida's message of "Thu, 3 Mar 2022 14:56:19 +0000") Message-ID: <87r17cgx3t.fsf@seketeli.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-9.3 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_ASCII_DIVIDERS, 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: , X-List-Received-Date: Tue, 08 Mar 2022 17:42:06 -0000 Hello Giuliano, Giuliano Procida a =C3=A9crit: [...] I am putting below a copy of the error reported on the bug, that is allegedly triggered by a different implementation of std::sort: --- tests/data/test-abidiff-exit/test-member-size-report0.txt 2022-01-30 18:02:19.412941913 -0800 +++ tests/output/test-abidiff-exit/test-member-size-report0.txt 2022-01-30 18:02:20.180941537 -0800 @@ -4,16 +4,15 @@ 2 functions with some indirect sub-type change: [C] 'function void reg1(S*, T*, T*)' at test-member-size-v1.cc:26:1 has some indirect sub-type changes: - parameter 1 of type 'S*' has sub-type changes: - in pointed to type 'struct S' at test-member-size-v1.cc:3:1: - type size changed from 128 to 192 (in bits) - 1 data member insertion: - 'int y', at offset 128 (in bits) at test-member-size-v1.cc:6:1 - no data member change (1 filtered); - parameter 2 of type 'T*' has sub-type changes: + parameter 3 of type 'T*' has sub-type changes: in pointed to type 'struct T' at test-member-size-v1.cc:14:1: type size changed from 192 to 256 (in bits) - 1 data member changes (1 filtered): + 2 data member changes: + type of 'S s' changed: + type size changed from 128 to 192 (in bits) + 1 data member insertion: + 'int y', at offset 128 (in bits) at test-member-size-v1.cc:6:1 + no data member change (1 filtered); 'int a' offset changed from 128 to 192 (in bits) (by +64 = bits) >From what I am seeing here, it looks like this is because the order in which the diff nodes representing the function parameter diffs are present as children of the diff node for the function type diff. Said otherwise, the diff node for the function type diff has children nodes that are the diff nodes representing function parameter diffs. You can see that in the function function_type_diff::chain_into_hierarchy in abg-comparison.cc: for (vector::const_iterator i =3D priv_->sorted_changed_parms_by_id_.begin(); i !=3D priv_->sorted_changed_parms_by_id_.end(); ++i) if (diff_sptr d =3D *i) append_child_node(d); So, the parameters diffs are sorted by parameter id; meaning, the parameter diff for the first function parameter comes before the parameter diff for the second function parameter, which comes before the parameter diff for the third function parameter, etc. But then in the problem report, it seems that the order of those parameter diff nodes is changed somehow, because the diff node for the third parameter comes first. Let's look at the code of diff::append_child_node that is called in the code snippet above, in the expression "append_child_node(d)". It contains this snippet: > @@ -1999,9 +1999,9 @@ diff::append_child_node(diff_sptr d) > priv_->children_.push_back(d.get()); >=20=20 > diff_less_than_functor comp; > std::sort(priv_->children_.begin(), > priv_->children_.end(), > comp); I think that std::sort should not be there, because the children nodes are already sorted, using a sorting criterion that is specific for function parameter diffs. So that would be the bug. I think that call to std::sort should be purely removed. I am thus proposing the patch below. Would it address your issue? ------------------------------------>8<------------------------------------= -------------------- >From 03213b9c97bbfbce7b3c4df9e47a3f353db8403e Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Mon, 7 Mar 2022 17:55:05 +0100 Subject: [PATCH] comparison: Avoid sorting diff nodes with wrong criteria This should address PR28939, reported at https://sourceware.org/bugzilla/show_bug.cgi?id=3D28939 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: Likewi= se. * tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt: Likewi= se. * tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt: L= ikewise. * 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.e= l7.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()); =20 - diff_less_than_functor comp; - std::sort(priv_->children_.begin(), - priv_->children_.end(), - comp); - d->priv_->parent_ =3D this; } =20 diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.t= xt 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_t= ype', 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 32= 0 (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 (i= n bits) (by +64 bits) 'bool is_arr_ptr_el' offset changed from 512 to 576 (in bi= ts) (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.t= xt 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:2= 22:1 'OffloadDescriptor::OmpAsyncLastEventType omp_last_event_t= ype', 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 32= 0 (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 (i= n bits) (by +64 bits) 'bool is_arr_ptr_el' offset changed from 512 to 576 (in bi= ts) (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.t= xt 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_t= ype', 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 0= x28 (in bytes) (by +0x8 bytes) 'int64_t init_offset' offset changed from 0x28 to 0x= 30 (in bytes) (by +0x8 bytes) 'CeanReadDim Dim[1]' offset changed from 0x30 to 0x3= 8 (in bytes) (by +0x8 bytes) - and offset changed from 0x30 to 0x38 (in bytes) (by +0x8 b= ytes) + and offset changed from 0x28 to 0x30 (in bytes) (by +0x8 b= ytes) + '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-repor= t-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 va= riable symbol not referen 'void* alloc', at offset 320 (in bits) 'OffloadDescriptor::OmpAsyncLastEventType omp_last_event_t= ype', 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 va= riable symbol not referen 'int last_noncont_ind' offset changed from 256 to 32= 0 (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 (i= n bits) (by +64 bits) 'bool is_arr_ptr_el' offset changed from 512 to 576 (in bi= ts) (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/t= est-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 vari= able symbol not referen in unqualified underlying type 'class abigail::xml_writer::write_c= ontext' 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' chan= ged: 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::unorder= ed_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 a= llocator.h:108:1 3 data member changes (1 filtered): - name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_De= que_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 > > >::_De= que_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 > > >::ite= rator _M_finish' changed: + type of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_Ma= p_pointer _M_map' changed: + typedef name changed from std::_Deque_base, std::allocator >, std::allo= cator, std::allocat= or > > >::_Map_pointer to std::_Deque_base, std::allocator > >::_Map_pointer a= t 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<= char> >*>::__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::allo= cator >*>::__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_str= ing, 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 > > >::ite= rator _M_start' changed: typedef name changed from std::_Deque_base, std::allocator >, std::allo= cator, std::allocat= or > > >::iterator to std::_Deque_base, std::allocator > >::iterator at stl_de= que.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::basi= c_string, std::allocator >&, std::__cxx1= 1::basic_string, std::allocator >*>::_Ma= p_pointer _M_node' changed: - typedef name changed from std::_Deque_iterator, std::allocator >,= std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::alloc= ator >*>::_Map_pointer to std::_Deque_iterator, std::__cxx11::basic_string &, std::__cxx11::basic_string<= char> *>::_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::alloca= tor >*>::__ptr_to' at stl_deque.h:116:1 changed: - entity changed from 'typedef std::_Deque_iterator<= std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocat= or >&, std::__cxx11::basic_string, std::= allocator >*>::__ptr_to' to compatible type 'std::__cxx11::basic_stri= ng, std::allocator >**' - in pointed to type 'class std::__cxx11::basic_st= ring, std::allocator >': - entity changed from 'class std::__cxx11::basic= _string, std::allocator >' to 'std::__cx= x11::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_im= pl::_M_finish' at stl_deque.h:553:1 + name of 'std::_Deque_iterator, std::allocator >, std::__cxx11::basi= c_string, std::allocator >&, std::__cxx1= 1::basic_string, std::allocator >*>::_M_= node' changed to 'std::_Deque_iterator, st= d::__cxx11::basic_string &, std::__cxx11::basic_string *>::_M_n= ode' 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_imp= l::_M_start' at stl_deque.h:552:1 + name of 'std::_Deque_base, std::allocator >, std::allocator, std::allocator > > >::_De= que_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::a= llocator > >::_M_impl' at stl_deque.h:631:1 =20 [C] 'method void std::_Deque_base >::_M_initialize_map(std::size_t)' at stl_deque.h:625:1 has some indir= ect 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:11= 2: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 'unsi= gned int**' + in pointed to type 'unsigned int': + entity changed from 'unsigned int' to 'unsigned in= t*' + 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_iterato= r::_Map_pointer at stl_deque.= h:112:1 - underlying type 'typedef std::_Deque_iterator::__ptr_to' at stl_deque.h:116:1 chang= ed: - 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 'unsigne= d 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 =20 1 Removed function symbol not referenced by debug info: =20 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 Xtr= ansint.h:136:1: - type size changed from 640 to 768 (in bits) - 2 data member insertions: - '_XtransConnFd* recv_fds', at offset 640 (in b= its) at Xtransint.h:148:1 - '_XtransConnFd* send_fds', at offset 704 (in b= its) 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 --=20 2.35.0.rc2 ------------------------------------------------->8<-----------------------= --------------------------------- --=20 Dodji