aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuliano Procida <gprocida@google.com>2024-02-21 19:38:01 +0000
committerGiuliano Procida <gprocida@google.com>2024-03-08 14:23:51 +0000
commit527ed25105b4e70f28791a079495fb272f2b63a0 (patch)
tree901d51c1cfa5f3503d5a1dc487d6a2d37710720c
parent55fcf7f7634bcb24512658063b79fcf016afc277 (diff)
downloadstg-527ed25105b4e70f28791a079495fb272f2b63a0.tar.gz
order: tweak order merging to prefer second sequence
The order functionality is used in the presentation of diffs of sequences. If there is a source code change from ``` struct s { int x; }; ``` to ``` struct s { long y; }; ``` then STG will now present this as the removal of `x` followed by the addition of `y` (instead of the other way around). This is how `diff(1)` presents things. The change also affects how permutations of sequences are presented. With the change from ``` struct s { int x; long y; }; ``` to ``` struct s { long y; int x; }; ``` STG will now mention the change of offset of `y` before that of `x` (instead of the other way around). These examples seem to be in opposition, but the consistent behaviour is that STG now preserves the order of the second sequence and greedily emits elements from the first sequence that respect this (instead of the other way around). Insertions, removals and renamings are more common than reorderings. This change pragmatically favours a more familiar presentation order for the more common cases. PiperOrigin-RevId: 609069142 Change-Id: I0b81cc1d9b115584241976a23921a67e5ebf1a8d
-rw-r--r--order.h30
-rw-r--r--order_test.cc63
-rw-r--r--test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_flat2
-rw-r--r--test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_plain2
-rw-r--r--test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_small2
-rw-r--r--test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_viz4
-rw-r--r--test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_flat4
-rw-r--r--test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_plain4
-rw-r--r--test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_small4
-rw-r--r--test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_viz8
-rw-r--r--test_cases/diff_tests/composite/expected/method_order_cc.o_o_flat8
-rw-r--r--test_cases/diff_tests/composite/expected/method_order_cc.o_o_plain8
-rw-r--r--test_cases/diff_tests/composite/expected/method_order_cc.o_o_small4
-rw-r--r--test_cases/diff_tests/composite/expected/method_order_cc.o_o_viz8
-rw-r--r--test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_flat4
-rw-r--r--test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_plain4
-rw-r--r--test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_small4
-rw-r--r--test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_viz12
18 files changed, 86 insertions, 89 deletions
diff --git a/order.h b/order.h
index 7344a1c..39672bf 100644
--- a/order.h
+++ b/order.h
@@ -29,11 +29,11 @@
#include "error.h"
namespace stg {
-// Updates a given ordering of items with items from a second ordering,
-// incorporating as much of the latter's order as is compatible.
+// Uses an ordering of items to update items in a second ordering,
+// incorporating as much of the first's order as is compatible.
//
-// The two orderings are reconciled by starting with the left ordering and
-// greedily inserting new items from the right ordering, in a position which
+// The two orderings are reconciled by starting with the second ordering and
+// greedily inserting new items from the first ordering, in a position which
// satisfies that ordering, if possible.
//
// Example, before and after:
@@ -41,21 +41,21 @@ namespace stg {
// indexes1: rose, george, emily
// indexes2: george, ted, emily
//
-// indexes1: rose, george, ted, emily
+// indexes2: rose, george, ted, emily
template <typename T>
-void ExtendOrder(std::vector<T>& indexes1, const std::vector<T>& indexes2) {
- // keep track of where we can insert in indexes1
+void ExtendOrder(const std::vector<T>& indexes1, std::vector<T>& indexes2) {
+ // keep track of where we can insert in indexes2
size_t pos = 0;
- for (const auto& value : indexes2) {
- auto found = std::find(indexes1.begin(), indexes1.end(), value);
- if (found == indexes1.end()) {
+ for (const auto& value : indexes1) {
+ auto found = std::find(indexes2.begin(), indexes2.end(), value);
+ if (found == indexes2.end()) {
// new node, insert at first possible place
- indexes1.insert(indexes1.begin() + pos, value);
+ indexes2.insert(indexes2.begin() + pos, value);
// now pointing at inserted item, point after it
++pos;
- } else if (indexes1.begin() + pos <= found) {
+ } else if (indexes2.begin() + pos <= found) {
// safe to use the constraint, point after found item
- pos = found - indexes1.begin() + 1;
+ pos = found - indexes2.begin() + 1;
}
}
}
@@ -195,10 +195,10 @@ void Reorder(std::vector<std::pair<std::optional<T>, std::optional<T>>>& data) {
for (const auto& ordered_index : positions2) {
indexes2.push_back(ordered_index.second);
}
- // Merge the two orderings of indexes.
+ // Merge the two orderings of indexes, giving preference to the second.
ExtendOrder(indexes1, indexes2);
// Use this to permute the original data array.
- Permute(data, indexes1);
+ Permute(data, indexes2);
}
} // namespace stg
diff --git a/order_test.cc b/order_test.cc
index 0b28278..e007acd 100644
--- a/order_test.cc
+++ b/order_test.cc
@@ -114,15 +114,15 @@ TEST_CASE("randomly-generating ordering sequences, fully-matching") {
for (size_t n = 0; n < count; ++n, ++seed) {
gen.seed(seed);
const auto order1 = MakePermutation(k, gen);
- auto order1_copy = order1;
- auto order2 = MakePermutation(k, gen);
+ const auto order2 = MakePermutation(k, gen);
+ auto order2_copy = order2;
std::ostringstream os;
os << "orderings of " << k << " numbers generated using seed " << seed;
GIVEN(os.str()) {
- stg::ExtendOrder(order1_copy, order2);
+ stg::ExtendOrder(order1, order2_copy);
for (size_t i = 0; i < k; ++i) {
- // order1_copy should be unchanged
- CHECK(order1_copy[i] == order1[i]);
+ // order2_copy should be unchanged
+ CHECK(order2_copy[i] == order2[i]);
}
}
}
@@ -141,21 +141,20 @@ TEST_CASE("randomly-generating ordering sequences, disjoint") {
for (size_t n = 0; n < count; ++n, ++seed) {
gen.seed(seed);
const auto order1 = MakePermutation(k, gen);
- auto order1_copy = order1;
auto order2 = MakePermutation(k, gen);
for (size_t i = 0; i < k; ++i) {
order2[i] += k;
}
- const auto order2_copy = order2;
+ auto order2_copy = order2;
std::ostringstream os;
os << "orderings of " << k << " numbers generated using seed " << seed;
GIVEN(os.str()) {
- stg::ExtendOrder(order1_copy, order2);
+ stg::ExtendOrder(order1, order2_copy);
for (size_t i = 0; i < k; ++i) {
- // order2 should appear as the first part
- CHECK(order1_copy[i] == order2[i]);
- // order1 should appear as the second part
- CHECK(order1_copy[i + k] == order1[i]);
+ // order1 should appear as the first part
+ CHECK(order2_copy[i] == order1[i]);
+ // order2 should appear as the second part
+ CHECK(order2_copy[i + k] == order2[i]);
}
}
}
@@ -174,36 +173,35 @@ TEST_CASE("randomly-generating ordering sequences, single overlap") {
for (size_t n = 0; n < count; ++n, ++seed) {
gen.seed(seed);
const auto order1 = MakePermutation(k, gen);
- auto order1_copy = order1;
auto order2 = MakePermutation(k, gen);
for (size_t i = 0; i < k; ++i) {
order2[i] += k - 1;
}
const auto pivot = k - 1;
- const auto order2_copy = order2;
+ auto order2_copy = order2;
std::ostringstream os;
os << "orderings of " << k << " numbers generated using seed " << seed;
GIVEN(os.str()) {
- stg::ExtendOrder(order1_copy, order2);
- CHECK(order1_copy.size() == 2 * k - 1);
- // order2 pre, order1 pre, pivot, order2 post, order1 post
+ stg::ExtendOrder(order1, order2_copy);
+ CHECK(order2_copy.size() == 2 * k - 1);
+ // order1 pre, order2 pre, pivot, order1 post, order2 post
size_t ix = 0;
size_t ix1 = 0;
size_t ix2 = 0;
- while (order2[ix2] != pivot) {
- CHECK(order1_copy[ix++] == order2[ix2++]);
- }
while (order1[ix1] != pivot) {
- CHECK(order1_copy[ix++] == order1[ix1++]);
+ CHECK(order2_copy[ix++] == order1[ix1++]);
}
- ++ix2;
- ++ix1;
- CHECK(order1_copy[ix++] == pivot);
- while (ix2 < k) {
- CHECK(order1_copy[ix++] == order2[ix2++]);
+ while (order2[ix2] != pivot) {
+ CHECK(order2_copy[ix++] == order2[ix2++]);
}
+ ++ix1;
+ ++ix2;
+ CHECK(order2_copy[ix++] == pivot);
while (ix1 < k) {
- CHECK(order1_copy[ix++] == order1[ix1++]);
+ CHECK(order2_copy[ix++] == order1[ix1++]);
+ }
+ while (ix2 < k) {
+ CHECK(order2_copy[ix++] == order2[ix2++]);
}
}
}
@@ -213,8 +211,8 @@ TEST_CASE("randomly-generating ordering sequences, single overlap") {
TEST_CASE("hand-curated ordering sequences") {
using Sequence = std::vector<std::string>;
// NOTES:
- // The output sequence MUST include the first sequence as a subsequence.
- // The second sequence's ordering is respected as far as possible.
+ // The output sequence MUST include the second sequence as a subsequence.
+ // The first sequence's ordering is respected as far as possible.
std::vector<std::tuple<Sequence, Sequence, Sequence>> cases = {
{{"rose", "george", "emily"}, {"george", "ted", "emily"},
{"rose", "george", "ted", "emily"}},
@@ -227,13 +225,12 @@ TEST_CASE("hand-curated ordering sequences") {
{{"a", "b", "d"}, {"b", "c", "d"}, {"a", "b", "c", "d"}},
{{"a", "c", "d"}, {"a", "b", "c"}, {"a", "b", "c", "d"}},
{{"b", "c", "d"}, {"a", "b"}, {"a", "b", "c", "d"}},
- {{"a", "z"}, {"z", "a", "q"}, {"a", "z", "q"}},
+ {{"z", "a", "q"}, {"a", "z"}, {"a", "z", "q"}},
};
for (const auto& [order1, order2, expected] : cases) {
- auto order1_copy = order1;
auto order2_copy = order2;
- stg::ExtendOrder(order1_copy, order2_copy);
- CHECK(order1_copy == expected);
+ stg::ExtendOrder(order1, order2_copy);
+ CHECK(order2_copy == expected);
}
}
diff --git a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_flat b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_flat
index eb8db19..5899813 100644
--- a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_flat
+++ b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_flat
@@ -1,8 +1,8 @@
variable symbol changed from 'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; } v' to 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; } v'
type changed from 'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; }' to 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; }'
byte size changed from 16 to 20
- member 'struct { int zero; }' was added
member 'struct { int one; }' was removed
+ member 'struct { int zero; }' was added
member 'struct { int six; }' was added
member 'struct { int eight; }' changed
offset changed from 96 to 128
diff --git a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_plain b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_plain
index eb8db19..5899813 100644
--- a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_plain
+++ b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_plain
@@ -1,8 +1,8 @@
variable symbol changed from 'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; } v' to 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; } v'
type changed from 'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; }' to 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; }'
byte size changed from 16 to 20
- member 'struct { int zero; }' was added
member 'struct { int one; }' was removed
+ member 'struct { int zero; }' was added
member 'struct { int six; }' was added
member 'struct { int eight; }' changed
offset changed from 96 to 128
diff --git a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_small b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_small
index eb8db19..5899813 100644
--- a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_small
+++ b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_small
@@ -1,8 +1,8 @@
variable symbol changed from 'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; } v' to 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; } v'
type changed from 'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; }' to 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; }'
byte size changed from 16 to 20
- member 'struct { int zero; }' was added
member 'struct { int one; }' was removed
+ member 'struct { int zero; }' was added
member 'struct { int six; }' was added
member 'struct { int eight; }' changed
offset changed from 96 to 128
diff --git a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_viz b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_viz
index b1f57cb..b05509f 100644
--- a/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_viz
+++ b/test_cases/diff_tests/composite/expected/anonymous_member_c.o_o_viz
@@ -4,9 +4,9 @@ digraph "ABI diff" {
"2" [color=red, label="'struct { struct { int one; }; struct { int two; }; struct { int four; }; struct { int eight; }; }' -> 'struct { struct { int zero; }; struct { int two; }; struct { int four; }; struct { int six; }; struct { int eight; }; }'"]
"2" -> "2:0"
"2:0" [color=red, label="byte size changed from 16 to 20"]
- "3" [color=red, label="added(struct { int zero; })"]
+ "3" [color=red, label="removed(struct { int one; })"]
"2" -> "3" [label=""]
- "4" [color=red, label="removed(struct { int one; })"]
+ "4" [color=red, label="added(struct { int zero; })"]
"2" -> "4" [label=""]
"5" [color=red, label="added(struct { int six; })"]
"2" -> "5" [label=""]
diff --git a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_flat b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_flat
index 922a4c6..0c91b29 100644
--- a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_flat
+++ b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_flat
@@ -11,9 +11,9 @@ type 'struct AddRemove' changed
base class 'struct B' was added
type 'struct DiffOrder' changed
- base class 'struct A' changed
- offset changed from 0 to 32
base class 'struct B' changed
offset changed from 32 to 0
+ base class 'struct A' changed
+ offset changed from 0 to 32
exit code 4
diff --git a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_plain b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_plain
index 6b9fd70..ae0ca2d 100644
--- a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_plain
+++ b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_plain
@@ -7,9 +7,9 @@ variable symbol 'struct AddRemove add_remove' changed
variable symbol 'struct DiffOrder diff_order' changed
type 'struct DiffOrder' changed
- base class 'struct A' changed
- offset changed from 0 to 32
base class 'struct B' changed
offset changed from 32 to 0
+ base class 'struct A' changed
+ offset changed from 0 to 32
exit code 4
diff --git a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_small b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_small
index 9b9c642..17e4da2 100644
--- a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_small
+++ b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_small
@@ -5,9 +5,9 @@ type 'struct AddRemove' changed
base class 'struct B' was added
type 'struct DiffOrder' changed
- base class 'struct A' changed
- offset changed from 0 to 32
base class 'struct B' changed
offset changed from 32 to 0
+ base class 'struct A' changed
+ offset changed from 0 to 32
exit code 4
diff --git a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_viz b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_viz
index 1a84435..7786a3b 100644
--- a/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_viz
+++ b/test_cases/diff_tests/composite/expected/base_class_order_cc.o_o_viz
@@ -14,13 +14,13 @@ digraph "ABI diff" {
"0" -> "1" [label=""]
"6" [label="'struct DiffOrder diff_order'"]
"7" [shape=rectangle, label="'struct DiffOrder'"]
- "8" [color=red, label="'struct A'"]
+ "8" [color=red, label="'struct B'"]
"8" -> "8:0"
- "8:0" [color=red, label="offset changed from 0 to 32"]
+ "8:0" [color=red, label="offset changed from 32 to 0"]
"7" -> "8" [label=""]
- "9" [color=red, label="'struct B'"]
+ "9" [color=red, label="'struct A'"]
"9" -> "9:0"
- "9:0" [color=red, label="offset changed from 32 to 0"]
+ "9:0" [color=red, label="offset changed from 0 to 32"]
"7" -> "9" [label=""]
"6" -> "7" [label=""]
"0" -> "6" [label=""]
diff --git a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_flat b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_flat
index 93280ac..ea8eccc 100644
--- a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_flat
+++ b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_flat
@@ -28,13 +28,13 @@ type 'struct S' changed
type 'void(struct S*)' changed
parameter 1 type 'struct S*' changed
pointed-to type 'struct S' changed
- method 'void y(struct S*)' changed
- vtable offset changed from 1 to 2
+ method 'void x(struct S*)' changed
+ vtable offset changed from 2 to 1
type 'void(struct S*)' changed
parameter 1 type 'struct S*' changed
pointed-to type 'struct S' changed
- method 'void x(struct S*)' changed
- vtable offset changed from 2 to 1
+ method 'void y(struct S*)' changed
+ vtable offset changed from 1 to 2
type 'void(struct S*)' changed
parameter 1 type 'struct S*' changed
pointed-to type 'struct S' changed
diff --git a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_plain b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_plain
index 6e0b3db..9842595 100644
--- a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_plain
+++ b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_plain
@@ -7,14 +7,14 @@ function symbol 'void S::w(struct S*)' {_ZN1S1wEv} changed
parameter 1 type 'struct S*' changed
pointed-to type 'struct S' changed
(being reported)
- method 'void y(struct S*)' changed
- vtable offset changed from 1 to 2
+ method 'void x(struct S*)' changed
+ vtable offset changed from 2 to 1
type 'void(struct S*)' changed
parameter 1 type 'struct S*' changed
pointed-to type 'struct S' changed
(being reported)
- method 'void x(struct S*)' changed
- vtable offset changed from 2 to 1
+ method 'void y(struct S*)' changed
+ vtable offset changed from 1 to 2
type 'void(struct S*)' changed
parameter 1 type 'struct S*' changed
pointed-to type 'struct S' changed
diff --git a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_small b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_small
index 079c5bc..c755836 100644
--- a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_small
+++ b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_small
@@ -1,7 +1,7 @@
type 'struct S' changed
- method 'void y(struct S*)' changed
- vtable offset changed from 1 to 2
method 'void x(struct S*)' changed
vtable offset changed from 2 to 1
+ method 'void y(struct S*)' changed
+ vtable offset changed from 1 to 2
exit code 4
diff --git a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_viz b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_viz
index 83e611d..d3fd21b 100644
--- a/test_cases/diff_tests/composite/expected/method_order_cc.o_o_viz
+++ b/test_cases/diff_tests/composite/expected/method_order_cc.o_o_viz
@@ -11,16 +11,16 @@ digraph "ABI diff" {
"6" -> "7" [label="parameter 1"]
"5" -> "6" [label=""]
"4" -> "5" [label=""]
- "8" [color=red, label="'void y(struct S*)'"]
+ "8" [color=red, label="'void x(struct S*)'"]
"8" -> "8:0"
- "8:0" [color=red, label="vtable offset changed from 1 to 2"]
+ "8:0" [color=red, label="vtable offset changed from 2 to 1"]
"9" [label="'void(struct S*)'"]
"9" -> "7" [label="parameter 1"]
"8" -> "9" [label=""]
"4" -> "8" [label=""]
- "10" [color=red, label="'void x(struct S*)'"]
+ "10" [color=red, label="'void y(struct S*)'"]
"10" -> "10:0"
- "10:0" [color=red, label="vtable offset changed from 2 to 1"]
+ "10:0" [color=red, label="vtable offset changed from 1 to 2"]
"11" [label="'void(struct S*)'"]
"11" -> "7" [label="parameter 1"]
"10" -> "11" [label=""]
diff --git a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_flat b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_flat
index 2ee7c91..ecd2cbe 100644
--- a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_flat
+++ b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_flat
@@ -2,11 +2,11 @@ variable symbol 'struct A z' changed
type 'struct A' changed
type 'struct A' changed
- member 'struct { int x; int y; }' was added
member 'int x' was removed
member 'int y' was removed
+ member 'struct { int x; int y; }' was added
+ member 'struct { char p; char q; }' was removed
member 'char p' was added
member 'char s' was added
- member 'struct { char p; char q; }' was removed
exit code 4
diff --git a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_plain b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_plain
index 71cd645..bcaab84 100644
--- a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_plain
+++ b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_plain
@@ -1,10 +1,10 @@
variable symbol 'struct A z' changed
type 'struct A' changed
- member 'struct { int x; int y; }' was added
member 'int x' was removed
member 'int y' was removed
+ member 'struct { int x; int y; }' was added
+ member 'struct { char p; char q; }' was removed
member 'char p' was added
member 'char s' was added
- member 'struct { char p; char q; }' was removed
exit code 4
diff --git a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_small b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_small
index 3c9b61d..eda68a7 100644
--- a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_small
+++ b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_small
@@ -1,9 +1,9 @@
type 'struct A' changed
- member 'struct { int x; int y; }' was added
member 'int x' was removed
member 'int y' was removed
+ member 'struct { int x; int y; }' was added
+ member 'struct { char p; char q; }' was removed
member 'char p' was added
member 'char s' was added
- member 'struct { char p; char q; }' was removed
exit code 4
diff --git a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_viz b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_viz
index 84bc160..871e8e0 100644
--- a/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_viz
+++ b/test_cases/diff_tests/member/expected/named_vs_anonymous_nested_match_c.o_o_viz
@@ -2,17 +2,17 @@ digraph "ABI diff" {
"0" [shape=rectangle, label="'interface'"]
"1" [label="'struct A z'"]
"2" [shape=rectangle, label="'struct A'"]
- "3" [color=red, label="added(struct { int x; int y; })"]
+ "3" [color=red, label="removed(int x)"]
"2" -> "3" [label=""]
- "4" [color=red, label="removed(int x)"]
+ "4" [color=red, label="removed(int y)"]
"2" -> "4" [label=""]
- "5" [color=red, label="removed(int y)"]
+ "5" [color=red, label="added(struct { int x; int y; })"]
"2" -> "5" [label=""]
- "6" [color=red, label="added(char p)"]
+ "6" [color=red, label="removed(struct { char p; char q; })"]
"2" -> "6" [label=""]
- "7" [color=red, label="added(char s)"]
+ "7" [color=red, label="added(char p)"]
"2" -> "7" [label=""]
- "8" [color=red, label="removed(struct { char p; char q; })"]
+ "8" [color=red, label="added(char s)"]
"2" -> "8" [label=""]
"1" -> "2" [label=""]
"0" -> "1" [label=""]