From patchwork Mon Oct 10 11:56:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dodji Seketeli X-Patchwork-Id: 58582 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2B4B43858016 for ; Mon, 10 Oct 2022 11:56:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2B4B43858016 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1665403015; bh=C5aR1ft7I1QSSEnNmBQWNT0tHZPrVA6XqExW0PJcAGA=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:From; b=ACfJzWP45y8JUshskw+M3aL6yB3GFuq0ZT5uPuRNwqsUbU/LFq0dvMqBu7wIOnEzU 7XQKgGmHRpk050u06rV8fHJIKyj8+08ziJ9GOvt3llCuNSEyh0JiklBX25l3Bd8IxR pdwOn27dEDwMg0y/S0JES286fXoebwmrAiywQC0o= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org 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 2F204385840A for ; Mon, 10 Oct 2022 11:56:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2F204385840A Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-649-QCc4niiRPq-ezNvgyZlN0Q-1; Mon, 10 Oct 2022 07:56:45 -0400 X-MC-Unique: QCc4niiRPq-ezNvgyZlN0Q-1 Received: by mail-wm1-f70.google.com with SMTP id t20-20020a7bc3d4000000b003c6bfea856aso244564wmj.1 for ; Mon, 10 Oct 2022 04:56:45 -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:date:organization:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=C5aR1ft7I1QSSEnNmBQWNT0tHZPrVA6XqExW0PJcAGA=; b=BGtrfqJUa6xDTXuPibFefacGkhLkOeBsThrXaiSQ5KjeZAZTRbCXrLzD8rSDQLg1fp 2TzLW+MQ8ywkluisXkRJrk3Lq8GBB9mUbfIscLE5k5j5REDvY4y6CLvQJDRt+pMoF3Qg VuOOXhnhgxVV7fq4UHAqpc2PPgtqZH8Z6mG3aF3zu2syWRAuGD0iEphOSZ2apSpErP3c JiGSWhi0K3onnFwiJnTNUS+8Mbgwp+OyEH1IqgnXDsCCyxWx4VquiLMfo4dSyiKsGd5i IWVyCLP3iKC7YNOWQaJ/buEPic3MnXKg4jpOJ3tygJ8JfImXXJVpp16nTkGtaXmxZbUb v3Kw== X-Gm-Message-State: ACrzQf34VkfiC8iaDgbE54l91AC+WEk8sdz1tY4nVGPTaPKIpE4FURkO Tp2sHveg9epUMnW1u3xfrDSQBk2pcJmcc8xtgbEG4PJmGg/znKbBXRxpNsredK8K3TqIQAj5lBi EvQImA5ZFyhSygYrCXtFlJ5qmKjUSi1CNATqjIQ9DPXO1fRwAEL6Nqm1AItflhPHEPYid X-Received: by 2002:adf:f2c8:0:b0:22e:223a:330e with SMTP id d8-20020adff2c8000000b0022e223a330emr11100547wrp.8.1665403003865; Mon, 10 Oct 2022 04:56:43 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4q+goGM71cRfIOFdFIBz9ugD2HY02NzvOWpnCatjL7FycFjn9AByXJOtFMgYgYBajjyApk3A== X-Received: by 2002:adf:f2c8:0:b0:22e:223a:330e with SMTP id d8-20020adff2c8000000b0022e223a330emr11100514wrp.8.1665403003079; Mon, 10 Oct 2022 04:56:43 -0700 (PDT) Received: from localhost ([88.120.130.27]) by smtp.gmail.com with ESMTPSA id j6-20020a05600c190600b003a601a1c2f7sm16516648wmq.19.2022.10.10.04.56.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Oct 2022 04:56:42 -0700 (PDT) Received: by localhost (Postfix, from userid 1000) id CFF79581C53; Mon, 10 Oct 2022 13:56:41 +0200 (CEST) To: libabigail@sourceware.org Subject: [PATCH, applied] Bug 29650 - Caching class comparison result potentially too early Organization: Red Hat / France X-Operating-System: Fedora 38 X-URL: http://www.redhat.com Date: Mon, 10 Oct 2022 13:56:41 +0200 Message-ID: <87y1tn28p2.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 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 X-BeenThere: libabigail@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Mailing list of the Libabigail project List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: Dodji Seketeli via Libabigail From: Dodji Seketeli Reply-To: Dodji Seketeli Errors-To: libabigail-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libabigail" Hello, When structurally comparing two classes T and T' the overload of the equals() function for abigail::ir::class_decl calls the overload of equals() for abigail::ir::class_or_union to compare the data members of the class. If data members are equal, that later call caches the result of comparing the data-members-only sub-object of T and T'. That caching appears as if it's the result of comparing all of T and T' that was cached, leading to misleading results down the road. Result caching should not take place until the end of fulling comparing T and T'. Fixed thus. * src/abg-ir.cc (equal): In the overload of class_or_union do not cache the result comparing just the data members sub-types of of classes. In the overload for class_decl, put cycle detection management code /after/ the call to equals for class_or_union, because that called function does perform the cycle detection management as well; otherwise, that introduces an unwarranted redundancy. In the overload of equals for union_decl, cache the result of the comparison. * tests/data/test-abidiff/test-PR18791-report0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt: Adjust. * tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt: Adjust. Signed-off-by: Dodji Seketeli --- src/abg-ir.cc | 55 ++--- .../test-abidiff/test-PR18791-report0.txt | 225 +++++++++++++++--- ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt | 45 +++- ...bb-4.3-3.20141204.fc23.x86_64-report-1.txt | 11 +- 4 files changed, 263 insertions(+), 73 deletions(-) diff --git a/src/abg-ir.cc b/src/abg-ir.cc index 381437c7..2cb74339 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -22251,16 +22251,6 @@ equals(const class_or_union& l, const class_or_union& r, change_kind* k) RETURN(val); } - { - // First of all, let's see if these two types haven't already been - // compared. If so, and if the result of the comparison has been - // cached, let's just re-use it, rather than comparing them all - // over again. - bool result = false; - if (l.get_environment()->priv_->is_type_comparison_cached(l, r, result)) - return result; - } - // No need to go further if the classes have different names or // different size / alignment. if (!(l.decl_base::operator==(r) && l.type_base::operator==(r))) @@ -22382,17 +22372,6 @@ equals(const class_or_union& l, const class_or_union& r, change_kind* k) } } - // We are done comparing these two types and we have a full - // understanding of how they might be different, if they are. Let's - // cache the result of this comparison -- in case we are asked in a - // very near future to compare them again. - // - // TODO: If further profiling shows its necessity, maybe we should - // perform this caching also on the earlier return points of this - // function. That would basically mean to redefine the RETURN macro - // to make it perform this caching for us. - l.get_environment()->priv_->cache_type_comparison_result(l, r, result); - RETURN(result); #undef RETURN } @@ -23824,8 +23803,6 @@ equals(const class_decl& l, const class_decl& r, change_kind* k) static_cast(r), k)); - RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r); - bool had_canonical_type = !!r.get_naked_canonical_type(); bool result = true; if (!equals(static_cast(l), @@ -23837,10 +23814,6 @@ equals(const class_decl& l, const class_decl& r, change_kind* k) ABG_RETURN(result); } - mark_types_as_being_compared(l, r); - -#define RETURN(value) return return_comparison_result(l, r, value); - // If comparing the class_or_union 'part' of the type led to // canonical type propagation, then cancel that because it's too // early to do that at this point. We still need to compare bases @@ -23848,6 +23821,12 @@ equals(const class_decl& l, const class_decl& r, change_kind* k) if (!had_canonical_type) maybe_cancel_propagated_canonical_type(r); + RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r); + + mark_types_as_being_compared(l, r); + +#define RETURN(value) return return_comparison_result(l, r, value); + // Compare bases. if (l.get_base_specifiers().size() != r.get_base_specifiers().size()) { @@ -24961,8 +24940,15 @@ union_decl::~union_decl() bool equals(const union_decl& l, const union_decl& r, change_kind* k) { - - RETURN_TRUE_IF_COMPARISON_CYCLE_DETECTED(l, r); + { + // First of all, let's see if these two types haven't already been + // compared. If so, and if the result of the comparison has been + // cached, let's just re-use it, rather than comparing them all + // over again. + bool result = false; + if (l.get_environment()->priv_->is_type_comparison_cached(l, r, result)) + return result; + } #define RETURN(value) \ return return_comparison_result(l, r, value); @@ -24973,6 +24959,17 @@ equals(const union_decl& l, const union_decl& r, change_kind* k) mark_types_as_being_compared(l, r); + // We are done comparing these two types and we have a full + // understanding of how they might be different, if they are. Let's + // cache the result of this comparison -- in case we are asked in a + // very near future to compare them again. + // + // TODO: If further profiling shows its necessity, maybe we should + // perform this caching also on the earlier return points of this + // function. That would basically mean to redefine the RETURN macro + // to make it perform this caching for us. + l.get_environment()->priv_->cache_type_comparison_result(l, r, result); + RETURN(result); } diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt index 44df096e..61635682 100644 --- a/tests/data/test-abidiff/test-PR18791-report0.txt +++ b/tests/data/test-abidiff/test-PR18791-report0.txt @@ -1,4 +1,4 @@ -Functions changes summary: 1 Removed, 36 Changed, 1 Added functions +Functions changes summary: 1 Removed, 60 Changed, 1 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable 1 Removed function: @@ -9,7 +9,113 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable [A] 'method void std::__cxx11::_List_base >::_M_clear()' -36 functions with some indirect sub-type change: +60 functions with some indirect sub-type change: + + [C] 'method bool sigc::connection::block(bool)' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::connection*' has sub-type changes: + in pointed to type 'struct sigc::connection': + type size hasn't changed + 1 data member change: + type of 'sigc::slot_base* slot_' changed: + in pointed to type 'class sigc::slot_base': + type size hasn't changed + 1 data member change: + type of 'sigc::slot_base::rep_type* rep_' changed: + in pointed to type 'typedef sigc::slot_base::rep_type': + underlying type 'struct sigc::internal::slot_rep' changed: + type size hasn't changed + 1 base class change: + 'struct sigc::trackable' changed: + type size hasn't changed + 1 data member change: + type of 'sigc::internal::trackable_callback_list* callback_list_' changed: + in pointed to type 'struct sigc::internal::trackable_callback_list': + type size changed from 192 to 256 (in bits) + 2 data member changes: + type of 'sigc::internal::trackable_callback_list::callback_list callbacks_' changed: + underlying type 'class std::list >' 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 [C] 'method void sigc::internal::signal_impl::block(bool)' has some indirect sub-type changes: implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes: @@ -28,16 +134,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable type name changed from 'std::_List_base >::_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) + 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' @@ -56,6 +153,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable typedef name changed from std::list >::iterator to std::__cxx11::list >::iterator implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes: pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier + parameter 1 of type 'const sigc::slot_base&' has sub-type changes: + in referenced type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier [C] 'method sigc::internal::signal_impl::iterator_type sigc::internal::signal_impl::erase(sigc::internal::signal_impl::iterator_type)' has some indirect sub-type changes: return type changed: @@ -68,6 +168,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable underlying type 'typedef std::list >::iterator' changed, as reported earlier implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes: pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier + parameter 2 of type 'const sigc::slot_base&' has sub-type changes: + in referenced type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier [C] 'method sigc::internal::signal_impl::signal_impl()' has some indirect sub-type changes: implicit parameter 0 of type 'sigc::internal::signal_impl*' has sub-type changes: @@ -87,31 +190,12 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier [C] 'method void sigc::internal::slot_rep::disconnect()' has some indirect sub-type changes: - implicit parameter 0 of type 'sigc::internal::slot_rep*' changed: - in pointed to type 'struct sigc::internal::slot_rep': + implicit parameter 0 of type 'sigc::internal::slot_rep*' has sub-type changes: + pointed to type 'struct sigc::internal::slot_rep' changed, as reported earlier [C] 'method void sigc::internal::trackable_callback_list::add_callback(void*)' has some indirect sub-type changes: implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes: - in pointed to type 'struct sigc::internal::trackable_callback_list': - type size changed from 192 to 256 (in bits) - 2 data member changes: - type of 'sigc::internal::trackable_callback_list::callback_list callbacks_' changed: - underlying type 'class std::list >' 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) + pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier [C] 'method void sigc::internal::trackable_callback_list::clear()' has some indirect sub-type changes: implicit parameter 0 of type 'sigc::internal::trackable_callback_list*' has sub-type changes: @@ -131,10 +215,7 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable type size hasn't changed 1 base class change: 'struct sigc::trackable' changed: - type size hasn't changed - 1 data member change: - type of 'sigc::internal::trackable_callback_list* callback_list_' changed: - pointed to type 'struct sigc::internal::trackable_callback_list' changed, as reported earlier + details were reported earlier 1 data member change: type of 'sigc::internal::signal_impl* impl_' changed: pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier @@ -153,6 +234,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes: pointed to type 'struct sigc::signal_base' changed, as reported earlier + parameter 1 of type 'const sigc::slot_base&' has sub-type changes: + in referenced type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier [C] 'method sigc::signal_base::iterator_type sigc::signal_base::erase(sigc::signal_base::iterator_type)' has some indirect sub-type changes: return type changed: @@ -172,6 +256,9 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes: pointed to type 'struct sigc::signal_base' changed, as reported earlier + parameter 2 of type 'const sigc::slot_base&' has sub-type changes: + in referenced type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier [C] 'method sigc::signal_base& sigc::signal_base::operator=(const sigc::signal_base&)' has some indirect sub-type changes: return type changed: @@ -206,6 +293,68 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable implicit parameter 0 of type 'sigc::signal_base*' has sub-type changes: pointed to type 'struct sigc::signal_base' changed, as reported earlier + [C] 'method void sigc::slot_base::add_destroy_notify_callback(void*)' has some indirect sub-type changes: + implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes: + in pointed to type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method bool sigc::slot_base::block(bool)' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method void sigc::slot_base::disconnect()' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method bool sigc::slot_base::operator bool()' has some indirect sub-type changes: + implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes: + in pointed to type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method sigc::slot_base& sigc::slot_base::operator=(const sigc::slot_base&)' has some indirect sub-type changes: + return type changed: + referenced type 'class sigc::slot_base' changed, as reported earlier + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + parameter 1 of type 'const sigc::slot_base&' has sub-type changes: + in referenced type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method void sigc::slot_base::remove_destroy_notify_callback(void*)' has some indirect sub-type changes: + implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes: + in pointed to type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method void sigc::slot_base::set_parent(void*)' has some indirect sub-type changes: + implicit parameter 0 of type 'const sigc::slot_base*' has sub-type changes: + in pointed to type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method sigc::slot_base::slot_base(sigc::slot_base::rep_type*)' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + parameter 1 of type 'sigc::slot_base::rep_type*' has sub-type changes: + pointed to type 'typedef sigc::slot_base::rep_type' changed, as reported earlier + + [C] 'method sigc::slot_base::slot_base()' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method sigc::slot_base::slot_base(const sigc::slot_base&)' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + parameter 1 of type 'const sigc::slot_base&' has sub-type changes: + in referenced type 'const sigc::slot_base': + unqualified underlying type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method bool sigc::slot_base::unblock()' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + + [C] 'method sigc::slot_base::~slot_base(int)' has some indirect sub-type changes: + implicit parameter 0 of type 'sigc::slot_base*' has sub-type changes: + pointed to type 'class sigc::slot_base' changed, as reported earlier + [C] 'method void sigc::trackable::add_destroy_notify_callback(void*)' has some indirect sub-type changes: implicit parameter 0 of type 'const sigc::trackable*' has sub-type changes: in pointed to type 'const sigc::trackable': diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt index afe77511..89e9c5ce 100644 --- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt +++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt @@ -1,5 +1,5 @@ ================ changes of 'libtbb.so.2'=============== - Functions changes summary: 0 Removed, 8 Changed (67 filtered out), 17 Added functions + Functions changes summary: 0 Removed, 10 Changed (89 filtered out), 17 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info @@ -24,7 +24,26 @@ [A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)' {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_} [A] 'method void tbb::task_group_context::capture_fp_settings()' {_ZN3tbb18task_group_context19capture_fp_settingsEv} - 8 functions with some indirect sub-type change: + 10 functions with some indirect sub-type change: + + [C] 'method void tbb::filter::set_end_of_input()' at pipeline.cpp:700:1 has some indirect sub-type changes: + implicit parameter 0 of type 'tbb::filter*' has sub-type changes: + in pointed to type 'class tbb::filter' at pipeline.h:65:1: + type size hasn't changed + 1 member function deletion: + 'method virtual tbb::filter::~filter(int)' at pipeline.cpp:698:1 + 1 member function insertion: + 'method virtual tbb::filter::~filter(int)' at pipeline.cpp:688:1 + no member function changes (4 filtered); + 1 data member changes (4 filtered): + type of 'tbb::internal::input_buffer* my_input_buffer' changed: + in pointed to type 'class tbb::internal::input_buffer' at pipeline.cpp:52:1: + type size hasn't changed + 1 data member change: + type of 'tbb::spin_mutex array_mutex' changed: + type size hasn't changed + 1 base class insertion: + class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1 [C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.h:135:1 has some indirect sub-type changes: implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes: @@ -51,7 +70,16 @@ 2 data member insertions: 'volatile intptr_t* my_ref_top_priority', at offset 576 (in bits) at scheduler.h:96:1 'volatile uintptr_t* my_ref_reload_epoch', at offset 640 (in bits) at scheduler.h:99:1 - 2 data member changes (2 filtered): + 3 data member changes (2 filtered): + type of 'tbb::internal::arena_slot* my_arena_slot' changed: + in pointed to type 'struct tbb::internal::arena_slot' at scheduler_common.h:316:1: + type size hasn't changed + 2 base class deletions: + struct tbb::internal::padded 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 type of 'tbb::internal::arena* my_arena' changed: in pointed to type 'class tbb::internal::arena' at arena.h:160:1: type size hasn't changed @@ -59,6 +87,7 @@ struct tbb::internal::padded 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: @@ -151,7 +180,7 @@ type of 'tbb::internal::concurrent_queue_rep* my_rep' changed: in pointed to type 'class tbb::internal::concurrent_queue_rep' at concurrent_queue.cpp:129:1: type size hasn't changed - 1 data member changes (1 filtered): + 1 data member changes (2 filtered): type of 'tbb::internal::concurrent_monitor items_avail' changed: type size hasn't changed 1 data member change: @@ -207,6 +236,14 @@ 1 base class insertion: class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1 + [C] 'method tbb::thread_bound_filter::result_type tbb::thread_bound_filter::process_item()' at pipeline.cpp:712:1 has some indirect sub-type changes: + implicit parameter 0 of type 'tbb::thread_bound_filter*' has sub-type changes: + in pointed to type 'class tbb::thread_bound_filter' at pipeline.h:197:1: + type size hasn't changed + 1 base class change: + 'class tbb::filter' at pipeline.h:74:1 changed: + details were reported earlier + 3 Removed variable symbols not referenced by debug info: [D] _ZTVN3rml16versioned_objectE diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt index a8611476..203fd4c0 100644 --- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt +++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt @@ -1,5 +1,5 @@ ================ changes of 'libtbb.so.2'=============== - Functions changes summary: 0 Removed, 7 Changed (68 filtered out), 17 Added functions + Functions changes summary: 0 Removed, 8 Changed (91 filtered out), 17 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info Variable symbols changes summary: 3 Removed, 0 Added variable symbols not referenced by debug info @@ -24,7 +24,7 @@ [A] 'method void tbb::internal::concurrent_queue_base_v8::move_content(tbb::internal::concurrent_queue_base_v8&)' {_ZN3tbb8internal24concurrent_queue_base_v812move_contentERS1_} [A] 'method void tbb::task_group_context::capture_fp_settings()' {_ZN3tbb18task_group_context19capture_fp_settingsEv} - 7 functions with some indirect sub-type change: + 8 functions with some indirect sub-type change: [C] 'method tbb::task& tbb::internal::allocate_root_with_context_proxy::allocate(std::size_t) const' at task.h:135:1 has some indirect sub-type changes: implicit parameter 0 of type 'const tbb::internal::allocate_root_with_context_proxy*' has sub-type changes: @@ -79,6 +79,13 @@ 1 base class insertion: class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1 + [C] 'method void tbb::spin_mutex::internal_construct()' at spin_mutex.h:138:1 has some indirect sub-type changes: + implicit parameter 0 of type 'tbb::spin_mutex*' has sub-type changes: + in pointed to type 'class tbb::spin_mutex' at spin_mutex.h:40:1: + type size hasn't changed + 1 base class insertion: + class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1 + [C] 'method void tbb::spin_rw_mutex_v3::internal_acquire_reader()' at spin_rw_mutex.h:53:1 has some indirect sub-type changes: implicit parameter 0 of type 'tbb::spin_rw_mutex_v3*' has sub-type changes: in pointed to type 'class tbb::spin_rw_mutex_v3' at spin_rw_mutex.h:42:1: