@@ -419,6 +419,7 @@ struct environment::priv
// the canonical type propagation is cancelled, the canonical types
// must be cleared.
pointer_set types_with_non_confirmed_propagated_ct_;
+ pointer_set recursive_types_;
#ifdef WITH_DEBUG_SELF_COMPARISON
// This is used for debugging purposes.
// When abidw is used with the option --debug-abidiff, some
@@ -518,11 +519,19 @@ struct environment::priv
void
cache_type_comparison_result(T& first, T& second, bool r)
{
- if (allow_type_comparison_results_caching())
- type_comparison_results_cache_.emplace
- (std::make_pair(reinterpret_cast<uint64_t>(&first),
- reinterpret_cast<uint64_t>(&second)),
- r);
+ if (allow_type_comparison_results_caching()
+ && (r == false
+ ||
+ (!is_recursive_type(&first)
+ && !is_recursive_type(&second)
+ && !is_type(&first)->priv_->depends_on_recursive_type()
+ && !is_type(&second)->priv_->depends_on_recursive_type())))
+ {
+ type_comparison_results_cache_.emplace
+ (std::make_pair(reinterpret_cast<uint64_t>(&first),
+ reinterpret_cast<uint64_t>(&second)),
+ r);
+ }
}
/// Retrieve the result of comparing two sub-types from the cache,
@@ -749,9 +758,30 @@ struct environment::priv
result |=
mark_dependant_types(right,
right_type_comp_operands_);
+ recursive_types_.insert(reinterpret_cast<uintptr_t>(right));
return result;
}
+ /// Test if a type is a recursive one.
+ ///
+ /// @param t the type to consider.
+ ///
+ /// @return true iff @p t is recursive.
+ bool
+ is_recursive_type(const type_base* t)
+ {
+ return (recursive_types_.find(reinterpret_cast<uintptr_t>(t))
+ != recursive_types_.end());
+ }
+
+
+ /// Unflag a type as being recursive
+ ///
+ /// @param t the type to unflag
+ void
+ set_is_not_recursive(const type_base* t)
+ {recursive_types_.erase(reinterpret_cast<uintptr_t>(t));}
+
/// Propagate the canonical type of a type to another one.
///
/// @param src the type to propagate the canonical type from.
@@ -786,7 +816,8 @@ struct environment::priv
for (auto i : types_with_non_confirmed_propagated_ct_)
{
type_base *t = reinterpret_cast<type_base*>(i);
- ABG_ASSERT(t->priv_->depends_on_recursive_type());
+ ABG_ASSERT(t->get_environment()->priv_->is_recursive_type(t)
+ || t->priv_->depends_on_recursive_type());
t->priv_->set_does_not_depend_on_recursive_type(dependant_type);
if (!t->priv_->depends_on_recursive_type())
to_remove.insert(i);
@@ -858,7 +889,8 @@ struct environment::priv
for (auto i : to_remove)
{
type_base *t = reinterpret_cast<type_base*>(i);
- ABG_ASSERT(t->priv_->depends_on_recursive_type());
+ ABG_ASSERT(t->get_environment()->priv_->is_recursive_type(t)
+ || t->priv_->depends_on_recursive_type());
type_base_sptr canonical = t->priv_->canonical_type.lock();
if (canonical)
{
@@ -382,7 +382,9 @@ bool
mark_dependant_types_compared_until(const type_base &r)
{
const environment * env = r.get_environment();
- return env->priv_->mark_dependant_types_compared_until(&r);
+ if (env->do_on_the_fly_canonicalization())
+ return env->priv_->mark_dependant_types_compared_until(&r);
+ return false;
}
/// @brief the location of a token represented in its simplest form.
@@ -920,6 +922,22 @@ is_comparison_cycle_detected(T& l, T& r)
return result ;
}
+/// Detect if a recursive comparison cycle is detected while
+/// structurally comparing two @ref class_decl types.
+///
+/// @param l the left-hand-side operand of the current comparison.
+///
+/// @param r the right-hand-side operand of the current comparison.
+///
+/// @return true iff a comparison cycle is detected.
+template<>
+bool
+is_comparison_cycle_detected(const class_decl& l, const class_decl& r)
+{
+ return is_comparison_cycle_detected(static_cast<const class_or_union&>(l),
+ static_cast<const class_or_union&>(r));
+}
+
/// This macro is to be used while comparing composite types that
/// might recursively refer to themselves. Comparing two such types
/// might get us into a cyle.
@@ -968,6 +986,22 @@ mark_types_as_being_compared(T& l, T&r)
push_composite_type_comparison_operands(l, r);
}
+/// Mark a pair of @ref class_decl types as being compared.
+///
+/// This is helpful to later detect recursive cycles in the comparison
+/// stack.
+///
+/// @param l the left-hand-side operand of the comparison.
+///
+/// @parm r the right-hand-side operand of the comparison.
+template<>
+void
+mark_types_as_being_compared(const class_decl& l, const class_decl &r)
+{
+ return mark_types_as_being_compared(static_cast<const class_or_union&>(l),
+ static_cast<const class_or_union&>(r));
+}
+
/// Mark a pair of types as being not compared anymore.
///
/// This is helpful to later detect recursive cycles in the comparison
@@ -987,6 +1021,26 @@ unmark_types_as_being_compared(T& l, T&r)
pop_composite_type_comparison_operands(l, r);
}
+/// Mark a pair of @ref class_decl types as being not compared
+/// anymore.
+///
+/// This is helpful to later detect recursive cycles in the comparison
+/// stack.
+///
+/// Note that the types must have been passed to
+/// mark_types_as_being_compared prior to calling this function.
+///
+/// @param l the left-hand-side operand of the comparison.
+///
+/// @parm r the right-hand-side operand of the comparison.
+template<>
+void
+unmark_types_as_being_compared(const class_decl& l, const class_decl &r)
+{
+ return unmark_types_as_being_compared(static_cast<const class_or_union&>(l),
+ static_cast<const class_or_union&>(r));
+}
+
/// Return the result of the comparison of two (sub) types.
///
/// The function does the necessary book keeping before returning the
@@ -1020,7 +1074,7 @@ return_comparison_result(T& l, T& r, bool value,
unmark_types_as_being_compared(l, r);
const environment* env = l.get_environment();
- if (propagate_canonical_type && env->do_on_the_fly_canonicalization())
+ if (env->do_on_the_fly_canonicalization())
// We are instructed to perform the "canonical type propagation"
// optimization, making 'r' to possibly get the canonical type of
// 'l' if it has one. This mostly means that we are currently
@@ -1028,8 +1082,8 @@ return_comparison_result(T& l, T& r, bool value,
// the 'r' argument.
{
if (value == true
- && is_type(&r)->priv_->depends_on_recursive_type()
- && !env->priv_->right_type_comp_operands_.empty()
+ && (is_type(&r)->priv_->depends_on_recursive_type()
+ || env->priv_->is_recursive_type(&r))
&& is_type(&r)->priv_->canonical_type_propagated())
{
// Track the object 'r' for which the propagated canonical
@@ -1048,10 +1102,12 @@ return_comparison_result(T& l, T& r, bool value,
// sub-types that were compared during the comparison of
// 'r'.
env->priv_->confirm_ct_propagation(&r);
- if (is_type(&r)->priv_->depends_on_recursive_type())
+ if (is_type(&r)->priv_->depends_on_recursive_type()
+ || env->priv_->is_recursive_type(&r))
{
is_type(&r)->priv_->set_does_not_depend_on_recursive_type();
env->priv_->remove_from_types_with_non_confirmed_propagated_ct(&r);
+ env->priv_->set_is_not_recursive(&r);
}
}
else if (value == false)
@@ -1062,7 +1118,8 @@ return_comparison_result(T& l, T& r, bool value,
// should see their tentatively propagated canonical type
// cancelled.
env->priv_->cancel_ct_propagation(&r);
- if (is_type(&r)->priv_->depends_on_recursive_type())
+ if (is_type(&r)->priv_->depends_on_recursive_type()
+ || env->priv_->is_recursive_type(&r))
{
// The right-hand-side operand cannot carry any tentative
// canonical type at this point.
@@ -14051,10 +14108,10 @@ compare_types_during_canonicalization(const type_base_sptr& canonical_type,
if (env->debug_type_canonicalization_is_on())
{
bool canonical_equality = false, structural_equality = false;
- env->priv_->use_canonical_type_comparison_ = true;
- canonical_equality = canonical_type == candidate_type;
env->priv_->use_canonical_type_comparison_ = false;
structural_equality = canonical_type == candidate_type;
+ env->priv_->use_canonical_type_comparison_ = true;
+ canonical_equality = canonical_type == candidate_type;
if (canonical_equality != structural_equality)
{
std::cerr << "structural & canonical equality different for type: "
@@ -14208,7 +14265,6 @@ type_base::get_canonical_type_for(type_base_sptr t)
// the decl-only-class-being-equal-to-a-matching-definition
// flags.
env->priv_->allow_type_comparison_results_caching(false);
- env->priv_->clear_type_comparison_results_cache();
env->do_on_the_fly_canonicalization(false);
env->decl_only_class_equals_definition
(saved_decl_only_class_equals_definition);
@@ -23626,8 +23682,7 @@ 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(static_cast<const class_or_union&>(l),
- static_cast<const class_or_union&>(r));
+ RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r);
bool had_canonical_type = !!r.get_naked_canonical_type();
bool result = true;
@@ -23640,13 +23695,9 @@ equals(const class_decl& l, const class_decl& r, change_kind* k)
ABG_RETURN(result);
}
- mark_types_as_being_compared(static_cast<const class_or_union&>(l),
- static_cast<const class_or_union&>(r));
+ mark_types_as_being_compared(l, r);
-#define RETURN(value) \
- return return_comparison_result(static_cast<const class_or_union&>(l), \
- static_cast<const class_or_union&>(r), \
- value);
+#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
@@ -24768,10 +24819,19 @@ 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);
+
+#define RETURN(value) \
+ return return_comparison_result(l, r, value);
+
bool result = equals(static_cast<const class_or_union&>(l),
static_cast<const class_or_union&>(r),
k);
- ABG_RETURN(result);
+
+ mark_types_as_being_compared(l, r);
+
+ RETURN(result);
}
/// Copy a method of a @ref union_decl into a new @ref
@@ -1,4 +1,4 @@
-Functions changes summary: 1 Removed, 60 Changed, 1 Added functions
+Functions changes summary: 1 Removed, 36 Changed, 1 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
1 Removed function:
@@ -9,113 +9,7 @@ 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()'
-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
+36 functions with some indirect sub-type change:
[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:
@@ -134,7 +28,16 @@ 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, as reported earlier
+ 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::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'
@@ -150,9 +53,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
[C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::connect(const sigc::slot_base&)' has some indirect sub-type changes:
implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
- 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:
implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes:
@@ -161,9 +61,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
[C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::insert(sigc::internal::signal_impl::iterator_type, const sigc::slot_base&)' has some indirect sub-type changes:
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:
@@ -183,12 +80,31 @@ 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*' has sub-type changes:
- pointed to type 'struct sigc::internal::slot_rep' changed, as reported earlier
+ implicit parameter 0 of type 'sigc::internal::slot_rep*' changed:
+ in pointed to type 'struct sigc::internal::slot_rep':
[C] 'method void sigc::internal::trackable_callback_list::add_callback(void*)' has some indirect sub-type changes:
implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes:
- pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier
+ 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)
[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:
@@ -208,7 +124,10 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
type size hasn't changed
1 base class change:
'struct sigc::trackable' changed:
- details were reported earlier
+ 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
1 data member change:
type of 'sigc::internal::signal_impl* impl_' changed:
pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
@@ -225,9 +144,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
[C] 'method sigc::signal_base::iterator_type sigc::signal_base::connect(const sigc::slot_base&)' has some indirect sub-type changes:
implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
pointed to type 'struct sigc::signal_base' changed, as reported earlier
- parameter 1 of type 'const sigc::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:
implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes:
@@ -243,9 +159,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
[C] 'method sigc::signal_base::iterator_type sigc::signal_base::insert(sigc::signal_base::iterator_type, const sigc::slot_base&)' has some indirect sub-type changes:
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:
@@ -280,68 +193,6 @@ 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':
@@ -89,7 +89,12 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
parameter 1 of type 'lttng_action*' has sub-type changes:
in pointed to type 'struct lttng_action':
type size hasn't changed
- 2 data member changes:
+ 3 data member changes:
+ type of 'action_validate_cb validate' changed:
+ underlying type 'bool (lttng_action*)*' changed:
+ in pointed to type 'function type bool (lttng_action*)':
+ parameter 1 of type 'lttng_action*' has sub-type changes:
+ pointed to type 'struct lttng_action' changed, as being reported
type of 'action_serialize_cb serialize' changed:
underlying type 'typedef ssize_t (lttng_action*, char*)*' changed:
in pointed to type 'function type typedef ssize_t (lttng_action*, char*)':
@@ -68,7 +68,7 @@
================ end of changes of 'libssl3.so'===============
================ changes of 'libsmime3.so'===============
- Functions changes summary: 0 Removed, 1 Changed (127 filtered out), 0 Added functions
+ Functions changes summary: 0 Removed, 1 Changed (146 filtered out), 0 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
1 function with some indirect sub-type change:
@@ -82,12 +82,12 @@
type of 'NSSCMSContent content' changed:
underlying type 'union NSSCMSContentUnion' at cmst.h:118:1 changed:
type size hasn't changed
- 1 data member changes (3 filtered):
+ 1 data member changes (4 filtered):
type of 'NSSCMSEncryptedData* encryptedData' changed:
in pointed to type 'typedef NSSCMSEncryptedData' at cmst.h:65:1:
underlying type 'struct NSSCMSEncryptedDataStr' at cmst.h:468:1 changed:
type size hasn't changed
- 1 data member changes (1 filtered):
+ 1 data member changes (2 filtered):
type of 'NSSCMSAttribute** unprotectedAttr' changed:
in pointed to type 'NSSCMSAttribute*':
in pointed to type 'typedef NSSCMSAttribute' at cmst.h:69:1:
@@ -29,7 +29,87 @@
in pointed to type 'typedef QXLState' at spice-qxl.h:35:1:
underlying type 'struct QXLState' at reds.h:93:1 changed:
type size hasn't changed
- 1 data member change:
+ 2 data member changes:
+ type of 'QXLInterface* qif' changed:
+ in pointed to type 'typedef QXLInterface' at spice-qxl.h:33:1:
+ underlying type 'struct QXLInterface' at spice.h:230:1 changed:
+ type size hasn't changed
+ 15 data member changes:
+ type of 'void (QXLInstance*, QXLWorker*)* attache_worker' changed:
+ in pointed to type 'function type void (QXLInstance*, QXLWorker*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, int)* set_compression_level' changed:
+ in pointed to type 'function type void (QXLInstance*, int)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, typedef uint32_t)* set_mm_time' changed:
+ in pointed to type 'function type void (QXLInstance*, typedef uint32_t)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, QXLDevInitInfo*)* get_init_info' changed:
+ in pointed to type 'function type void (QXLInstance*, QXLDevInitInfo*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'int (QXLInstance*, QXLCommandExt*)* get_command' changed:
+ in pointed to type 'function type int (QXLInstance*, QXLCommandExt*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'int (QXLInstance*)* req_cmd_notification' changed:
+ in pointed to type 'function type int (QXLInstance*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, struct QXLReleaseInfoExt)* release_resource' changed:
+ in pointed to type 'function type void (QXLInstance*, struct QXLReleaseInfoExt)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'int (QXLInstance*, QXLCommandExt*)* get_cursor_command' changed:
+ in pointed to type 'function type int (QXLInstance*, QXLCommandExt*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'int (QXLInstance*)* req_cursor_notification' changed:
+ in pointed to type 'function type int (QXLInstance*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, typedef uint32_t)* notify_update' changed:
+ in pointed to type 'function type void (QXLInstance*, typedef uint32_t)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'int (QXLInstance*)* flush_resources' changed:
+ in pointed to type 'function type int (QXLInstance*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, typedef uint64_t)* async_complete' changed:
+ in pointed to type 'function type void (QXLInstance*, typedef uint64_t)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, typedef uint32_t, QXLRect*, typedef uint32_t)* update_area_complete' changed:
+ in pointed to type 'function type void (QXLInstance*, typedef uint32_t, QXLRect*, typedef uint32_t)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'void (QXLInstance*, typedef uint8_t, uint8_t*)* set_client_capabilities' changed:
+ in pointed to type 'function type void (QXLInstance*, typedef uint8_t, uint8_t*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
+ type of 'int (QXLInstance*, VDAgentMonitorsConfig*)* client_monitors_config' changed:
+ in pointed to type 'function type int (QXLInstance*, VDAgentMonitorsConfig*)':
+ parameter 1 of type 'QXLInstance*' has sub-type changes:
+ in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1:
+ underlying type 'struct QXLInstance' changed, as being reported
type of 'RedDispatcher* dispatcher' changed:
in pointed to type 'struct RedDispatcher' at red_dispatcher.c:55:1:
type size changed from 3264 to 3328 (in bits)
@@ -1,5 +1,5 @@
================ changes of 'libtbb.so.2'===============
- Functions changes summary: 0 Removed, 10 Changed (92 filtered out), 17 Added functions
+ Functions changes summary: 0 Removed, 8 Changed (67 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,26 +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}
- 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
+ 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:
@@ -70,16 +51,7 @@
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
- 3 data member changes:
- 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
+ 2 data member changes (2 filtered):
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
@@ -87,7 +59,6 @@
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:
@@ -180,7 +151,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 (2 filtered):
+ 1 data member changes (1 filtered):
type of 'tbb::internal::concurrent_monitor items_avail' changed:
type size hasn't changed
1 data member change:
@@ -221,7 +192,6 @@
type size hasn't changed
1 base class insertion:
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
- no data member change (1 filtered);
[C] 'method void tbb::queuing_rw_mutex::internal_construct()' at queuing_rw_mutex.h:146:1 has some indirect sub-type changes:
implicit parameter 0 of type 'tbb::queuing_rw_mutex*' has sub-type changes:
@@ -229,7 +199,6 @@
type size hasn't changed
1 base class insertion:
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
- no data member change (1 filtered);
[C] 'method void tbb::recursive_mutex::internal_construct()' at recursive_mutex.h:224:1 has some indirect sub-type changes:
implicit parameter 0 of type 'tbb::recursive_mutex*' has sub-type changes:
@@ -238,14 +207,6 @@
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
@@ -1,5 +1,5 @@
================ changes of 'libtbb.so.2'===============
- Functions changes summary: 0 Removed, 8 Changed (94 filtered out), 17 Added functions
+ Functions changes summary: 0 Removed, 7 Changed (68 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}
- 8 functions with some indirect sub-type change:
+ 7 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:
@@ -64,7 +64,6 @@
type size hasn't changed
1 base class insertion:
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
- no data member change (1 filtered);
[C] 'method void tbb::queuing_rw_mutex::internal_construct()' at queuing_rw_mutex.h:146:1 has some indirect sub-type changes:
implicit parameter 0 of type 'tbb::queuing_rw_mutex*' has sub-type changes:
@@ -72,7 +71,6 @@
type size hasn't changed
1 base class insertion:
class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
- no data member change (1 filtered);
[C] 'method void tbb::recursive_mutex::internal_construct()' at recursive_mutex.h:224:1 has some indirect sub-type changes:
implicit parameter 0 of type 'tbb::recursive_mutex*' has sub-type changes:
@@ -81,13 +79,6 @@
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: