diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc index aef227a7..cdacf1bf 100644 --- a/src/abg-comparison.cc +++ b/src/abg-comparison.cc @@ -3283,13 +3283,13 @@ class_diff::report(ostream& out, const string& indent) const bool class_diff::traverse(diff_node_visitor& v) { - priv_->traversing_ = true; - TRY_PRE_VISIT_CLASS_DIFF(v); if (priv_->traversing_) return true; + priv_->traversing_ = true; + // base class changes. for (string_changed_base_map::const_iterator i = priv_->changed_bases_.begin(); diff --git a/tests/Makefile.am b/tests/Makefile.am index f5a806c9..e6542db3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -134,7 +134,13 @@ data/test-diff-filter/test0-v0.cc \ data/test-diff-filter/test0-v1.cc \ data/test-diff-filter/test0-v0.o \ data/test-diff-filter/test0-v1.o \ -data/test-diff-filter/test0-report.txt +data/test-diff-filter/test0-report.txt \ +\ +data/test-diff-filter/test1-v0.cc \ +data/test-diff-filter/test1-v1.cc \ +data/test-diff-filter/test1-v0.o \ +data/test-diff-filter/test1-v1.o \ +data/test-diff-filter/test1-report.txt clean-local: clean-local-check diff --git a/tests/data/test-diff-filter/test1-report.txt b/tests/data/test-diff-filter/test1-report.txt new file mode 100644 index 00000000..cdaa37bb --- /dev/null +++ b/tests/data/test-diff-filter/test1-report.txt @@ -0,0 +1,16 @@ +Functions changes summary: 0 Removed, 1 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 bar(C1*)' has some indirect sub-type changes: + parameter 0 of type 'C1*' changed: + in pointed to type 'class C1': + size changed from 32 to 64 bits + 1 data member change: + 'int C1::m1' offset changed from 0 to 32 + + 1 data member insertion: + 'char C1::m0', at offset 0 (in bits) + + diff --git a/tests/data/test-diff-filter/test1-v0.cc b/tests/data/test-diff-filter/test1-v0.cc new file mode 100644 index 00000000..27764622 --- /dev/null +++ b/tests/data/test-diff-filter/test1-v0.cc @@ -0,0 +1,26 @@ +struct C0 +{ + int m0; + + C0() + : m0(0) + {} +}; + +class C1 +{ + int m1; + +public: + C1() + : m1(0) + {} +}; + +void +foo(C0&) +{} + +void +bar(C1*) +{} diff --git a/tests/data/test-diff-filter/test1-v0.o b/tests/data/test-diff-filter/test1-v0.o new file mode 100644 index 00000000..aacd0297 Binary files /dev/null and b/tests/data/test-diff-filter/test1-v0.o differ diff --git a/tests/data/test-diff-filter/test1-v1.cc b/tests/data/test-diff-filter/test1-v1.cc new file mode 100644 index 00000000..fc332fc4 --- /dev/null +++ b/tests/data/test-diff-filter/test1-v1.cc @@ -0,0 +1,28 @@ +class C0 +{ + int m0; + +public: + C0() + : m0(0) + {} +}; + +class C1 +{ + char m0; + int m1; + +public: + C1() + : m1(0) + {} +}; + +void +foo(C0&) +{} + +void +bar(C1*) +{} diff --git a/tests/data/test-diff-filter/test1-v1.o b/tests/data/test-diff-filter/test1-v1.o new file mode 100644 index 00000000..b0439e05 Binary files /dev/null and b/tests/data/test-diff-filter/test1-v1.o differ diff --git a/tests/test-diff-filter.cc b/tests/test-diff-filter.cc index 19d84ac8..26487b5f 100644 --- a/tests/test-diff-filter.cc +++ b/tests/test-diff-filter.cc @@ -61,6 +61,13 @@ InOutSpec in_out_specs[] = "data/test-diff-filter/test0-report.txt", "output/test-diff-filter/test0-report.txt", }, + { + "data/test-diff-filter/test1-v0.o", + "data/test-diff-filter/test1-v1.o", + "--no-harmless", + "data/test-diff-filter/test1-report.txt", + "output/test-diff-filter/test1-report.txt", + }, // This should be the last entry {NULL, NULL, NULL, NULL, NULL} };