libabigail/tests
Dodji Seketeli a746f4afee Make applying supp specs through pointer access look through typedefs
Consider the declaration of the exported function bar() below:

    struct _OpaqueType {int member;};

    typedef struct _OpaqueType Type;

    void bar(Type*);

Once the *definition of struct _OpaqueType and bar() are compiled into
a shared library, if a layout change happens to struct _OpaqueType,
then abidiff rightfully reports that bar() is impacted by the layout
change to struct _OpaqueType.

But then, the following suppression specification won't silence the
ABI change report:

    [suppress_type]
      name = _OpaqueType
      type_kind = struct
      accessed_through = pointer

This is because strictly speaking, it's not struct _OpaqueType that is
accessed through a pointer, from function bar(); it's the type 'Type',
(which is a typedef of struct _OpaqueType) that is accessed though a
pointer.

But then, as 'Type' and 'struct _OpaqueType' are the same type (modulo
the typedef), this behaviour is not super useful.  It would be more
interesting if the suppression specification could silence the ABI
change report.

And this is what this patch does.

	* include/abg-comparison.h (type_suppression::suppresses_type):
	Declare new member function.
	(get_typedef_diff_underlying_type_diff): Declare new function.
	* include/abg-fwd.h (get_typedef_underlying_type): Likewise.
	* src/abg-comparison.cc (type_suppression::suppresses_type):
	Define new member function.
	(get_typedef_diff_underlying_type_diff): Define new function.
	(type_suppression::suppresses_diff): After looking through the
	different kind of access methods, use the new
	type_suppression::suppresses_type(), rather than doing lots of
	stuff ourselves here.  But then, if the suppression doesn't apply
	to the subjects of the diff, look through typedefs and try to
	apply the suppression again.
	* src/abg-ir.cc (get_typedef_underlying_type): Define new
	function.
	* tests/data/test-diff-suppr/libtest25-typedef-v{0,1}.so: New
	binary test input files.
	* tests/data/test-diff-suppr/test25-typedef-v{0,1}.c: Source code
	for the binary test input files above.
	* tests/data/test-diff-suppr/test25-typedef-report-{0, 1}.txt: New test
	input files.
	* tests/data/test-diff-suppr/test25-typedef-suppr-0.txt: New test
	input file.
	* tests/data/Makefile.am: Add the new test material to the source
	distribution.
	* tests/test-diff-suppr.cc (in_out_specs): Add the test inputs
	above to the set of test inputs this harness has to run over.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2015-08-01 14:34:46 +02:00
..
data Make applying supp specs through pointer access look through typedefs 2015-08-01 14:34:46 +02:00
Makefile.am Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
print-diff-tree.cc Handle the life time of the map of canonical types 2015-07-09 11:12:40 +02:00
runtestcanonicalizetypes.sh.in
test-abicompat.cc Fix type synthesis to fix abicompat weak mode 2015-07-20 17:11:32 +02:00
test-abidiff.cc
test-alt-dwarf-file.cc
test-core-diff.cc
test-diff2.cc
test-diff-dwarf.cc Handle the life time of the map of canonical types 2015-07-09 11:12:40 +02:00
test-diff-filter.cc Fix redundancy marking for change of types used directly 2015-06-03 12:13:54 +02:00
test-diff-pkg.cc Add regression tests for abipkgdiff tool 2015-07-17 10:10:21 +02:00
test-diff-suppr.cc Make applying supp specs through pointer access look through typedefs 2015-08-01 14:34:46 +02:00
test-dot.cc
test-ir-walker.cc Handle the life time of the map of canonical types 2015-07-09 11:12:40 +02:00
test-lookup-syms.cc
test-read-dwarf.cc Handle the life time of the map of canonical types 2015-07-09 11:12:40 +02:00
test-read-write.cc Handle the life time of the map of canonical types 2015-07-09 11:12:40 +02:00
test-svg.cc
test-utils.cc
test-utils.h
test-write-read-archive.cc