[applied] Improve harmless integral type change filtering

Message ID 87a563q0ri.fsf@redhat.com
State New
Headers
Series [applied] Improve harmless integral type change filtering |

Commit Message

Dodji Seketeli June 19, 2025, 2:11 p.m. UTC
  Hello,

While looking at something else, I noticed that a number of benign
integral type name changes (where the size/alignment of the type
didn't change) were not being filtered out by default.  Filtering them
correctly would improve the regression tests like:

	--- a/tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt
	+++ b/tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt
	@@ -1,5 +1,5 @@
	 Functions changes summary: 0 Removed, 0 Changed, 0 Added function
	-Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
	+Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables

	 1 variable with incompatible sub-type changes:

	@@ -12,13 +12,3 @@ Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
	       1 data member change:
		 'char m1' offset changed from 32 to 128 (in bits) (by +96 bits)

	-1 Changed variable:
	-
	-  [C] 'S1 v1' was changed at test-changed-var-1-v1.cc:16:1:
	-    type of variable changed:
	-      type size hasn't changed
	-      1 data member change:
	-        type of 'int m1' changed:
	-          type name changed from 'int' to 'unsigned int'
	-          type size hasn't changed
	-

Or:

    --- a/tests/data/test-abidiff-exit/PR30048-test-report-0.txt
    +++ b/tests/data/test-abidiff-exit/PR30048-test-report-0.txt
    @@ -14,12 +14,6 @@ Variables changes summary: 0 Removed, 1 Changed, 0 Added variable
	     'int (* f04)(int* restrict)', at offset 192 (in bits) at PR30048-test-v0.c:5:1
	     'int (* f05)(const int* restrict)', at offset 256 (in bits) at PR30048-test-v0.c:6:1
	   2 data member changes:
    -        type of 'int (* f06)(int* restrict const)' changed:
    -          in pointed to type 'function type int (int* restrict const)':
    -        and offset changed from 320 to 0 (in bits) (by -320 bits)
    -        type of 'int (* f07)(int* restrict const)' changed:
    -          in pointed to type 'function type int (int* restrict const)':
    -            parameter 1 of type 'int* restrict const' changed:
    -              'int* restrict const' changed to 'int* const restrict'
    -        and offset changed from 384 to 64 (in bits) (by -320 bits)
    +        'int (* f06)(int* restrict const)' offset changed from 320 to 0 (in bits) (by -320 bits)
    +        'int (* f07)(int* restrict const)' offset changed from 384 to 64 (in bits) (by -320 bits)

That would have a positive impact on how distinct entities (entities of
different kinds) changes are reported, just like:

	--- a/tests/data/test-diff-dwarf/test4-report.txt
	+++ b/tests/data/test-diff-dwarf/test4-report.txt
	@@ -5,6 +5,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

	   [C] 'function void foo(C0)' has some indirect sub-type changes:
	     parameter 1 of type 'class C0' has sub-type changes:
	-      entity changed from 'class C0' to 'typedef c0_type'
	+      entity changed from 'class C0' to compatible type 'typedef c0_type'
	       type size hasn't changed

This patch thus simplifies the logic of
integral_type_has_harmless_name_change by making it consider the name
change of an integral type that keeps the same size and alignment as
being benign.

The patch fixes a thinko that I noticed in classes_have_same_layout
and improves the detection of compatible changes involving diff
subjects that are entities of distinct kinds and compatible changes in
general.

Regression tests are updated accordingly.

	* src/abg-comparison.cc (distinct_diff::compatible_child_diff):
	Simplify and fix logic.  If the diff subjects are entities are of
	distinct kind and if they are compatible types then make this node
	describe the actual changes between the peeled down subjects.
	* src/abg-default-reporter.cc (default_reporter::report): In the
	overload for const distinct_diff, do not report the child diff
	node describing the peeled down changes to avoid endless
	recursion.
	* src/abg-ir.cc (classes_have_same_layout): Fix a thinko in the
	detection of compatible method types.
	(integral_type_has_harmless_name_change): Simplify and fix
	logic. Two integral types of the same size/alignment but with
	different names are considered as a harmless change.  Note that
	for types with empty names, for now, detecting if they are
	integral types is broken.  So let's consider them as integral for
	now.  This will have to be changed when the DWARF reader is fixed
	for better handling the case of integral types detection.
	* tests/data/test-abidiff-exit/PR30048-test-report-0.txt: Adjust.
	* tests/data/test-abidiff-exit/btf/test0-report-2.txt: Likewise.
	* tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt:
	Likewise
	* tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt:
	Likewise.
	* tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt:
	Likewise.
	* tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt:
	Likewise.
	* tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt:
	Likewise.
	* tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt:
	Likewise.
	* tests/data/test-abidiff-exit/test-loc-with-locs-report.txt:
	Likewise.
	* tests/data/test-abidiff-exit/test-loc-without-locs-report.txt:
	Likewise.
	* tests/data/test-diff-dwarf/test2-report.txt: Likewise.
	* tests/data/test-diff-dwarf/test4-report.txt: Likewise.
	* tests/data/test-diff-dwarf/test5-report.txt: Likewise.
	* tests/data/test-diff-filter/test18-report.txt: Likewise.
	* tests/data/test-diff-filter/test24-compatible-vars-report-1.txt:
	Likewise.
	* tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt:
	Likewise.
	* tests/data/test-diff-filter/test36-report-0.txt: Likewise.
	* tests/data/test-diff-filter/test5-2-report.txt: Likewise.
	* tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt: Likewise.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.1.txt:
	Likewise.
	* tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.txt:
	Likewise.
	* tests/test-abidiff-exit.cc (in_out_specs): Now that several
	benign integral type changes are considered harmless, adjust the
	expected result of the tests.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
Applied to the mainline.
---
 src/abg-comparison.cc                         | 21 +++++++-------
 src/abg-default-reporter.cc                   |  5 +---
 src/abg-ir.cc                                 | 29 +++++++------------
 .../PR30048-test-report-0.txt                 | 10 ++-----
 .../test-abidiff-exit/btf/test0-report-2.txt  |  2 +-
 .../qualifier-typedef-array-report-1.txt      | 20 ++++++-------
 ...test-allow-type-region-v0--v1-report-1.txt |  5 +---
 ...test-allow-type-region-v0--v4-report-1.txt | 15 ++--------
 ...test-allow-type-region-v0--v5-report-1.txt | 15 ++--------
 ...test-allow-type-region-v0--v5-report-2.txt |  3 --
 .../test-changed-var-1-report-1.txt           | 12 +-------
 .../test-loc-with-locs-report.txt             |  9 +-----
 .../test-loc-without-locs-report.txt          |  9 +-----
 tests/data/test-diff-dwarf/test2-report.txt   |  2 ++
 tests/data/test-diff-dwarf/test4-report.txt   |  2 +-
 tests/data/test-diff-dwarf/test5-report.txt   |  2 +-
 tests/data/test-diff-filter/test18-report.txt | 13 +--------
 .../test24-compatible-vars-report-1.txt       |  1 +
 ...t-and-filtered-children-nodes-report-2.txt |  4 +++
 .../data/test-diff-filter/test36-report-0.txt | 25 +---------------
 .../data/test-diff-filter/test5-2-report.txt  | 29 +------------------
 .../gmp-6.x.x86_64-report-0.txt               |  6 ----
 ...has-data-member-inserted-at-2-report.1.txt | 11 +------
 ...t-has-data-member-inserted-at-2-report.txt | 11 +------
 tests/test-abidiff-exit.cc                    |  4 +--
 25 files changed, 62 insertions(+), 203 deletions(-)
  

Patch

diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc
index 3ae1f32a..39e2307a 100644
--- a/src/abg-comparison.cc
+++ b/src/abg-comparison.cc
@@ -2955,16 +2955,17 @@  distinct_diff::compatible_child_diff() const
 {
   if (!priv_->compatible_child_diff)
     {
-      type_base_sptr fs = strip_typedef(is_type(first())),
-	ss = strip_typedef(is_type(second()));
-
-      if (fs && ss
-	  && !entities_are_of_distinct_kinds(get_type_declaration(fs),
-					     get_type_declaration(ss))
-	  && *fs == *ss)
-	priv_->compatible_child_diff = compute_diff(get_type_declaration(fs),
-						    get_type_declaration(ss),
-						    context());
+      if (entities_are_of_distinct_kinds(first(), second())
+	  && types_are_compatible(is_type(first()), is_type(second())))
+	{
+	  type_base_sptr fs = peel_qualified_or_typedef_type(is_type(first())),
+	    ss = peel_qualified_or_typedef_type(is_type(second()));
+
+	    priv_->compatible_child_diff =
+	      compute_diff(get_type_declaration(fs),
+			   get_type_declaration(ss),
+			   context());
+	}
     }
   return priv_->compatible_child_diff;
 }
diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index e5978683..48ffb3b0 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -1638,10 +1638,7 @@  default_reporter::report(const distinct_diff& d, ostream& out,
   type_base_sptr fs = strip_typedef(is_type(f)),
     ss = strip_typedef(is_type(s));
 
-  if (diff)
-    diff->report(out, indent + "  ");
-  else
-    report_size_and_alignment_changes(f, s, d.context(), out, indent);
+  report_size_and_alignment_changes(f, s, d.context(), out, indent);
 }
 
 /// Serialize a report of the changes encapsulated in the current
diff --git a/src/abg-ir.cc b/src/abg-ir.cc
index c55a407f..697466e4 100644
--- a/src/abg-ir.cc
+++ b/src/abg-ir.cc
@@ -10327,8 +10327,8 @@  classes_have_same_layout(const type_base_sptr& f, const type_base_sptr& s)
 
 	  if ((get_member_function_vtable_offset(method1)
 	       != get_member_function_vtable_offset(method2))
-	      || types_are_compatible(method1->get_type(),
-				      method2->get_type()))
+	      || !types_are_compatible(method1->get_type(),
+				       method2->get_type()))
 	    return false;
 	}
     }
@@ -10426,6 +10426,8 @@  types_are_compatible(const type_base_sptr type1, const type_base_sptr type2)
 	  if (!types_are_compatible((*p1)->get_type(),
 				    (*p2)->get_type()))
 	    return false;
+
+	return true;
       }
 
   if (classes_have_same_layout(t1, t2))
@@ -29664,26 +29666,17 @@  integral_type_has_harmless_name_change(const type_base_sptr& f,
 {
   if (is_decl(f)
       && is_decl(s)
-      && (is_integral_type(f) || is_decl(f)->get_name().empty())
-      && (is_integral_type(s) || is_decl(s)->get_name().empty())
+      && ((is_integral_type(f) && is_integral_type(s))
+	  || (is_decl(f)->get_name().empty()
+	      && is_type_decl(f)
+	      && is_integral_type(s))
+	  || (is_decl(s)->get_name().empty()
+	      && is_type_decl(s)
+	      && is_integral_type(f)))
       && decl_name_changed(is_decl(f), is_decl(s))
       && (f->get_size_in_bits() == s->get_size_in_bits())
       && (f->get_alignment_in_bits() == s->get_alignment_in_bits()))
-    {
-      real_type fi, si;
-      ABG_ASSERT(is_decl(f)->get_name().empty()
-		 || parse_real_type(is_decl(f)->get_name(), fi));
-      ABG_ASSERT(is_decl(s)->get_name().empty()
-		 || parse_real_type(is_decl(s)->get_name(), si));
-
-      if (fi.get_base_type() == si.get_base_type()
-	  && fi.get_modifiers() != si.get_modifiers())
-	// The base type hasn't changed.  That means only modifiers
-	// changed.  This is considered has harmful by default.
-	return false;
-
       return true;
-    }
 
   return false;
 }
diff --git a/tests/data/test-abidiff-exit/PR30048-test-report-0.txt b/tests/data/test-abidiff-exit/PR30048-test-report-0.txt
index ccaac841..25953612 100644
--- a/tests/data/test-abidiff-exit/PR30048-test-report-0.txt
+++ b/tests/data/test-abidiff-exit/PR30048-test-report-0.txt
@@ -14,12 +14,6 @@  Variables changes summary: 0 Removed, 1 Changed, 0 Added variable
         'int (* f04)(int* restrict)', at offset 192 (in bits) at PR30048-test-v0.c:5:1
         'int (* f05)(const int* restrict)', at offset 256 (in bits) at PR30048-test-v0.c:6:1
       2 data member changes:
-        type of 'int (* f06)(int* restrict const)' changed:
-          in pointed to type 'function type int (int* restrict const)':
-        and offset changed from 320 to 0 (in bits) (by -320 bits)
-        type of 'int (* f07)(int* restrict const)' changed:
-          in pointed to type 'function type int (int* restrict const)':
-            parameter 1 of type 'int* restrict const' changed:
-              'int* restrict const' changed to 'int* const restrict'
-        and offset changed from 384 to 64 (in bits) (by -320 bits)
+        'int (* f06)(int* restrict const)' offset changed from 320 to 0 (in bits) (by -320 bits)
+        'int (* f07)(int* restrict const)' offset changed from 384 to 64 (in bits) (by -320 bits)
 
diff --git a/tests/data/test-abidiff-exit/btf/test0-report-2.txt b/tests/data/test-abidiff-exit/btf/test0-report-2.txt
index 99381d3d..0fa5d5bd 100644
--- a/tests/data/test-abidiff-exit/btf/test0-report-2.txt
+++ b/tests/data/test-abidiff-exit/btf/test0-report-2.txt
@@ -23,7 +23,7 @@  Variables changes summary: 0 Removed, 1 Changed, 0 Added variable
         2 data member changes:
           type of 'const int* m0' changed:
             in pointed to type 'const int':
-              entity changed from 'const int' to 'int'
+              entity changed from 'const int' to compatible type 'int'
               type size hasn't changed
           type of 'volatile const u_type* m5' changed:
             in pointed to type 'volatile const u_type':
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
index 2a62cfe0..35511479 100644
--- a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
@@ -9,33 +9,33 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         type size hasn't changed
         12 data member changes:
           type of 'A c_a' changed:
-            entity changed from 'typedef A' to 'void* const[7]'
+            entity changed from 'typedef A' to compatible type 'void* const[7]'
           type of 'A v_a' changed:
-            entity changed from 'typedef A' to 'void* volatile[7]'
+            entity changed from 'typedef A' to compatible type 'void* volatile[7]'
           type of 'A r_a' changed:
             entity changed from 'typedef A' to compatible type 'void*[7]'
           type of 'B c_b' changed:
             typedef name changed from B to A at qualifier-typedef-array-v1.c:1:1
             underlying type 'typedef A' at qualifier-typedef-array-v0.c:1:1 changed:
-              entity changed from 'typedef A' to 'void* const[7]'
+              entity changed from 'typedef A' to compatible type 'void* const[7]'
           type of 'B v_b' changed:
             typedef name changed from B to A at qualifier-typedef-array-v1.c:1:1
             underlying type 'typedef A' at qualifier-typedef-array-v0.c:1:1 changed:
-              entity changed from 'typedef A' to 'void* volatile[7]'
+              entity changed from 'typedef A' to compatible type 'void* volatile[7]'
           type of 'B r_b' changed:
             typedef name changed from B to A at qualifier-typedef-array-v1.c:1:1
             underlying type 'typedef A' at qualifier-typedef-array-v0.c:1:1 changed:
               entity changed from 'typedef A' to compatible type 'void*[7]'
           type of 'C v_c' changed:
-            entity changed from 'typedef C' to 'void* const volatile[7]'
+            entity changed from 'typedef C' to compatible type 'void* const volatile[7]'
           type of 'C r_c' changed:
-            entity changed from 'typedef C' to 'void* restrict const[7]'
+            entity changed from 'typedef C' to compatible type 'void* restrict const[7]'
           type of 'D v_d' changed:
-            entity changed from 'typedef D' to 'void* const volatile[7]'
+            entity changed from 'typedef D' to compatible type 'void* const volatile[7]'
           type of 'D r_d' changed:
-            entity changed from 'typedef D' to 'void* restrict const[7]'
+            entity changed from 'typedef D' to compatible type 'void* restrict const[7]'
           type of 'E r_e' changed:
-            entity changed from 'typedef E' to 'void* restrict const volatile[7]'
+            entity changed from 'typedef E' to compatible type 'void* restrict const volatile[7]'
           type of 'F r_f' changed:
-            entity changed from 'typedef F' to 'void* restrict const volatile[7]'
+            entity changed from 'typedef F' to compatible type 'void* restrict const volatile[7]'
 
diff --git a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt
index 7249e6c8..930f9b27 100644
--- a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt
+++ b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v1-report-1.txt
@@ -8,10 +8,7 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       in pointed to type 'struct C0' at test-allow-type-region-v1.c:1:1:
         type size hasn't changed
         1 data member change:
-          type of 'unsigned int rh_kabi_reserved1' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted' at test-allow-type-region-v1.c:5:1
+          name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted' at test-allow-type-region-v1.c:5:1
     parameter 2 of type 'C1*' has sub-type changes:
       in pointed to type 'struct C1' at test-allow-type-region-v1.c:12:1:
         type size hasn't changed
diff --git a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt
index 8a435001..de0dc39d 100644
--- a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt
+++ b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v4-report-1.txt
@@ -8,18 +8,9 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       in pointed to type 'struct C0' at test-allow-type-region-v4.c:1:1:
         type size hasn't changed
         3 data member changes:
-          type of 'unsigned int rh_kabi_reserved1' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted1' at test-allow-type-region-v4.c:5:1
-          type of 'unsigned int rh_kabi_reserved3' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved3' changed to 'C0::correctly_inserted2' at test-allow-type-region-v4.c:7:1
-          type of 'unsigned int rh_kabi_reserved4' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved4' changed to 'C0::correctly_inserted3' at test-allow-type-region-v4.c:8:1
+          name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted1' at test-allow-type-region-v4.c:5:1
+          name of 'C0::rh_kabi_reserved3' changed to 'C0::correctly_inserted2' at test-allow-type-region-v4.c:7:1
+          name of 'C0::rh_kabi_reserved4' changed to 'C0::correctly_inserted3' at test-allow-type-region-v4.c:8:1
     parameter 2 of type 'C1*' has sub-type changes:
       in pointed to type 'struct C1' at test-allow-type-region-v4.c:12:1:
         type size hasn't changed
diff --git a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt
index ffc32324..b5af841f 100644
--- a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt
+++ b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-1.txt
@@ -10,18 +10,9 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'int incorrectly_inserted', at offset 224 (in bits) at test-allow-type-region-v5.c:10:1
         3 data member changes:
-          type of 'unsigned int rh_kabi_reserved1' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted1' at test-allow-type-region-v5.c:5:1
-          type of 'unsigned int rh_kabi_reserved3' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved3' changed to 'C0::correctly_inserted2' at test-allow-type-region-v5.c:7:1
-          type of 'unsigned int rh_kabi_reserved4' changed:
-            type name changed from 'unsigned int' to 'int'
-            type size hasn't changed
-          and name of 'C0::rh_kabi_reserved4' changed to 'C0::correctly_inserted3' at test-allow-type-region-v5.c:8:1
+          name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted1' at test-allow-type-region-v5.c:5:1
+          name of 'C0::rh_kabi_reserved3' changed to 'C0::correctly_inserted2' at test-allow-type-region-v5.c:7:1
+          name of 'C0::rh_kabi_reserved4' changed to 'C0::correctly_inserted3' at test-allow-type-region-v5.c:8:1
     parameter 2 of type 'C1*' has sub-type changes:
       in pointed to type 'struct C1' at test-allow-type-region-v5.c:13:1:
         type size hasn't changed
diff --git a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt
index c467ab22..aa95f5e5 100644
--- a/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt
+++ b/tests/data/test-abidiff-exit/test-allow-type-region-v0--v5-report-2.txt
@@ -11,15 +11,12 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'int incorrectly_inserted', at offset 224 (in bits) at test-allow-type-region-v5.c:10:1
         3 data member changes:
           type of 'unsigned int rh_kabi_reserved1' changed:
-            type name changed from 'unsigned int' to 'int'
             type size hasn't changed
           and name of 'C0::rh_kabi_reserved1' changed to 'C0::correctly_inserted1' at test-allow-type-region-v5.c:5:1
           type of 'unsigned int rh_kabi_reserved3' changed:
-            type name changed from 'unsigned int' to 'int'
             type size hasn't changed
           and name of 'C0::rh_kabi_reserved3' changed to 'C0::correctly_inserted2' at test-allow-type-region-v5.c:7:1
           type of 'unsigned int rh_kabi_reserved4' changed:
-            type name changed from 'unsigned int' to 'int'
             type size hasn't changed
           and name of 'C0::rh_kabi_reserved4' changed to 'C0::correctly_inserted3' at test-allow-type-region-v5.c:8:1
 
diff --git a/tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt b/tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt
index e8b52306..ed28ad3a 100644
--- a/tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt
+++ b/tests/data/test-abidiff-exit/test-changed-var-1-report-1.txt
@@ -1,5 +1,5 @@ 
 Functions changes summary: 0 Removed, 0 Changed, 0 Added function
-Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
+Variables changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added variables
 
 1 variable with incompatible sub-type changes:
 
@@ -12,13 +12,3 @@  Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
       1 data member change:
         'char m1' offset changed from 32 to 128 (in bits) (by +96 bits)
 
-1 Changed variable:
-
-  [C] 'S1 v1' was changed at test-changed-var-1-v1.cc:16:1:
-    type of variable changed:
-      type size hasn't changed
-      1 data member change:
-        type of 'int m1' changed:
-          type name changed from 'int' to 'unsigned int'
-          type size hasn't changed
-
diff --git a/tests/data/test-abidiff-exit/test-loc-with-locs-report.txt b/tests/data/test-abidiff-exit/test-loc-with-locs-report.txt
index 248e15b5..9666a8fd 100644
--- a/tests/data/test-abidiff-exit/test-loc-with-locs-report.txt
+++ b/tests/data/test-abidiff-exit/test-loc-with-locs-report.txt
@@ -1,10 +1,3 @@ 
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with some indirect sub-type change:
-
-  [C] 'function void x(unsigned char)' at test-loc-v0.c:1:1 has some indirect sub-type changes:
-    parameter 1 of type 'unsigned char' changed:
-      type name changed from 'unsigned char' to 'signed char'
-      type size hasn't changed
-
diff --git a/tests/data/test-abidiff-exit/test-loc-without-locs-report.txt b/tests/data/test-abidiff-exit/test-loc-without-locs-report.txt
index 2f244fbd..9666a8fd 100644
--- a/tests/data/test-abidiff-exit/test-loc-without-locs-report.txt
+++ b/tests/data/test-abidiff-exit/test-loc-without-locs-report.txt
@@ -1,10 +1,3 @@ 
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with some indirect sub-type change:
-
-  [C] 'function void x(unsigned char)' has some indirect sub-type changes:
-    parameter 1 of type 'unsigned char' changed:
-      type name changed from 'unsigned char' to 'signed char'
-      type size hasn't changed
-
diff --git a/tests/data/test-diff-dwarf/test2-report.txt b/tests/data/test-diff-dwarf/test2-report.txt
index 556c611d..891308c6 100644
--- a/tests/data/test-diff-dwarf/test2-report.txt
+++ b/tests/data/test-diff-dwarf/test2-report.txt
@@ -6,6 +6,8 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'function void foo(int, char)' has some indirect sub-type changes:
     parameter 1 of type 'int' changed:
       entity changed from 'int' to compatible type 'typedef Int'
+      type size hasn't changed
     parameter 2 of type 'char' changed:
       entity changed from 'char' to compatible type 'typedef Char'
+      type size hasn't changed
 
diff --git a/tests/data/test-diff-dwarf/test4-report.txt b/tests/data/test-diff-dwarf/test4-report.txt
index 3dccddda..a49c0c78 100644
--- a/tests/data/test-diff-dwarf/test4-report.txt
+++ b/tests/data/test-diff-dwarf/test4-report.txt
@@ -5,6 +5,6 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   [C] 'function void foo(C0)' has some indirect sub-type changes:
     parameter 1 of type 'class C0' has sub-type changes:
-      entity changed from 'class C0' to 'typedef c0_type'
+      entity changed from 'class C0' to compatible type 'typedef c0_type'
       type size hasn't changed
 
diff --git a/tests/data/test-diff-dwarf/test5-report.txt b/tests/data/test-diff-dwarf/test5-report.txt
index 94d8dae6..3eee1c77 100644
--- a/tests/data/test-diff-dwarf/test5-report.txt
+++ b/tests/data/test-diff-dwarf/test5-report.txt
@@ -12,6 +12,6 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
   [C] 'function C0 foo(void)' has some indirect sub-type changes:
     return type changed:
-      entity changed from 'class C0' to 'typedef c0_type'
+      entity changed from 'class C0' to compatible type 'typedef c0_type'
       type size hasn't changed
 
diff --git a/tests/data/test-diff-filter/test18-report.txt b/tests/data/test-diff-filter/test18-report.txt
index 0f315b4e..9666a8fd 100644
--- a/tests/data/test-diff-filter/test18-report.txt
+++ b/tests/data/test-diff-filter/test18-report.txt
@@ -1,14 +1,3 @@ 
-Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with some indirect sub-type change:
-
-  [C] 'function void foo(S&)' has some indirect sub-type changes:
-    parameter 1 of type 'S&' has sub-type changes:
-      in referenced type 'struct S':
-        type size hasn't changed
-        1 data member change:
-          type of 'int m0' changed:
-            type name changed from 'int' to 'unsigned int'
-            type size hasn't changed
-
diff --git a/tests/data/test-diff-filter/test24-compatible-vars-report-1.txt b/tests/data/test-diff-filter/test24-compatible-vars-report-1.txt
index 49e33b0b..189ecf0a 100644
--- a/tests/data/test-diff-filter/test24-compatible-vars-report-1.txt
+++ b/tests/data/test-diff-filter/test24-compatible-vars-report-1.txt
@@ -7,6 +7,7 @@  Variables changes summary: 0 Removed, 1 Changed, 0 Added variable
     type of variable changed:
       array element type 'struct S' changed:
         entity changed from 'struct S' to compatible type 'typedef typedef_of_S'
+        type size hasn't changed
       type name changed from 'S[2]' to 'typedef_of_S[2]'
       type size hasn't changed
 
diff --git a/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt b/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt
index bef3d75f..bce0f5f6 100644
--- a/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt
+++ b/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-2.txt
@@ -12,9 +12,11 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'S1*' changed:
       in pointed to type 'struct S1':
         entity changed from 'struct S1' to compatible type 'typedef S1Renamed'
+        type size hasn't changed
     parameter 2 of type 'S2*' changed:
       in pointed to type 'struct S2':
         entity changed from 'struct S2' to compatible type 'typedef S2Renamed'
+        type size hasn't changed
 
   [C] 'function void foo(S&)' has some indirect sub-type changes:
     parameter 1 of type 'S&' has sub-type changes:
@@ -26,7 +28,9 @@  Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           type of 'S1* m1' changed:
             in pointed to type 'struct S1':
               entity changed from 'struct S1' to compatible type 'typedef S1Renamed'
+              type size hasn't changed
           type of 'S2* m2' changed:
             in pointed to type 'struct S2':
               entity changed from 'struct S2' to compatible type 'typedef S2Renamed'
+              type size hasn't changed
 
diff --git a/tests/data/test-diff-filter/test36-report-0.txt b/tests/data/test-diff-filter/test36-report-0.txt
index b0d96d46..41fc64d9 100644
--- a/tests/data/test-diff-filter/test36-report-0.txt
+++ b/tests/data/test-diff-filter/test36-report-0.txt
@@ -1,26 +1,3 @@ 
-Functions changes summary: 0 Removed, 2 Changed, 0 Added functions
+Functions changes summary: 0 Removed, 0 Changed (2 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-2 functions with some indirect sub-type change:
-
-  [C] 'function int foo_1(S*)' at test36-1-v0.c:12:1 has some indirect sub-type changes:
-    parameter 1 of type 'S*' has sub-type changes:
-      in pointed to type 'struct S' at test36-1-v1.c:6:1:
-        type size hasn't changed
-        1 data member change:
-          type of 'int m0' changed:
-            type name changed from 'int' to 'unsigned int'
-            type size hasn't changed
-
-  [C] 'function int foo_2(S*)' at test36-2-v0.c:13:1 has some indirect sub-type changes:
-    parameter 1 of type 'S*' has sub-type changes:
-      in pointed to type 'struct S' at test36-2-v1.c:6:1:
-        type size hasn't changed
-        2 data member changes:
-          type of 'int m0' changed:
-            type name changed from 'int' to 'unsigned int'
-            type size hasn't changed
-          type of 'int m1' changed:
-            type name changed from 'int' to 'unsigned int'
-            type size hasn't changed
-
diff --git a/tests/data/test-diff-filter/test5-2-report.txt b/tests/data/test-diff-filter/test5-2-report.txt
index 12a68911..31e12bb0 100644
--- a/tests/data/test-diff-filter/test5-2-report.txt
+++ b/tests/data/test-diff-filter/test5-2-report.txt
@@ -1,30 +1,3 @@ 
-Functions changes summary: 0 Removed, 2 Changed (2 filtered out), 0 Added functions
+Functions changes summary: 0 Removed, 0 Changed (4 filtered out), 0 Added functions
 Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 
-1 function with incompatible sub-type changes:
-
-  [C] 'method virtual unsigned int C0::vfn2(char)' has some sub-type changes:
-    return type changed:
-      type name changed from 'unsigned int' to 'int'
-      type size hasn't changed
-    implicit parameter 0 of type 'C0*' has sub-type changes:
-      in pointed to type 'class C0':
-        type size hasn't changed
-        2 member function changes:
-          'method virtual int C0::vfn1()' has some sub-type changes:
-            implicit parameter 0 of type 'C0*' has sub-type changes:
-              pointed to type 'class C0' changed, as being reported
-          'method virtual unsigned int C0::vfn2(char)' has some sub-type changes:
-            return type changed:
-              type name changed from 'unsigned int' to 'int'
-              type size hasn't changed
-            implicit parameter 0 of type 'C0*' has sub-type changes:
-              pointed to type 'class C0' changed, as being reported
-        no data member change (1 filtered);
-
-1 function with some indirect sub-type change:
-
-  [C] 'method C0::C0()' has some indirect sub-type changes:
-    implicit parameter 0 of type 'C0*' has sub-type changes:
-      pointed to type 'class C0' changed, as reported earlier
-
diff --git a/tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt b/tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt
index 0d9b3356..7d1ebd2e 100644
--- a/tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg-ctf/gmp-6.x.x86_64-report-0.txt
@@ -134,12 +134,6 @@ 
                   entity changed from 'const mp_limb_t*' to 'unsigned long int'
                   type size hasn't changed
                   type alignment changed from 64 to 0
-              parameter 2 of type 'typedef mp_size_t' changed:
-                typedef name changed from mp_size_t to mp_limb_t
-                underlying type 'long int' changed:
-                  type name changed from 'long int' to 'unsigned long int'
-                  type size hasn't changed
-                  mangled name changed from 'long int' to unsigned long int
               parameter 3 of type 'typedef mp_limb_t' was removed
           and name of 'cpuvec_t::gcd_1' changed to 'cpuvec_t::gcd_11'
 
diff --git a/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.1.txt b/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.1.txt
index 41cf8103..b4ea5bf1 100644
--- a/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.1.txt
+++ b/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.1.txt
@@ -1,13 +1,4 @@ 
 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, 1 changed, 0 added type
-
-1 changed type unreachable from any public interface:
-
-  [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
+Unreachable types summary: 0 removed, 0 changed (1 filtered out), 0 added type
 
diff --git a/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.txt b/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.txt
index 41cf8103..b4ea5bf1 100644
--- a/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.txt
+++ b/tests/data/test-diff-suppr/test-has-data-member-inserted-at-2-report.txt
@@ -1,13 +1,4 @@ 
 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, 1 changed, 0 added type
-
-1 changed type unreachable from any public interface:
-
-  [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
+Unreachable types summary: 0 removed, 0 changed (1 filtered out), 0 added type
 
diff --git a/tests/test-abidiff-exit.cc b/tests/test-abidiff-exit.cc
index f3cf4107..a037d424 100644
--- a/tests/test-abidiff-exit.cc
+++ b/tests/test-abidiff-exit.cc
@@ -122,7 +122,7 @@  InOutSpec in_out_specs[] =
     "",
     "",
     "",
-    abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+    abigail::tools_utils::ABIDIFF_OK,
     "data/test-abidiff-exit/test-loc-with-locs-report.txt",
     "output/test-abidiff-exit/test-loc-with-locs-report.txt"
   },
@@ -137,7 +137,7 @@  InOutSpec in_out_specs[] =
     "",
     "",
     "--no-show-locs",
-    abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+    abigail::tools_utils::ABIDIFF_OK,
     "data/test-abidiff-exit/test-loc-without-locs-report.txt",
     "output/test-abidiff-exit/test-loc-without-locs-report.txt"
   },