* [PATCH, applied] Bug 29650 - Caching class comparison result potentially too early
@ 2022-10-10 11:56 Dodji Seketeli
0 siblings, 0 replies; only message in thread
From: Dodji Seketeli @ 2022-10-10 11:56 UTC (permalink / raw)
To: libabigail
Hello,
When structurally comparing two classes T and T' the overload of the
equals() function for abigail::ir::class_decl calls the overload of
equals() for abigail::ir::class_or_union to compare the data members
of the class. If data members are equal, that later call caches the
result of comparing the data-members-only sub-object of T and T'.
That caching appears as if it's the result of comparing all of T and
T' that was cached, leading to misleading results down the road.
Result caching should not take place until the end of fulling
comparing T and T'. Fixed thus.
* src/abg-ir.cc (equal): In the overload of class_or_union do not
cache the result comparing just the data members sub-types of of
classes. In the overload for class_decl, put cycle detection
management code /after/ the call to equals for class_or_union,
because that called function does perform the cycle detection
management as well; otherwise, that introduces an unwarranted
redundancy. In the overload of equals for union_decl, cache the
result of the comparison.
* tests/data/test-abidiff/test-PR18791-report0.txt: Adjust.
* tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt:
Adjust.
* tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt:
Adjust.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
---
src/abg-ir.cc | 55 ++---
.../test-abidiff/test-PR18791-report0.txt | 225 +++++++++++++++---
...bb-4.3-3.20141204.fc23.x86_64-report-0.txt | 45 +++-
...bb-4.3-3.20141204.fc23.x86_64-report-1.txt | 11 +-
4 files changed, 263 insertions(+), 73 deletions(-)
diff --git a/src/abg-ir.cc b/src/abg-ir.cc
index 381437c7..2cb74339 100644
--- a/src/abg-ir.cc
+++ b/src/abg-ir.cc
@@ -22251,16 +22251,6 @@ equals(const class_or_union& l, const class_or_union& r, change_kind* k)
RETURN(val);
}
- {
- // First of all, let's see if these two types haven't already been
- // compared. If so, and if the result of the comparison has been
- // cached, let's just re-use it, rather than comparing them all
- // over again.
- bool result = false;
- if (l.get_environment()->priv_->is_type_comparison_cached(l, r, result))
- return result;
- }
-
// No need to go further if the classes have different names or
// different size / alignment.
if (!(l.decl_base::operator==(r) && l.type_base::operator==(r)))
@@ -22382,17 +22372,6 @@ equals(const class_or_union& l, const class_or_union& r, change_kind* k)
}
}
- // We are done comparing these two types and we have a full
- // understanding of how they might be different, if they are. Let's
- // cache the result of this comparison -- in case we are asked in a
- // very near future to compare them again.
- //
- // TODO: If further profiling shows its necessity, maybe we should
- // perform this caching also on the earlier return points of this
- // function. That would basically mean to redefine the RETURN macro
- // to make it perform this caching for us.
- l.get_environment()->priv_->cache_type_comparison_result(l, r, result);
-
RETURN(result);
#undef RETURN
}
@@ -23824,8 +23803,6 @@ equals(const class_decl& l, const class_decl& r, change_kind* k)
static_cast<const class_or_union&>(r),
k));
- RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r);
-
bool had_canonical_type = !!r.get_naked_canonical_type();
bool result = true;
if (!equals(static_cast<const class_or_union&>(l),
@@ -23837,10 +23814,6 @@ equals(const class_decl& l, const class_decl& r, change_kind* k)
ABG_RETURN(result);
}
- mark_types_as_being_compared(l, r);
-
-#define RETURN(value) return return_comparison_result(l, r, value);
-
// If comparing the class_or_union 'part' of the type led to
// canonical type propagation, then cancel that because it's too
// early to do that at this point. We still need to compare bases
@@ -23848,6 +23821,12 @@ equals(const class_decl& l, const class_decl& r, change_kind* k)
if (!had_canonical_type)
maybe_cancel_propagated_canonical_type(r);
+ RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r);
+
+ mark_types_as_being_compared(l, r);
+
+#define RETURN(value) return return_comparison_result(l, r, value);
+
// Compare bases.
if (l.get_base_specifiers().size() != r.get_base_specifiers().size())
{
@@ -24961,8 +24940,15 @@ union_decl::~union_decl()
bool
equals(const union_decl& l, const union_decl& r, change_kind* k)
{
-
- RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r);
+ {
+ // First of all, let's see if these two types haven't already been
+ // compared. If so, and if the result of the comparison has been
+ // cached, let's just re-use it, rather than comparing them all
+ // over again.
+ bool result = false;
+ if (l.get_environment()->priv_->is_type_comparison_cached(l, r, result))
+ return result;
+ }
#define RETURN(value) \
return return_comparison_result(l, r, value);
@@ -24973,6 +24959,17 @@ equals(const union_decl& l, const union_decl& r, change_kind* k)
mark_types_as_being_compared(l, r);
+ // We are done comparing these two types and we have a full
+ // understanding of how they might be different, if they are. Let's
+ // cache the result of this comparison -- in case we are asked in a
+ // very near future to compare them again.
+ //
+ // TODO: If further profiling shows its necessity, maybe we should
+ // perform this caching also on the earlier return points of this
+ // function. That would basically mean to redefine the RETURN macro
+ // to make it perform this caching for us.
+ l.get_environment()->priv_->cache_type_comparison_result(l, r, result);
+
RETURN(result);
}
diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt
index 44df096e..61635682 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, 36 Changed, 1 Added functions
+Functions changes summary: 1 Removed, 60 Changed, 1 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
1 Removed function:
@@ -9,7 +9,113 @@ 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()'
-36 functions with some indirect sub-type change:
+60 functions with some indirect sub-type change:
+
+ [C] 'method bool sigc::connection::block(bool)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ in pointed to type 'struct sigc::connection':
+ type size hasn't changed
+ 1 data member change:
+ type of 'sigc::slot_base* slot_' changed:
+ in pointed to type 'class sigc::slot_base':
+ type size hasn't changed
+ 1 data member change:
+ type of 'sigc::slot_base::rep_type* rep_' changed:
+ in pointed to type 'typedef sigc::slot_base::rep_type':
+ underlying type 'struct sigc::internal::slot_rep' changed:
+ type size hasn't changed
+ 1 base class change:
+ 'struct sigc::trackable' changed:
+ type size hasn't changed
+ 1 data member change:
+ type of 'sigc::internal::trackable_callback_list* callback_list_' changed:
+ in pointed to type 'struct sigc::internal::trackable_callback_list':
+ type size changed from 192 to 256 (in bits)
+ 2 data member changes:
+ type of 'sigc::internal::trackable_callback_list::callback_list callbacks_' changed:
+ underlying type 'class std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
+ type name changed from 'std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
+ type size changed from 128 to 192 (in bits)
+ 1 base class change:
+ 'class std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
+ type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
+ type size changed from 128 to 192 (in bits)
+ 1 data member change:
+ type of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl _M_impl' changed:
+ type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl'
+ type size changed from 128 to 192 (in bits)
+ 1 data member change:
+ type of 'std::__detail::_List_node_base _M_node' changed:
+ type name changed from 'std::__detail::_List_node_base' to 'std::_List_node<long unsigned int>'
+ type size changed from 128 to 192 (in bits)
+ 1 base class insertion:
+ struct std::__detail::_List_node_base
+ 2 data member deletions:
+ 'std::__detail::_List_node_base* _M_next', at offset 0 (in bits)
+ 'std::__detail::_List_node_base* _M_prev', at offset 64 (in bits)
+ 1 data member insertion:
+ 'unsigned long int _M_data', at offset 128 (in bits)
+ and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node'
+ and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl'
+ 'bool clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
+
+ [C] 'method bool sigc::connection::blocked()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'const sigc::connection*' has sub-type changes:
+ in pointed to type 'const sigc::connection':
+ unqualified underlying type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method sigc::connection::connection(const sigc::connection&)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+ parameter 1 of type 'const sigc::connection&' has sub-type changes:
+ in referenced type 'const sigc::connection':
+ unqualified underlying type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method sigc::connection::connection()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method sigc::connection::connection(sigc::slot_base&)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+ parameter 1 of type 'sigc::slot_base&' has sub-type changes:
+ referenced type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method void sigc::connection::disconnect()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method bool sigc::connection::empty()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'const sigc::connection*' has sub-type changes:
+ in pointed to type 'const sigc::connection':
+ unqualified underlying type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method bool sigc::connection::operator bool()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method sigc::connection& sigc::connection::operator=(const sigc::connection&)' has some indirect sub-type changes:
+ return type changed:
+ referenced type 'struct sigc::connection' changed, as reported earlier
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+ parameter 1 of type 'const sigc::connection&' has sub-type changes:
+ in referenced type 'const sigc::connection':
+ unqualified underlying type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method void sigc::connection::set_slot(sigc::slot_base*)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+ parameter 1 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method bool sigc::connection::unblock()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
+
+ [C] 'method sigc::connection::~connection(int)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::connection*' has sub-type changes:
+ pointed to type 'struct sigc::connection' changed, as reported earlier
[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:
@@ -28,16 +134,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
type name changed from 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl' to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl'
type size changed from 128 to 192 (in bits)
1 data member change:
- type of 'std::__detail::_List_node_base _M_node' changed:
- type name changed from 'std::__detail::_List_node_base' to 'std::_List_node<long unsigned int>'
- type size changed from 128 to 192 (in bits)
- 1 base class insertion:
- struct std::__detail::_List_node_base
- 2 data member deletions:
- 'std::__detail::_List_node_base* _M_next', at offset 0 (in bits)
- 'std::__detail::_List_node_base* _M_prev', at offset 64 (in bits)
- 1 data member insertion:
- 'unsigned long int _M_data', at offset 128 (in bits)
+ type of 'std::__detail::_List_node_base _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'
@@ -56,6 +153,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
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
[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:
@@ -68,6 +168,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
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 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:
@@ -87,31 +190,12 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
[C] 'method void sigc::internal::slot_rep::disconnect()' has some indirect sub-type changes:
- implicit parameter 0 of type 'sigc::internal::slot_rep*' changed:
- in pointed to type 'struct sigc::internal::slot_rep':
+ 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:
- in pointed to type 'struct sigc::internal::trackable_callback_list':
- type size changed from 192 to 256 (in bits)
- 2 data member changes:
- type of 'sigc::internal::trackable_callback_list::callback_list callbacks_' changed:
- underlying type 'class std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
- type name changed from 'std::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::list<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
- type size changed from 128 to 192 (in bits)
- 1 base class change:
- 'class std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' changed:
- type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >'
- type size changed from 128 to 192 (in bits)
- 1 data member change:
- type of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl _M_impl' changed:
- type name changed from 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl' to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl'
- type size changed from 128 to 192 (in bits)
- 1 data member change:
- type of 'std::__detail::_List_node_base _M_node' changed, as reported earlier
- and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node'
- and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl'
- 'bool clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
+ 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:
@@ -131,10 +215,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
type size hasn't changed
1 base class change:
'struct sigc::trackable' changed:
- type size hasn't changed
- 1 data member change:
- type of 'sigc::internal::trackable_callback_list* callback_list_' changed:
- pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
+ details were reported earlier
1 data member change:
type of 'sigc::internal::signal_impl* impl_' changed:
pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
@@ -153,6 +234,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
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
[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:
@@ -172,6 +256,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
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 2 of type 'const sigc::slot_base&' has sub-type changes:
+ in referenced type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
[C] 'method sigc::signal_base& sigc::signal_base::operator=(const sigc::signal_base&)' has some indirect sub-type changes:
return type changed:
@@ -206,6 +293,68 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
pointed to type 'struct sigc::signal_base' changed, as reported earlier
+ [C] 'method void sigc::slot_base::add_destroy_notify_callback(void*)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
+ in pointed to type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method bool sigc::slot_base::block(bool)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method void sigc::slot_base::disconnect()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method bool sigc::slot_base::operator bool()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
+ in pointed to type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method sigc::slot_base& sigc::slot_base::operator=(const sigc::slot_base&)' has some indirect sub-type changes:
+ return type changed:
+ referenced type 'class sigc::slot_base' changed, as reported earlier
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+ parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
+ in referenced type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method void sigc::slot_base::remove_destroy_notify_callback(void*)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
+ in pointed to type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method void sigc::slot_base::set_parent(void*)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes:
+ in pointed to type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method sigc::slot_base::slot_base(sigc::slot_base::rep_type*)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+ parameter 1 of type 'sigc::slot_base::rep_type*' has sub-type changes:
+ pointed to type 'typedef sigc::slot_base::rep_type' changed, as reported earlier
+
+ [C] 'method sigc::slot_base::slot_base()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method sigc::slot_base::slot_base(const sigc::slot_base&)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+ parameter 1 of type 'const sigc::slot_base&' has sub-type changes:
+ in referenced type 'const sigc::slot_base':
+ unqualified underlying type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method bool sigc::slot_base::unblock()' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+
+ [C] 'method sigc::slot_base::~slot_base(int)' has some indirect sub-type changes:
+ implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes:
+ pointed to type 'class sigc::slot_base' changed, as reported earlier
+
[C] 'method void sigc::trackable::add_destroy_notify_callback(void*)' has some indirect sub-type changes:
implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes:
in pointed to type 'const sigc::trackable':
diff --git a/tests/data/test-diff-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 afe77511..89e9c5ce 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 (67 filtered out), 17 Added functions
+ Functions changes summary: 0 Removed, 10 Changed (89 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,26 @@
[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:
+ 10 functions with some indirect sub-type change:
+
+ [C] 'method void tbb::filter::set_end_of_input()' at pipeline.cpp:700:1 has some indirect sub-type changes:
+ implicit parameter 0 of type 'tbb::filter*' has sub-type changes:
+ in pointed to type 'class tbb::filter' at pipeline.h:65:1:
+ type size hasn't changed
+ 1 member function deletion:
+ 'method virtual tbb::filter::~filter(int)' at pipeline.cpp:698:1
+ 1 member function insertion:
+ 'method virtual tbb::filter::~filter(int)' at pipeline.cpp:688:1
+ no member function changes (4 filtered);
+ 1 data member changes (4 filtered):
+ type of 'tbb::internal::input_buffer* my_input_buffer' changed:
+ in pointed to type 'class tbb::internal::input_buffer' at pipeline.cpp:52:1:
+ type size hasn't changed
+ 1 data member change:
+ type of 'tbb::spin_mutex array_mutex' changed:
+ type size hasn't changed
+ 1 base class insertion:
+ class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
[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:
@@ -51,7 +70,16 @@
2 data member insertions:
'volatile intptr_t* my_ref_top_priority', at offset 576 (in bits) at scheduler.h:96:1
'volatile uintptr_t* my_ref_reload_epoch', at offset 640 (in bits) at scheduler.h:99:1
- 2 data member changes (2 filtered):
+ 3 data member changes (2 filtered):
+ type of 'tbb::internal::arena_slot* my_arena_slot' changed:
+ in pointed to type 'struct tbb::internal::arena_slot' at scheduler_common.h:316:1:
+ type size hasn't changed
+ 2 base class deletions:
+ struct tbb::internal::padded<tbb::internal::arena_slot_line1> at tbb_stddef.h:261:1
+ struct tbb::internal::padded<tbb::internal::arena_slot_line2> at tbb_stddef.h:261:1
+ 2 base class insertions:
+ struct tbb::internal::padded<tbb::internal::arena_slot_line1, 128ul> at tbb_stddef.h:251:1
+ struct tbb::internal::padded<tbb::internal::arena_slot_line2, 128ul> at tbb_stddef.h:251:1
type of 'tbb::internal::arena* my_arena' changed:
in pointed to type 'class tbb::internal::arena' at arena.h:160:1:
type size hasn't changed
@@ -59,6 +87,7 @@
struct tbb::internal::padded<tbb::internal::arena_base> at tbb_stddef.h:261:1
1 base class insertion:
struct tbb::internal::padded<tbb::internal::arena_base, 128ul> at tbb_stddef.h:251:1
+ no data member change (1 filtered);
type of 'tbb::internal::mail_inbox my_inbox' changed:
type size hasn't changed
1 data member change:
@@ -151,7 +180,7 @@
type of 'tbb::internal::concurrent_queue_rep* my_rep' changed:
in pointed to type 'class tbb::internal::concurrent_queue_rep' at concurrent_queue.cpp:129:1:
type size hasn't changed
- 1 data member changes (1 filtered):
+ 1 data member changes (2 filtered):
type of 'tbb::internal::concurrent_monitor items_avail' changed:
type size hasn't changed
1 data member change:
@@ -207,6 +236,14 @@
1 base class insertion:
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
+ [C] 'method tbb::thread_bound_filter::result_type tbb::thread_bound_filter::process_item()' at pipeline.cpp:712:1 has some indirect sub-type changes:
+ implicit parameter 0 of type 'tbb::thread_bound_filter*' has sub-type changes:
+ in pointed to type 'class tbb::thread_bound_filter' at pipeline.h:197:1:
+ type size hasn't changed
+ 1 base class change:
+ 'class tbb::filter' at pipeline.h:74:1 changed:
+ details were reported earlier
+
3 Removed variable symbols not referenced by debug info:
[D] _ZTVN3rml16versioned_objectE
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
index a8611476..203fd4c0 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 (68 filtered out), 17 Added functions
+ Functions changes summary: 0 Removed, 8 Changed (91 filtered out), 17 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info
@@ -24,7 +24,7 @@
[A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)' {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_}
[A] 'method void tbb::task_group_context::capture_fp_settings()' {_ZN3tbb18task_group_context19capture_fp_settingsEv}
- 7 functions with some indirect sub-type change:
+ 8 functions with some indirect sub-type change:
[C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.h:135:1 has some indirect sub-type changes:
implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes:
@@ -79,6 +79,13 @@
1 base class insertion:
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
+ [C] 'method void tbb::spin_mutex::internal_construct()' at spin_mutex.h:138:1 has some indirect sub-type changes:
+ implicit parameter 0 of type 'tbb::spin_mutex*' has sub-type changes:
+ in pointed to type 'class tbb::spin_mutex' at spin_mutex.h:40:1:
+ type size hasn't changed
+ 1 base class insertion:
+ class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
+
[C] 'method void tbb::spin_rw_mutex_v3::internal_acquire_reader()' at spin_rw_mutex.h:53:1 has some indirect sub-type changes:
implicit parameter 0 of type 'tbb::spin_rw_mutex_v3*' has sub-type changes:
in pointed to type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:42:1:
--
2.38.0.rc2
--
Dodji
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-10-10 11:56 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-10 11:56 [PATCH, applied] Bug 29650 - Caching class comparison result potentially too early Dodji Seketeli
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).