The Git repository of the Libabigail Project
Go to file
Dodji Seketeli a125607873 Bug 30971 - Wrong interpretation of "has_data_member_inserted_at"
Consider the following construct:

    struct foo
    {
      long x;
      long y;
    };

Then change one of the types (but keep the size the same):

    struct foo
    {
      long x;
      unsigned long y;
    };

If I abidiff this with no suppressions, I get:

      [C] 'struct foo' changed:
	type size hasn't changed
	1 data member change:
	  type of 'long int y' changed:
	    type name changed from 'long int' to 'unsigned long int'
	    type size hasn't changed

However, it seems like if I add any struct suppression involving data member
insertions, it filters out the change. For example:

    [suppress_type]
	    type_kind = struct
	    has_data_member_inserted_at = offset_of(not_present)

The "not_present" member isn't in "struct foo", so I would expect the diff to
still be emitted, but it is not:

    Functions changes summary: 0 Removed, 0 Changed, 0 Added function
    Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
    Unreachable types summary: 0 removed, 0 changed (1 filtered out), 0 added type

This is because during the evaluation of the
"has_data_member_inserted_at" property, we fail to take into account
that if no data member got inserted, evaluation of the
"has_data_member_inserted_at" predicate is falsified, and thus, the
type suppression is falsified.

While looking at this, I also realized that when a data member
replaces another one, we fail to consider that change as a data member
insertion and so the evaluation of the "has_data_member_inserted_at"
predicate is wrongly falsified.

This patch fixes these two related issues.

	* include/abg-comparison.h
	(class_or_union_diff::changed_data_members): Declare new accessor.
	function.
	* src/abg-comparison.cc
	(class_or_union_diff::changed_data_members): Define new accessor.
	function.
	* src/abg-suppression.cc (type_suppression::suppresses_diff): If
	the type suppression specification contains a
	has_data_member_inserted_* property and yet the class contains no
	data member inserted or replacing an existing one, then the type
	suppression is falsified in the context of the current change.
	Also, when a data member replaces an existing one, consider that
	as an insertion for which the has_data_member_inserted_* predicate
	should be evaluated.  Stop considering deleted data members
	because considering replaced data member is really what we meant.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.[1-3].txt:
	New reference test output files.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.txt:
	Likewise.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-{2,3}-v{0,1}.o:
	New input test binaries.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-{2,3}-v{0,1}.c:
	Source code of the new input test binaries.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-2.2.suppr:
	New input test suppression specification.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-2.suppr: Likewise.
	* tests/data/Makefile.am: Add the new test material above to
	source distribution.
	* tests/test-diff-suppr.cc (in_out_specs): Add the test input
	above to this test harness.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
Tested-by: John Moon <quic_johmoo@quicinc.com>
2023-10-17 10:32:38 +02:00
.github Adding missing newline to build-container workflow 2022-05-17 09:46:16 +02:00
autoconf-archive Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
bash-completion Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
doc doc/manuals/libabigail-concepts.rst: Fix typo 2023-10-05 17:09:45 +02:00
docker Add github actions to support workflows 2022-05-17 00:13:40 +02:00
include Bug 30971 - Wrong interpretation of "has_data_member_inserted_at" 2023-10-17 10:32:38 +02:00
m4 Delete ltsugar.m4 and pkg.m4 files from m4/ 2015-01-06 09:54:45 +01:00
relicensing-scripts Bug 27512 - Remove broken zip-archive support 2021-03-19 10:52:57 +01:00
scripts Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
src Bug 30971 - Wrong interpretation of "has_data_member_inserted_at" 2023-10-17 10:32:38 +02:00
tests Bug 30971 - Wrong interpretation of "has_data_member_inserted_at" 2023-10-17 10:32:38 +02:00
tools abipkgdiff: Avoid comparing binaries that are outside of the package 2023-09-07 15:23:38 +02:00
.clang-format Tweak clang-format configuration 2021-10-19 12:59:18 +02:00
.gitignore .gitignore: Add libabigail-?.* *.orig files 2019-05-22 14:34:23 +02:00
.mailmap Add '.mailmap' 2021-12-17 20:12:20 +01:00
abigail.m4 Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
ABIXML-FORMAT-VERSIONS Bug 28450 - Fix cloned member function handling in DWARF 2021-11-12 18:31:28 +01:00
AUTHORS Initial AUTHORS and README 2013-02-28 13:25:20 +01:00
ChangeLog Update ChangeLog for 2.3 release 2023-04-27 11:53:10 +02:00
COMMIT-LOG-GUIDELINES Update the COMMIT-LOG-GUIDELINES file 2016-05-22 23:20:12 +02:00
COMPILING Improve some grammar 2022-02-25 11:24:20 +01:00
configure.ac configure,test-diff-pkg.cc: Handle symlinks presence in dist tarball 2023-09-20 13:07:30 +02:00
CONTRIBUTING Improve some grammar 2022-02-25 11:24:20 +01:00
default.abignore Re-license the project to Apache v2 With LLVM Exception 2020-12-02 11:49:13 +01:00
gen-changelog.py Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
install-sh Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
libabigail.pc.in Make libxml2 a private dependency wrt pkconfig 2013-08-22 17:41:29 +02:00
license-change-2020.txt Add a license-change-2020.txt file 2020-12-02 11:50:22 +01:00
LICENSE.txt Add the LICENSE.txt file 2020-12-02 11:49:33 +01:00
ltmain.sh Replace individual license references with SPDX Identifiers 2020-12-02 11:44:13 +01:00
Makefile.am Use xz as the default tarball compression format 2022-11-18 13:06:09 +01:00
NEWS NEWS: Update for 2.3 release 2023-04-27 11:55:38 +02:00
README Improve some grammar 2022-02-25 11:24:20 +01:00
README-DOCKER.md Add github actions to support workflows 2022-05-17 00:13:40 +02:00
release-text-template.txt release-text-template.txt: Modernize a little bit. 2023-05-10 16:29:55 +02:00
update-copyright.sh Update copyright year for 2023 2023-01-01 18:19:30 +01:00
VISIBILITY Improve some grammar 2022-02-25 11:24:20 +01:00

This is the Application Binary Interface Generic Analysis and
Instrumentation Library.

It aims at constructing, manipulating, serializing and de-serializing
ABI-relevant artifacts.

The set of artifacts that we are intersted is made of quantities like
types, variable, functions and declarations of a given library or
program.  For a given library or program this set of quantities is
called an ABI corpus.

This library aims at (among other things) providing a way to compare
two ABI Corpora (apparently the plural of corpus is copora, heh,
that's cool), provide detailed information about their differences,
and help build tools to infer interesting conclusions about these
differences.

You are welcome to contribute to this project after reading the files
CONTRIBUTING and COMMIT-LOG-GUIDELINES files in the source tree.

Communicating with the maintainers of this project -- including
sending patches to be include to the source code -- happens via email
at libabigail@sourceware.org.