From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 145203858D28 for ; Tue, 20 Sep 2022 11:30:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 145203858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1663673431; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=W3yi9PSAlI76isyCUo1EopZxFCVeuQULxcdN8dt2kT0=; b=aoGDfId+lyoIsM9mSYpy6862QlYQNPyJe9Ifdd2K8J1y7rTjJFEQ/Tf2Q4h+WZ6LCYWuI0 kz2w7gp4q6ihpAHF4AEEiROSU7B4iJ8RVCtfQBkhobX9/Jb5Gcw++P+NTFX970qTK3QA0V 5Z2FD1itpKI6gYkMIPElPW0e8zhHphU= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-25-Y5LFRXA2Mz6oE6SIMNzHCw-1; Tue, 20 Sep 2022 07:30:30 -0400 X-MC-Unique: Y5LFRXA2Mz6oE6SIMNzHCw-1 Received: by mail-qk1-f198.google.com with SMTP id s17-20020a05620a255100b006c9cefbc68eso1691909qko.3 for ; Tue, 20 Sep 2022 04:30:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:message-id:in-reply-to:date:references :organization:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date; bh=W3yi9PSAlI76isyCUo1EopZxFCVeuQULxcdN8dt2kT0=; b=xaSX6jnD7ah6m4Zc6EK4AJZL0F4fufKt0b5GjU8ir2GH03SpA92cU7woB7KMow6N9p P/fKatPXoBjJvENDnhZbPlt3IZ20p/Fx9XHjYng7R75LM/yRyAP2mh00g6yEcQonorgQ NPiP0wPGGeotmi5CBde4BXRqVYPxwpdz6GV9XrCOOa3IqJXM61AEBuL4gjOxjEIf8cDK Dnn+mxW89higr9LmPzquRkphHambPpl7+trJSEMyLMiSSjNbZjeI+4BgNamBOdq8JqaI NtsEKTVBRpxG2jwPorwMXkMIrC5BFzshFjhq2eONv7mkRioJYBlcftvtmOXRteMv0A87 HZ7g== X-Gm-Message-State: ACrzQf1i3I9S5B8O/bqVMpJ3KGHCxp5OoUBVZRpuGoGeca5Plk5kSi89 CqcgnbjOcUZT0LP5VjjVY29z7g9eeVMqXhQUaLuszVZR2+HYAwERFAaHma21lesjHWUxHnsymrB 49bcrovtbQbjHCrM2lYFy X-Received: by 2002:a37:63d1:0:b0:6ce:5f67:47bc with SMTP id x200-20020a3763d1000000b006ce5f6747bcmr15187182qkb.682.1663673428529; Tue, 20 Sep 2022 04:30:28 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4xGEYuv8h0+aJo0SGA6DNey7wbmD3zxfQ58FNP46X9UiXqDoRjnjVPbZB/2CLbJAyr0kzeuA== X-Received: by 2002:a37:63d1:0:b0:6ce:5f67:47bc with SMTP id x200-20020a3763d1000000b006ce5f6747bcmr15187152qkb.682.1663673427899; Tue, 20 Sep 2022 04:30:27 -0700 (PDT) Received: from localhost ([88.120.130.27]) by smtp.gmail.com with ESMTPSA id m15-20020a05620a24cf00b006b8f4ade2c9sm924136qkn.19.2022.09.20.04.30.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Sep 2022 04:30:27 -0700 (PDT) Received: by localhost (Postfix, from userid 1000) id C7CD45802BD; Tue, 20 Sep 2022 13:30:25 +0200 (CEST) From: Dodji Seketeli To: libabigail@sourceware.org Cc: dodji@redhat.com Subject: [PATCH 3/4] Fix IR comparison result caching and canonical type propagation tracking Organization: Red Hat / France References: <87tu525ngh.fsf@seketeli.org> X-Operating-System: Fedora 38 X-URL: http://www.redhat.com Date: Tue, 20 Sep 2022 13:30:25 +0200 In-Reply-To: <87tu525ngh.fsf@seketeli.org> (Dodji Seketeli's message of "Tue, 20 Sep 2022 12:50:38 +0200") Message-ID: <87czbq5lm6.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hello, Caching the result of IR comparison cannot happen on IR nodes that are being compared in the context of type canonicalization if one of the nodes is the target of canonical type propagation. This is especially true if the recursive IR node which comparison "temporarily" did yield true (to avoid an infinite loop) at least until the comparison of the rest of the sub-tree of the recursive type is done. In that case, we should not cache the result the comparison as it might change later. The patch adds a way to track recursive types so that we know when not to cache their comparison result. As we now have a facility to track recursive types during canonical type propagation (rather than just types that depend on recursive types) we can be a bit more precise when confirming or cancelling types that have been subject to canonical type propagation. Also the patch cleans up the detection of comparison cycle to make it more typesafe so that the macro RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED can be used for class_decl and union_decl, not just class_or_union. It makes the code more readable/maintainable is the equals overload for class_decl and union_decl all have their proper call to RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED. The same is true for mark_types_as_being_compared. Doing that cleans up the detection of recursive types as well as the types that depends on those recursive types. * src/abg-ir-priv.h (environment::priv::recursive_types_): Define new data member. (environment::priv::cache_type_comparison_result): Cache results only non-recursive and not dependant types, or when the result is "false". In all these cases, the result, once cached, will not change. (environment::priv::mark_dependant_types_compared_until): Mark types as recursive at the same time others are marked as dependant. (environment::priv::{is_recursive_type, set_is_not_recursive}): Define new member functions. (environment::priv::{confirm_ct_propagation, cancel_ct_propagation}): Confirming canonical type propagation should happen for recursive types as well as their dependant types. * src/abg-ir.cc (return_comparison_result): Keep up with the book-keeping at all time when type canonicalization process is on-going. Whenever we expect types that depends on recursive types, expect recursive types too, obviously. (type_base::get_canonical_type_for): Do not erase the comparison result cache between the canonicalization of two different types. (is_comparison_cycle_detected) (mark_types_as_being_compared, unmark_types_as_being_compared): Define new overloads for class_decl; (equals): In the overloads for class_decl and union_decl, use RETURN_COMPARISON_RESULT and mark_types_as_being_compared without casting it to class_or_union. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt: Adjust. * tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.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 --- src/abg-ir-priv.h | 46 +++- src/abg-ir.cc | 96 ++++++-- .../test-abidiff/test-PR18791-report0.txt | 225 +++--------------- .../PR25058-liblttng-ctl-report-1.txt | 7 +- .../nss-3.23.0-1.0.fc23.x86_64-report-0.txt | 6 +- ...l7.x86_64-0.12.8-1.el7.x86_64-report-2.txt | 82 ++++++- ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt | 47 +--- ...bb-4.3-3.20141204.fc23.x86_64-report-1.txt | 13 +- 8 files changed, 251 insertions(+), 271 deletions(-) diff --git a/src/abg-ir-priv.h b/src/abg-ir-priv.h index 21734b25..b6f9354e 100644 --- a/src/abg-ir-priv.h +++ b/src/abg-ir-priv.h @@ -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(&first), - reinterpret_cast(&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(&first), + reinterpret_cast(&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(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(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(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(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(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) { diff --git a/src/abg-ir.cc b/src/abg-ir.cc index 42442791..905d1b43 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -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(l), + static_cast(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(l), + static_cast(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(l), + static_cast(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(r), k)); - RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(static_cast(l), - static_cast(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(l), - static_cast(r)); + mark_types_as_being_compared(l, r); -#define RETURN(value) \ - return return_comparison_result(static_cast(l), \ - static_cast(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(l), static_cast(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 diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt index 367929c7..9cefdfc2 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, 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 >::_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 >' changed: - type name changed from 'std::list >' to 'std::__cxx11::list >' - type size changed from 128 to 192 (in bits) - 1 base class change: - 'class std::_List_base >' changed: - type name changed from 'std::_List_base >' to 'std::__cxx11::_List_base >' - type size changed from 128 to 192 (in bits) - 1 data member change: - type of 'std::_List_base >::_List_impl _M_impl' changed: - type name changed from 'std::_List_base >::_List_impl' to 'std::__cxx11::_List_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' - 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 >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base >::_List_impl::_M_node' - and name of 'std::_List_base >::_M_impl' changed to 'std::__cxx11::_List_base >::_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 >::_List_impl' to 'std::__cxx11::_List_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' + 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 >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base >::_List_impl::_M_node' and name of 'std::_List_base >::_M_impl' changed to 'std::__cxx11::_List_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 >' changed: + type name changed from 'std::list >' to 'std::__cxx11::list >' + type size changed from 128 to 192 (in bits) + 1 base class change: + 'class std::_List_base >' changed: + type name changed from 'std::_List_base >' to 'std::__cxx11::_List_base >' + type size changed from 128 to 192 (in bits) + 1 data member change: + type of 'std::_List_base >::_List_impl _M_impl' changed: + type name changed from 'std::_List_base >::_List_impl' to 'std::__cxx11::_List_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 + and name of 'std::_List_base >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base >::_List_impl::_M_node' + and name of 'std::_List_base >::_M_impl' changed to 'std::__cxx11::_List_base >::_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': diff --git a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt index 02879fcb..328ce804 100644 --- a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt +++ b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt @@ -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*)': diff --git a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt index 546942fe..57b11a8a 100644 --- a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt +++ b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt @@ -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: diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt index 290ad869..c0e8a3e1 100644 --- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt +++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt @@ -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) 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 51341ddb..afe77511 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, 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 at tbb_stddef.h:261:1 - struct tbb::internal::padded at tbb_stddef.h:261:1 - 2 base class insertions: - struct tbb::internal::padded at tbb_stddef.h:251:1 - struct tbb::internal::padded 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 at tbb_stddef.h:261:1 1 base class insertion: struct tbb::internal::padded 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 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 a2247eb8..a8611476 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, 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: -- 2.37.2 -- Dodji