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(-)
@@ -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;
}
@@ -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
@@ -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;
}
@@ -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)
@@ -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':
@@ -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]'
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
-
@@ -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
-
@@ -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
-
@@ -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
@@ -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
@@ -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
@@ -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
-
@@ -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
@@ -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
@@ -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
-
@@ -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
-
@@ -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'
@@ -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
@@ -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
@@ -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"
},