From patchwork Mon Sep 14 10:45:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dodji Seketeli X-Patchwork-Id: 40404 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 4E5643857C57; Mon, 14 Sep 2020 10:45:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4E5643857C57 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1600080358; bh=hv5F72Ls0SQqRf4d8INfYtkHjkP2D1GMBRE8KxzIIDs=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:Cc:From; b=y4lSyX358UjDTJNU1dARmkBo3QHfNkcOB0HNnF4BSscGPDr5G5aQYzlUOGP7kQ5od n/ScwlqavoVtsAVRpcJIE5r3D3CuGRn1tL37/pJkQj3irxYH0PeyKZ/FbySH9ansdF ia2fthDZGBknBgSU6jJRHJJOQRzVBf5sqgVR7lqY= X-Original-To: libabigail@sourceware.org Delivered-To: libabigail@sourceware.org Received: from us-smtp-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by sourceware.org (Postfix) with ESMTP id 273513857810 for ; Mon, 14 Sep 2020 10:45:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 273513857810 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-108-jxMF60sXOy6RMU4Pk2z-sA-1; Mon, 14 Sep 2020 06:45:51 -0400 X-MC-Unique: jxMF60sXOy6RMU4Pk2z-sA-1 Received: by mail-wr1-f69.google.com with SMTP id y3so6734860wrl.21 for ; Mon, 14 Sep 2020 03:45:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:organization:date:message-id :user-agent:mime-version; bh=hv5F72Ls0SQqRf4d8INfYtkHjkP2D1GMBRE8KxzIIDs=; b=TLYaM1O6ePtlhCGlzRLXUB7tjEK/FOV3Unt2gabBwFbgYJEZ+FNBvLoYIJax2GfI1a sOpe5X+TPElmtDXhniUjF5UcFx0A78WDso+zc3EZ/SEjxbTvnIaZqAYONy/RGoqZVZRj TG5fSNoW75fzyPYmchZCu2WPF1WjmWbBkLJob4QqN8Gf4sqI3SCS2juQUR9pCxdB4U7U NIXJjlnK+vIloVP+XcKIZjfGqStCxoZK+u+3dSsJNwPfbTZGrDyebYvpWsZ/KikdW8in muhqBo4L/q8Tlk7iQuVoSN6idBK20hjmHMCoZD90zuWnoSj5/4AFZXr7WAcglDLGOyrB fxpQ== X-Gm-Message-State: AOAM533d6ox+6P/CVc8bcEWOZdyI29DGX5SdJaYk5hMiG+fLsG9Os0C/ UynYLwrbNRUylG17LW3n1+qpiNwJku0XE8nwKMujkunZ6XuuUN1khZfN9WZNSOxUmB4HG1oYpdT ZTiALw3XUm/187rJri1g9 X-Received: by 2002:a7b:c8cc:: with SMTP id f12mr14132287wml.169.1600080349722; Mon, 14 Sep 2020 03:45:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzbdgFrg4NaYHwhlnXzyDc1pHY5bFHdw1Vi0IKYkfxxLgLZ9eSEeb1kxqzJBwGTetIsDyapGw== X-Received: by 2002:a7b:c8cc:: with SMTP id f12mr14132249wml.169.1600080349245; Mon, 14 Sep 2020 03:45:49 -0700 (PDT) Received: from localhost (91-166-131-130.subs.proxad.net. [91.166.131.130]) by smtp.gmail.com with ESMTPSA id c14sm19541926wrv.12.2020.09.14.03.45.47 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 14 Sep 2020 03:45:48 -0700 (PDT) Received: by localhost (Postfix, from userid 1000) id 2F41218008AF; Mon, 14 Sep 2020 12:45:46 +0200 (CEST) To: Giuliano Procida Subject: [PATCH] Bug 26309 - Wrong leaf reporting of changes to typedef underlying type Organization: Red Hat / France X-Operating-System: Red Hat Enterprise Linux Workstation 7.8 Beta X-URL: http://www.redhat.com Date: Mon, 14 Sep 2020 12:45:46 +0200 Message-ID: <87y2lcr605.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-10.3 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_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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 Cc: libabigail@sourceware.org Errors-To: libabigail-bounces@sourceware.org Sender: "Libabigail" Hello, In leaf mode, libabigail fails to report changes to the underlying type of a typedef. At its core, this is due to the fact that changes to the underlying type of a typedef are not considered local. As the leaf reporter only reports local changes (as opposed to non-local changes which are changes to sub-types) it doesn't detect those non-local typedef changes. To handle this, this patch makes changes to the underlying type of a typedef be considered as local changes. This is like what we already do for pointer and qualified types. Now that we have another set of changes to report in the leaf reporter, we need to handle how to propagate the category and redundancy status of those changes. The patch does this too. Also, just like we do pointer and qualified type changes, the patch avoids marking the diff node carrying the typedef change as being a leaf change. That way, only existing leaf changes carrying that typedef diff node will be reported. For instance, a function whose parameter has a typedef change will be reported because that change to the function is considered a leaf change. Otherwise, reporting the typedef (or the pointer or qualified) type change on its own is not useful unless it impacts those leaf changes that we deem useful. The patch adds the example given in problem report to the testsuite. * src/abg-ir.cc (equals): In the overload for typedef_decls, report changes to the underlying type as being local of kind LOCAL_TYPE_CHANGE_KIND. * src/abg-comparison.cc (leaf_diff_node_marker_visitor::visit_begin): Do not mark typedef diff node as leaf node. (suppression_categorization_visitor::visit_end): Propagate the 'suppressed' category of the underlying type to the parent typedef unless the later has a local non-type change. (redundancy_marking_visitor::visit_end): Likewise for the 'redundant' category. * include/abg-reporter.h (report_non_type_typedef_changes): Rename ... * src/abg-default-reporter.cc (report_non_type_typedef_changes): ... report_local_typedef_changes into this. * src/abg-leaf-reporter.cc (leaf_reporter::report): Make the leaf reporter invoke the reporting method of the default reporter for typedefs as all typedef changes are now local. * tests/data/test-diff-filter/test-PR26309-report-0.txt: Add new test reference output. * tests/data/test-diff-filter/test-PR26309-v{0,1}.o: Add new test binary input. * tests/data/test-diff-filter/test-PR26309-v{0,1}.c: Add source code for new test binary input. * tests/data/Makefile.am: Add the new text material above to source distribution. * tests/test-diff-filter.cc (in_out_specs): Add the new test input above to this test harness. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt: Adjust. Signed-off-by: Dodji Seketeli Reviewed-by: Giuliano Procida --- include/abg-reporter.h | 6 +- src/abg-comparison.cc | 67 ++++++++++------ src/abg-default-reporter.cc | 14 ++-- src/abg-ir.cc | 4 +- src/abg-leaf-reporter.cc | 4 +- tests/data/Makefile.am | 5 ++ .../test-diff-filter/test-PR26309-report-0.txt | 13 ++++ tests/data/test-diff-filter/test-PR26309-v0.c | 5 ++ tests/data/test-diff-filter/test-PR26309-v0.o | Bin 0 -> 2720 bytes tests/data/test-diff-filter/test-PR26309-v1.c | 5 ++ tests/data/test-diff-filter/test-PR26309-v1.o | Bin 0 -> 2752 bytes ...-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt | 86 +-------------------- tests/test-diff-filter.cc | 7 ++ 13 files changed, 100 insertions(+), 116 deletions(-) create mode 100644 tests/data/test-diff-filter/test-PR26309-report-0.txt create mode 100644 tests/data/test-diff-filter/test-PR26309-v0.c create mode 100644 tests/data/test-diff-filter/test-PR26309-v0.o create mode 100644 tests/data/test-diff-filter/test-PR26309-v1.c create mode 100644 tests/data/test-diff-filter/test-PR26309-v1.o diff --git a/include/abg-reporter.h b/include/abg-reporter.h index bf113f0..6aec6a6 100644 --- a/include/abg-reporter.h +++ b/include/abg-reporter.h @@ -175,9 +175,9 @@ public: const std::string& indent = "") const; void - report_local_typedef_changes(const typedef_diff &d, - std::ostream& out, - const std::string& indent) const; + report_non_type_typedef_changes(const typedef_diff &d, + std::ostream& out, + const std::string& indent) const; virtual void report(const typedef_diff& d, std::ostream& out, diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc index 7f91753..11f506f 100644 --- a/src/abg-comparison.cc +++ b/src/abg-comparison.cc @@ -10901,14 +10901,15 @@ struct leaf_diff_node_marker_visitor : public diff_node_visitor // Similarly, a *local* change describing a type that changed // its nature doesn't make sense. && !is_distinct_diff(d) - // Similarly, a pointer (or reference or array) or qualified - // type change in itself doesn't make sense. It's would - // rather make sense to show that pointer change as part of - // the variable change whose pointer type changed, for + // Similarly, a pointer (or reference or array), a typedef or + // qualified type change in itself doesn't make sense. It + // would rather make sense to show that pointer change as part + // of the variable change whose pointer type changed, for // instance. && !is_pointer_diff(d) && !is_reference_diff(d) && !is_qualified_type_diff(d) + && !is_typedef_diff(d) && !is_array_diff(d) // Similarly a parameter change in itself doesn't make sense. // It should have already been reported as part of the change @@ -11670,16 +11671,16 @@ struct suppression_categorization_visitor : public diff_node_visitor // 2/ and has no local change (unless it's a pointer, // reference or qualified diff node). // - // Note that qualified type diff nodes are a bit special. - // The local changes of the underlying type are considered - // local for the qualified type, just like for - // pointer/reference types. But then the qualified type - // itself can have local changes of its own, and those - // changes are of the kind LOCAL_NON_TYPE_CHANGE_KIND. So a - // qualified type which have local changes that are *NOT* of - // LOCAL_NON_TYPE_CHANGE_KIND (or that has no local changes - // at all) and which is in the PRIVATE_TYPE_CATEGORY or - // SUPPRESSED_CATEGORY can see these categories be + // Note that qualified type and typedef diff nodes are a bit + // special. The local changes of the underlying type are + // considered local for the qualified/typedef type, just like + // for pointer/reference types. But then the qualified or + // typedef type itself can have local changes of its own, and + // those changes are of the kind LOCAL_NON_TYPE_CHANGE_KIND. + // So a qualified type which have local changes that are + // *NOT* of LOCAL_NON_TYPE_CHANGE_KIND (or that has no local + // changes at all) and which is in the PRIVATE_TYPE_CATEGORY + // or SUPPRESSED_CATEGORY can see these categories be // propagated. // // Note that all pointer/reference diff node changes are @@ -11687,7 +11688,7 @@ struct suppression_categorization_visitor : public diff_node_visitor // pointed-to-type are considered local to the pointer itself. // // Similarly, changes local to the type of function parameters, - // variables (and data members) and classe (that are not of + // variables (and data members) and classes (that are not of // LOCAL_NON_TYPE_CHANGE_KIND kind) and that have been // suppressed can propagate their SUPPRESSED_CATEGORY-ness to // those kinds of diff node. @@ -11697,6 +11698,8 @@ struct suppression_categorization_visitor : public diff_node_visitor || is_reference_diff(d) || (is_qualified_type_diff(d) && (!(d->has_local_changes() & LOCAL_NON_TYPE_CHANGE_KIND))) + || (is_typedef_diff(d) + && (!(d->has_local_changes() & LOCAL_NON_TYPE_CHANGE_KIND))) || (is_function_decl_diff(d) && (!(d->has_local_changes() & LOCAL_NON_TYPE_CHANGE_KIND))) || (is_fn_parm_diff(d) @@ -11758,12 +11761,19 @@ struct suppression_categorization_visitor : public diff_node_visitor canonical_diff->add_to_category(SUPPRESSED_CATEGORY); } - if (// We don't propagate "private type"-ness to typedefs - // because defining "public" typedefs of private (opaque) - // types is a common idiom. So the typedef must stay - // public. - !is_typedef_diff(d) - && has_non_empty_child + // Note that the private-ness of a an underlying type won't be + // propagated to its parent typedef, by virtue of the big "if" + // clause at the beginning of this function. So we don't have + // to handle that case here. So the idiom of defining + // typedefs of private (opaque) types will be respected; + // meaning that changes to opaque underlying type will be + // flagged as private and the typedef will be flagged private + // as well, unless the typedef itself has local non-type + // changes. In the later case, changes to the typedef will be + // emitted because the typedef won't inherit the privateness + // of its underlying type. So in practise, the typedef + // remains public for the purpose of change reporting. + if (has_non_empty_child && has_private_child && !has_non_private_child) { @@ -12223,8 +12233,21 @@ struct redundancy_marking_visitor : public diff_node_visitor // in the same sense as other types. So we always // propagate redundancy to them, regardless of if they // have local changes or not. + // + // We also propagate redundancy to typedef types if + // these /only/ carry changes to their underlying + // type. + // + // Note that changes to the underlying type of a + // typedef is considered local of + // LOCAL_TYPE_CHANGE_KIND kind. The other changes to the + // typedef itself are considered local of + // LOCAL_NON_TYPE_CHANGE_KIND kind. || is_pointer_diff(d) - || is_qualified_type_diff(d))) + || is_qualified_type_diff(d) + || (is_typedef_diff(d) + && (!(d->has_local_changes() + & LOCAL_NON_TYPE_CHANGE_KIND))))) { bool has_non_redundant_child = false; bool has_non_empty_child = false; diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc index f8572f2..0b572db 100644 --- a/src/abg-default-reporter.cc +++ b/src/abg-default-reporter.cc @@ -231,7 +231,11 @@ default_reporter::report(const enum_diff& d, ostream& out, d.reported_once(true); } -/// For a @ref typedef_diff node, report the changes that are local. +/// For a @ref typedef_diff node, report the local changes to the +/// typedef rather the changes to its underlying type. +/// +/// Note that changes to the underlying type are also considered +/// local. /// /// @param d the @ref typedef_diff node to consider. /// @@ -239,9 +243,9 @@ default_reporter::report(const enum_diff& d, ostream& out, /// /// @param indent the white space string to use for indentation. void -default_reporter::report_local_typedef_changes(const typedef_diff &d, - ostream& out, - const string& indent) const +default_reporter::report_non_type_typedef_changes(const typedef_diff &d, + ostream& out, + const string& indent) const { if (!d.to_be_reported()) return; @@ -283,7 +287,7 @@ default_reporter::report(const typedef_diff& d, typedef_decl_sptr f = d.first_typedef_decl(), s = d.second_typedef_decl(); - report_local_typedef_changes(d, out, indent); + report_non_type_typedef_changes(d, out, indent); diff_sptr dif = d.underlying_type_diff(); if (dif && dif->has_changes()) diff --git a/src/abg-ir.cc b/src/abg-ir.cc index 088eebb..dbb4364 100644 --- a/src/abg-ir.cc +++ b/src/abg-ir.cc @@ -15778,9 +15778,11 @@ equals(const typedef_decl& l, const typedef_decl& r, change_kind* k) if (*l.get_underlying_type() != *r.get_underlying_type()) { + // Changes to the underlying type of a typedef are considered + // local, a bit like for pointers. result = false; if (k) - *k |= SUBTYPE_CHANGE_KIND; + *k |= LOCAL_TYPE_CHANGE_KIND; else return false; } diff --git a/src/abg-leaf-reporter.cc b/src/abg-leaf-reporter.cc index 0875c96..c2a766e 100644 --- a/src/abg-leaf-reporter.cc +++ b/src/abg-leaf-reporter.cc @@ -202,7 +202,9 @@ leaf_reporter::report(const typedef_diff& d, if (!diff_to_be_reported(&d)) return; - report_local_typedef_changes(d, out, indent); + // all changes carried by a typedef_diff are considered local, so + // let's just call the default reporter here. + default_reporter::report(d, out, indent); maybe_report_interfaces_impacted_by_diff(&d, out, indent); } diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 5e2e8b1..7334db2 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -867,6 +867,11 @@ test-diff-filter/test-PR25661-7-report-1.txt \ test-diff-filter/test-PR25661-7-report-2.txt \ test-diff-filter/test-PR25661-7-report-3.txt \ test-diff-filter/test-PR25661-7-report-4.txt \ +test-diff-filter/test-PR26309-v0.c \ +test-diff-filter/test-PR26309-v1.c \ +test-diff-filter/test-PR26309-v0.o \ +test-diff-filter/test-PR26309-v1.o \ +test-diff-filter/test-PR26309-report-0.txt \ \ test-diff-suppr/test0-type-suppr-v0.cc \ test-diff-suppr/test0-type-suppr-v1.cc \ diff --git a/tests/data/test-diff-filter/test-PR26309-report-0.txt b/tests/data/test-diff-filter/test-PR26309-report-0.txt new file mode 100644 index 0000000..dec3758 --- /dev/null +++ b/tests/data/test-diff-filter/test-PR26309-report-0.txt @@ -0,0 +1,13 @@ +Leaf changes summary: 1 artifact changed +Changed leaf types summary: 0 leaf type changed +Removed/Changed/Added functions summary: 0 Removed, 1 Changed, 0 Added function +Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable + +1 function with some sub-type change: + + [C] 'function void changed_fun(changed)' at test-PR26309-v1.c:3:1 has some sub-type changes: + parameter 1 of type 'typedef changed' changed: + underlying type 'int' changed: + type name changed from 'int' to 'long int' + type size changed from 32 to 64 (in bits) + diff --git a/tests/data/test-diff-filter/test-PR26309-v0.c b/tests/data/test-diff-filter/test-PR26309-v0.c new file mode 100644 index 0000000..853084b --- /dev/null +++ b/tests/data/test-diff-filter/test-PR26309-v0.c @@ -0,0 +1,5 @@ +typedef int changed; + +void changed_fun(changed y) { + (void) y; +} diff --git a/tests/data/test-diff-filter/test-PR26309-v0.o b/tests/data/test-diff-filter/test-PR26309-v0.o new file mode 100644 index 0000000000000000000000000000000000000000..0e6fd52dcd00da7ba74fa6c2e88907223f9a6f3c GIT binary patch literal 2720 zcmbVN-D?v;5TCtkY&16X!>>}&6BS$VF0r*GD%EKHs3=k^f-j|9l1*}&4@s`2D&mU> zz9|SI_~x_tNBB?p=!<`V&k8!Tx077A7X%k>XZE-Ao0;94-FrL#dz@MpR)((*SHN zKBk_4uwBHhw+-ZsiIdrhjGdjzj*0Q%(SwK|06Tj=b0Kqc0==DpOy*+7PGd5jxHK8f zoSG!#;-U9fCIM0@u+x#fbqM{QCf_P9l46Zhh(Ss%VsF7T_Coy1j$p6057#Rol- zS)E;&%b#;M^IlmoV0Yvn2m3ZH3mN6Q->S*VdUd0fz{%CyO_{5-D-VNQEeLaspyZc= znjbWB+INlub#oOz^p)yXf@;;R28~d5Ks$#UckVk&&RMVE%{#OCGxPa{**Rx=RaTs3 zKa6m9?%a&yHp7jUT&&5K>;z>T`kiupajUT4E}V7T8o-UErSr}-x|{j8w`jq*P_2lk zt01;U#nj&6^c&ox!-&&IP3`dI?C2|NX=K+`G>G8Dp2}$me*Q_Cv=b{9i$VWalVjsd zQnPgdn{zhoG9fj#VR!(ZTst;o2H1}bz_SDJy*qHMeLRi*L)Xh-XGzA3ueY*2$d9j* zBM?r$B!1M!A_0uE-F^c6n9OJiw3TTa9t~=e_jja z8N0e*bb$T*0Nl|yPxM!+!?gqbJqrnWbQ$v=e#R3HD#KZ9J;C&lFWRT{*a zX-lsIJ!{37jZ&kx4!&ue>WUz)WqMhtE#hbTB>W3?*zQH5*PFI0IAdaDY-upxV@8T; zdkf*D{J-h^nNRuCZD!_QLCo}t5X@@uDh*=Iv|Y!!r1)ulD0!bKKGl*L|1o0Zlk-GX zwM`x9GXq+3e3s7;PvRffhnepicEdcDFEyX%S>D}t88EtYuRdtLY5qV1g+5hjyncq? zp^~(JPQw1tYr%ZpS6YV|n|!~~;EG---RtxUnSA;u=Gj9CzH9I(4PuS=jUn=z#4qUl KKe3^fCjT$}O}BFZ literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-filter/test-PR26309-v1.c b/tests/data/test-diff-filter/test-PR26309-v1.c new file mode 100644 index 0000000..5f453a3 --- /dev/null +++ b/tests/data/test-diff-filter/test-PR26309-v1.c @@ -0,0 +1,5 @@ +typedef long changed; + +void changed_fun(changed y) { + (void) y; +} diff --git a/tests/data/test-diff-filter/test-PR26309-v1.o b/tests/data/test-diff-filter/test-PR26309-v1.o new file mode 100644 index 0000000000000000000000000000000000000000..4b9339a5972c97a595ff6555ddaf82efea0f975e GIT binary patch literal 2752 zcmbtW-D?v;5TDJqHX0jJ>sP7Z35qRvmwr=~)@W_5A4sVRf=In2o8&aPNOIMxh%ZI( zO+iq>H~#^j{0ID71RwQH@Ihzpc9QG%M9_iTnfcAv?q+s3&layNrGx+`0rSw+7)8FL zD;Gks0E4gxZY;m}vi#!dkK3P%i1vh*beLdUmR+GS8dAiBn8i`1dr1jHg(Q)PoyGg! zMr>|jP_hqD7>Phai;;`>2nPi0PLE)HV0qmaqWqa8Ck;>=KFIX*oNYI%MD`C7A~^5tgvu9vTRLB8%4 z-J(}@y?S1!%v1h$zU&5WDB5MOQn4#uJy5NL+PVr{xO&4{u%?_@XWE(=8=oGVnV7Uj zR#n+rc7q7FCr^%Ab|YB#)m&Bis^yhXbz7y{+{WyTJu_w5Re%c%3#Y6ROgH-XY|+a1 zMhwK`RS+9FF}%Ak{Svq85aRR^g&Tb~n|q#G=-;u34iTIg2Ch|D(t=r+*GTIM?;q`#`-A`VA82 z;Lsrkr`T?T(^7TUDXZdob^=@ZIz!7AGnJ4j*_BWXs ze;ggCZ~irY9AnL#RFms--w{S+`qJY;PgeoIIHjYf5WZ=U`ida#ae8=&=I}Ff68@0} zq-zoDjHd4jT1%+|V5U1fd=9@a6?aXg& zxeOTHzE|&byy<>N1N09mPP~4`UZaq-e}#noqgRCEd0%NAW^Ky-R)Z^gp>*HV>tx2$ gZ(^Q3gy5?N50erj-ZzFQZ&LhCJ^v5vsJR*c8;XItO#lD@ literal 0 HcmV?d00001 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-3.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt index aaf28bf..3e50dc7 100644 --- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt +++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt @@ -1,6 +1,6 @@ ================ changes of 'libspice-server.so.1.8.0'=============== -Leaf changes summary: 11 artifacts changed (11 filtered out) - Changed leaf types summary: 2 (11 filtered out) leaf types changed +Leaf changes summary: 10 artifacts changed (10 filtered out) + Changed leaf types summary: 1 (10 filtered out) leaf types changed Removed/Changed/Added functions summary: 1 Removed, 0 Changed, 8 Added functions Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable @@ -120,87 +120,5 @@ Leaf changes summary: 11 artifacts changed (11 filtered out) function int spice_server_set_zlib_glz_compression(SpiceServer*, spice_wan_compression_t) function void spice_server_vm_start(SpiceServer*) function void spice_server_vm_stop(SpiceServer*) - 'typedef spice_image_compression_t at spice.h:479:1' changed: - typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1 - 79 impacted interfaces: - function void spice_qxl_add_memslot(QXLInstance*, QXLDevMemSlot*) - function void spice_qxl_add_memslot_async(QXLInstance*, QXLDevMemSlot*, uint64_t) - function void spice_qxl_create_primary_surface(QXLInstance*, uint32_t, QXLDevSurfaceCreate*) - function void spice_qxl_create_primary_surface_async(QXLInstance*, uint32_t, QXLDevSurfaceCreate*, uint64_t) - function void spice_qxl_del_memslot(QXLInstance*, uint32_t, uint32_t) - function void spice_qxl_destroy_primary_surface(QXLInstance*, uint32_t) - function void spice_qxl_destroy_primary_surface_async(QXLInstance*, uint32_t, uint64_t) - function void spice_qxl_destroy_surface_async(QXLInstance*, uint32_t, uint64_t) - function void spice_qxl_destroy_surface_wait(QXLInstance*, uint32_t) - function void spice_qxl_destroy_surfaces(QXLInstance*) - function void spice_qxl_destroy_surfaces_async(QXLInstance*, uint64_t) - function void spice_qxl_driver_unload(QXLInstance*) - function void spice_qxl_flush_surfaces_async(QXLInstance*, uint64_t) - function void spice_qxl_loadvm_commands(QXLInstance*, QXLCommandExt*, uint32_t) - function void spice_qxl_monitors_config_async(QXLInstance*, QXLPHYSICAL, int, uint64_t) - function void spice_qxl_oom(QXLInstance*) - function void spice_qxl_reset_cursor(QXLInstance*) - function void spice_qxl_reset_image_cache(QXLInstance*) - function void spice_qxl_reset_memslots(QXLInstance*) - function void spice_qxl_set_max_monitors(QXLInstance*, unsigned int) - function void spice_qxl_start(QXLInstance*) - function void spice_qxl_stop(QXLInstance*) - function void spice_qxl_update_area(QXLInstance*, uint32_t, QXLRect*, QXLRect*, uint32_t, uint32_t) - function void spice_qxl_update_area_async(QXLInstance*, uint32_t, QXLRect*, uint32_t, uint64_t) - function void spice_qxl_wakeup(QXLInstance*) - function int spice_server_add_client(SpiceServer*, int, int) - function int spice_server_add_interface(SpiceServer*, SpiceBaseInstance*) - function int spice_server_add_renderer(SpiceServer*, const char*) - function int spice_server_add_ssl_client(SpiceServer*, int, int) - function void spice_server_char_device_wakeup(SpiceCharDeviceInstance*) - function void spice_server_destroy(SpiceServer*) - function spice_image_compression_t spice_server_get_image_compression(SpiceServer*) - function int spice_server_get_num_clients(SpiceServer*) - function int spice_server_get_peer_info(SpiceServer*, sockaddr*, socklen_t*) - function int spice_server_get_sock_info(SpiceServer*, sockaddr*, socklen_t*) - function int spice_server_init(SpiceServer*, SpiceCoreInterface*) - function int spice_server_is_server_mouse(SpiceServer*) - function int spice_server_migrate_connect(SpiceServer*, const char*, int, int, const char*) - function int spice_server_migrate_end(SpiceServer*, int) - function int spice_server_migrate_info(SpiceServer*, const char*, int, int, const char*) - function int spice_server_migrate_start(SpiceServer*) - function int spice_server_migrate_switch(SpiceServer*) - function SpiceServer* spice_server_new() - function void spice_server_playback_get_buffer(SpicePlaybackInstance*, uint32_t**, uint32_t*) - function void spice_server_playback_put_samples(SpicePlaybackInstance*, uint32_t*) - function void spice_server_playback_set_mute(SpicePlaybackInstance*, uint8_t) - function void spice_server_playback_set_volume(SpicePlaybackInstance*, uint8_t, uint16_t*) - function void spice_server_playback_start(SpicePlaybackInstance*) - function void spice_server_playback_stop(SpicePlaybackInstance*) - function void spice_server_port_event(SpiceCharDeviceInstance*, uint8_t) - function uint32_t spice_server_record_get_samples(SpiceRecordInstance*, uint32_t*, uint32_t) - function void spice_server_record_set_mute(SpiceRecordInstance*, uint8_t) - function void spice_server_record_set_volume(SpiceRecordInstance*, uint8_t, uint16_t*) - function void spice_server_record_start(SpiceRecordInstance*) - function void spice_server_record_stop(SpiceRecordInstance*) - function void spice_server_set_addr(SpiceServer*, const char*, int) - function int spice_server_set_agent_copypaste(SpiceServer*, int) - function int spice_server_set_agent_file_xfer(SpiceServer*, int) - function int spice_server_set_agent_mouse(SpiceServer*, int) - function int spice_server_set_channel_security(SpiceServer*, const char*, int) - function int spice_server_set_compat_version(SpiceServer*, spice_compat_version_t) - function int spice_server_set_exit_on_disconnect(SpiceServer*, int) - function int spice_server_set_image_compression(SpiceServer*, spice_image_compression_t) - function int spice_server_set_jpeg_compression(SpiceServer*, spice_wan_compression_t) - function int spice_server_set_listen_socket_fd(SpiceServer*, int) - function void spice_server_set_name(SpiceServer*, const char*) - function int spice_server_set_noauth(SpiceServer*) - function int spice_server_set_playback_compression(SpiceServer*, int) - function int spice_server_set_port(SpiceServer*, int) - function int spice_server_set_sasl(SpiceServer*, int) - function int spice_server_set_sasl_appname(SpiceServer*, const char*) - function void spice_server_set_seamless_migration(SpiceServer*, int) - function int spice_server_set_streaming_video(SpiceServer*, int) - function int spice_server_set_ticket(SpiceServer*, const char*, int, int, int) - function int spice_server_set_tls(SpiceServer*, int, const char*, const char*, const char*, const char*, const char*, const char*) - function void spice_server_set_uuid(SpiceServer*, const uint8_t*) - function int spice_server_set_zlib_glz_compression(SpiceServer*, spice_wan_compression_t) - function void spice_server_vm_start(SpiceServer*) - function void spice_server_vm_stop(SpiceServer*) ================ end of changes of 'libspice-server.so.1.8.0'=============== diff --git a/tests/test-diff-filter.cc b/tests/test-diff-filter.cc index bdf7d41..b3b1e91 100644 --- a/tests/test-diff-filter.cc +++ b/tests/test-diff-filter.cc @@ -766,6 +766,13 @@ InOutSpec in_out_specs[] = "data/test-diff-filter/test-PR25661-7-report-4.txt", "output/test-diff-filter/test-PR25661-7-report-4.txt", }, + { + "data/test-diff-filter/test-PR26309-v0.o", + "data/test-diff-filter/test-PR26309-v1.o", + "--no-default-suppression --leaf-changes-only", + "data/test-diff-filter/test-PR26309-report-0.txt", + "output/test-diff-filter/test-PR26309-report-0.txt", + }, // This should be the last entry {NULL, NULL, NULL, NULL, NULL} };