From patchwork Tue Mar 24 17:13:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 39053 From: gprocida@google.com (Giuliano Procida) Date: Tue, 24 Mar 2020 17:13:44 +0000 Subject: [RFC] Fix has_net_changes for leaf-changes-only mode. Message-ID: <20200324171344.258865-1-gprocida@google.com> * Which other functions need the same treatment? * Should something else change instead? * What about tracking of changed types (inclusion of these in summary stats and exit code for leaf mode)? This patch breaks tests and is not suitable for applying in its current form. The issue we saw is that anonymous struct name changes triggered hundreds of diffs (mostly but not all filtered out in non-leaf mode which may be its own bug). * src/abg-comparison.cc (corpus_diff::has_net_changes): In leaf-changes-only mode, check leaf changes to functions and variables to avoid returning non-zero exit code with empty output. Signed-off-by: Giuliano Procida --- src/abg-comparison.cc | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc index 46bf9e30..7756c12b 100644 --- a/src/abg-comparison.cc +++ b/src/abg-comparison.cc @@ -10602,21 +10602,26 @@ corpus_diff::has_net_changes() const const diff_stats& stats = const_cast(this)-> apply_filters_and_suppressions_before_reporting(); + bool leaf = context()->show_leaf_changes_only(); return (architecture_changed() - || soname_changed() - || stats.net_num_func_changed() - || stats.net_num_vars_changed() - || stats.net_num_func_added() - || stats.net_num_added_func_syms() - || stats.net_num_func_removed() - || stats.net_num_removed_func_syms() - || stats.net_num_vars_added() - || stats.net_num_added_var_syms() - || stats.net_num_vars_removed() - || stats.net_num_removed_var_syms() - || stats.net_num_added_unreachable_types() - || stats.net_num_removed_unreachable_types() - || stats.net_num_changed_unreachable_types()); + || soname_changed() + || (leaf + ? stats.net_num_leaf_func_changes() + : stats.net_num_func_changed()) + || (leaf + ? stats.net_num_leaf_var_changes() + : stats.net_num_vars_changed()) + || stats.net_num_func_added() + || stats.net_num_added_func_syms() + || stats.net_num_func_removed() + || stats.net_num_removed_func_syms() + || stats.net_num_vars_added() + || stats.net_num_added_var_syms() + || stats.net_num_vars_removed() + || stats.net_num_removed_var_syms() + || stats.net_num_added_unreachable_types() + || stats.net_num_removed_unreachable_types() + || stats.net_num_changed_unreachable_types()); } /// Apply the different filters that are registered to be applied to