public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/7] Mostly whitespace changes and fixes.
@ 2020-03-27 14:00 Giuliano Procida
  2020-03-27 14:00 ` [PATCH 1/7] abidiff: Clean up new lines between sections Giuliano Procida
                   ` (8 more replies)
  0 siblings, 9 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

Hi.

These are mostly whitespace changes. Let me know if any of them need
a tweak. Apologies in advance for fedabipkgdiff test breakage.

The first patch partially undoes 474ad38f in line with
maennich@google.com's review comments and my original intention.

However, if you prefer the more compact output format for top-level
lists of [C]hanged things, it should be easy to switch to that as all
the places where the different behaviour happens is commented.

The fourth patch touches quite a bit of code which is not covered by
current tests and I wasn't able to exercise.

The fifth patch has semantic changes and warrants more careful review.

This was also me working out how to do hg split with git.

 git rebase -i
 git reset HEAD^1
 git add -p
 git commit -c REBASE_HEAD

Regards,
Giuliano.

Giuliano Procida (7):
  abidiff: Clean up new lines between sections.
  abidiff: Remove blank line after base class diffs.
  abidiff: Fix enum impacted interfaces blank line.
  abidiff: Remove member function diff blank lines.
  abidiff: Fix variable declaration formatting.
  abidiff: Eliminate leaf mode double blank lines.
  abidiff: Remove new lines after parameter diffs.

 src/abg-default-reporter.cc                   |  97 +++---------------
 src/abg-leaf-reporter.cc                      |  37 ++-----
 src/abg-reporter-priv.cc                      |  61 +++++++----
 tests/data/Makefile.am                        |   5 +
 .../test0-fn-changed-report-0.txt             |   1 -
 .../test0-fn-changed-report-2.txt             |   1 -
 .../test7-fn-changed-report-0.txt             |   1 -
 .../test-leaf-cxx-members-report.txt          |  42 ++++++++
 .../test-leaf-cxx-members-v0.cc               |  12 +++
 .../test-leaf-cxx-members-v0.o                | Bin 0 -> 7328 bytes
 .../test-leaf-cxx-members-v1.cc               |  14 +++
 .../test-leaf-cxx-members-v1.o                | Bin 0 -> 7360 bytes
 .../test-leaf-peeling-report.txt              |   5 -
 .../test-abidiff-exit/test-leaf2-report.txt   |   1 -
 .../test-abidiff-exit/test-leaf3-report.txt   |   3 +
 .../test-loc-with-locs-report.txt             |   1 -
 .../test-loc-without-locs-report.txt          |   1 -
 .../test1-voffset-change-report0.txt          |   1 -
 .../test-abidiff/test-PR18791-report0.txt     |   5 -
 tests/data/test-abidiff/test-enum0-report.txt |   1 -
 tests/data/test-abidiff/test-enum1-report.txt |   1 -
 .../data/test-abidiff/test-struct1-report.txt |   1 -
 .../PR25058-liblttng-ctl-report-1.txt         |   8 --
 .../test-23-diff-arch-report-0.txt            |   1 -
 tests/data/test-diff-dwarf/test0-report.txt   |   2 -
 tests/data/test-diff-dwarf/test1-report.txt   |   1 -
 tests/data/test-diff-dwarf/test10-report.txt  |   1 -
 tests/data/test-diff-dwarf/test11-report.txt  |   1 -
 tests/data/test-diff-dwarf/test13-report.txt  |   1 -
 .../test-diff-dwarf/test15-enum-report.txt    |   2 -
 tests/data/test-diff-dwarf/test2-report.txt   |   1 -
 .../test20-add-fn-parm-report-0.txt           |   2 -
 .../test21-redundant-fn-report-0.txt          |   1 -
 .../test22-changed-parm-c-report-0.txt        |   1 -
 .../test24-added-fn-parms-report-0.txt        |   2 -
 .../test25-removed-fn-parms-report-0.txt      |   2 -
 ...t26-added-parms-before-variadic-report.txt |   5 -
 .../test27-local-base-diff-report.txt         |   2 -
 .../test28-vtable-changes-report-0.txt        |   1 -
 tests/data/test-diff-dwarf/test3-report.txt   |   1 -
 .../test30-vtable-changes-report-0.txt        |   1 -
 .../test31-vtable-changes-report-0.txt        |   1 -
 .../test32-fnptr-changes-report-0.txt         |   2 -
 .../test33-fnref-changes-report-0.txt         |   2 -
 .../test36-ppc64-aliases-report-0.txt         |   1 -
 .../test-diff-dwarf/test37-union-report-0.txt |   1 -
 .../test-diff-dwarf/test38-union-report-0.txt |   1 -
 .../test-diff-dwarf/test39-union-report-0.txt |   1 -
 tests/data/test-diff-dwarf/test4-report.txt   |   1 -
 .../data/test-diff-dwarf/test40-report-0.txt  |   1 -
 .../test41-PR20476-hidden-report-0.txt        |   3 -
 .../test42-PR21296-clanggcc-report0.txt       |   2 -
 .../test43-PR22913-report-0.txt               |   1 -
 .../test44-anon-struct-union-report-0.txt     |   1 -
 .../test45-anon-dm-change-report-0.txt        |   1 +
 .../test-diff-dwarf/test46-rust-report-0.txt  |   2 -
 tests/data/test-diff-dwarf/test5-report.txt   |   1 -
 tests/data/test-diff-dwarf/test6-report.txt   |   1 -
 tests/data/test-diff-dwarf/test8-report.txt   |   2 -
 .../libtest45-basic-type-change-report-0.txt  |   1 -
 .../libtest45-basic-type-change-report-1.txt  |   8 +-
 .../test-PR24731-report-1.txt                 |   1 -
 tests/data/test-diff-filter/test0-report.txt  |   2 -
 tests/data/test-diff-filter/test01-report.txt |   2 -
 tests/data/test-diff-filter/test1-report.txt  |   1 -
 tests/data/test-diff-filter/test10-report.txt |   1 -
 tests/data/test-diff-filter/test11-report.txt |   1 -
 tests/data/test-diff-filter/test13-report.txt |   1 -
 .../data/test-diff-filter/test14-0-report.txt |   1 -
 .../data/test-diff-filter/test14-1-report.txt |   1 -
 .../data/test-diff-filter/test15-1-report.txt |   1 +
 .../data/test-diff-filter/test16-report-2.txt |   1 -
 tests/data/test-diff-filter/test16-report.txt |   1 -
 .../data/test-diff-filter/test17-0-report.txt |   1 -
 .../data/test-diff-filter/test17-1-report.txt |   1 -
 tests/data/test-diff-filter/test18-report.txt |   1 -
 .../test-diff-filter/test19-enum-report-1.txt |   2 -
 tests/data/test-diff-filter/test2-report.txt  |   1 -
 .../test22-compatible-fns-report-0.txt        |   1 -
 ...st23-redundant-fn-parm-change-report-0.txt |   1 -
 .../test25-cyclic-type-report-0.txt           |   1 -
 .../test25-cyclic-type-report-1.txt           |   1 -
 ...st26-qualified-redundant-node-report-0.txt |   1 -
 ...st26-qualified-redundant-node-report-1.txt |   1 -
 ...t-and-filtered-children-nodes-report-0.txt |   1 -
 ...t-and-filtered-children-nodes-report-1.txt |   1 -
 ...t-and-filtered-children-nodes-report-2.txt |   1 -
 ...t-and-filtered-children-nodes-report-0.txt |   1 -
 ...t-and-filtered-children-nodes-report-1.txt |   1 -
 ...st29-finer-redundancy-marking-report-0.txt |   2 -
 tests/data/test-diff-filter/test3-report.txt  |   1 -
 .../test30-pr18904-rvalueref-report0.txt      |   3 -
 .../test30-pr18904-rvalueref-report1.txt      |   3 -
 .../test30-pr18904-rvalueref-report2.txt      |   3 -
 .../test31-pr18535-libstdc++-report-0.txt     |   2 -
 .../test31-pr18535-libstdc++-report-1.txt     |   2 -
 .../test32-ppc64le-struct-change-report0.txt  |   1 -
 .../test35-pr18754-no-added-syms-report-0.txt |   3 -
 .../data/test-diff-filter/test36-report-0.txt |   1 -
 .../data/test-diff-filter/test37-report-0.txt |   1 -
 .../test39/test39-report-0.txt                |   1 -
 .../data/test-diff-filter/test41-report-0.txt |   1 -
 .../test44-anonymous-data-member-report-0.txt |   1 -
 .../test44-anonymous-data-member-report-1.txt |   2 +-
 tests/data/test-diff-filter/test6-report.txt  |   1 -
 tests/data/test-diff-filter/test7-report.txt  |   1 -
 tests/data/test-diff-filter/test9-report.txt  |   1 -
 ...x86_64--2.24.2-30.fc30.x86_64-report-0.txt |   1 -
 .../PR24690/PR24690-report-0.txt              |   1 -
 .../data/test-diff-pkg/dirpkg-1-report-1.txt  |   1 -
 .../data/test-diff-pkg/dirpkg-3-report-1.txt  |   1 -
 .../data/test-diff-pkg/dirpkg-3-report-2.txt  |   1 -
 ...libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt |   2 +-
 ...4--libcdio-0.94-2.fc26.x86_64-report.1.txt |   1 -
 ...-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt |   4 -
 .../nss-3.23.0-1.0.fc23.x86_64-report-0.txt   |   7 --
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-0.txt |   2 -
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-1.txt |   2 -
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-2.txt |   2 -
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-3.txt |   1 -
 .../symlink-dir-test1-report0.txt             |   1 -
 .../data/test-diff-pkg/tarpkg-0-report-0.txt  |   1 -
 .../data/test-diff-pkg/tarpkg-1-report-0.txt  |   1 -
 ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt |   5 -
 ...bb-4.3-3.20141204.fc23.x86_64-report-1.txt |   2 -
 .../libtest48-soname-abixml-report-1.txt      |   1 -
 .../test0-type-suppr-report-0.txt             |   1 -
 .../test0-type-suppr-report-3.txt             |   1 -
 .../test0-type-suppr-report-5.txt             |   1 -
 .../test0-type-suppr-report-7.txt             |   1 -
 .../test1-typedef-suppr-report-0.txt          |   1 -
 .../test1-typedef-suppr-report-2.txt          |   1 -
 .../test10-changed-parm-c-report-0.txt        |   1 -
 .../test11-add-data-member-report-0.txt       |   1 -
 .../test12-add-data-member-report-0.txt       |   1 -
 .../test12-add-data-member-report-2.txt       |   1 -
 .../test13-suppr-through-pointer-report-0.txt |   1 -
 .../test13-suppr-through-pointer-report-1.txt |   1 -
 .../test14-suppr-non-redundant-report-0.txt   |   1 -
 .../test14-suppr-non-redundant-report-1.txt   |   1 -
 .../test15-suppr-added-fn-report-0.txt        |   1 -
 .../test15-suppr-added-fn-report-1.txt        |   1 -
 .../test15-suppr-added-fn-report-5.txt        |   1 -
 .../test16-suppr-removed-fn-report-0.txt      |   1 -
 .../test16-suppr-removed-fn-report-2.txt      |   1 -
 .../test2-struct-suppr-report-0.txt           |   1 -
 .../test23-alias-filter-report-0.txt          |   1 -
 .../test23-alias-filter-report-2.txt          |   1 -
 .../test24-soname-report-1.txt                |   1 -
 .../test24-soname-report-10.txt               |   1 -
 .../test24-soname-report-12.txt               |   1 -
 .../test24-soname-report-14.txt               |   1 -
 .../test24-soname-report-16.txt               |   1 -
 .../test24-soname-report-4.txt                |   1 -
 .../test25-typedef-report-0.txt               |   1 -
 .../test26-loc-suppr-report-0.txt             |   1 -
 .../test26-loc-suppr-report-3.txt             |   1 -
 .../test3-struct-suppr-report-0.txt           |   1 -
 .../test3-struct-suppr-report-1.txt           |   1 -
 .../test3-struct-suppr-report-2.txt           |   1 -
 .../data/test-diff-suppr/test30-report-0.txt  |   1 -
 .../data/test-diff-suppr/test31-report-1.txt  |   1 -
 .../data/test-diff-suppr/test32-report-0.txt  |   1 -
 .../data/test-diff-suppr/test32-report-1.txt  |   1 -
 .../data/test-diff-suppr/test33-report-0.txt  |   1 -
 .../test-diff-suppr/test36-leaf-report-0.txt  |   1 -
 .../test39-opaque-type-report-0.txt           |   1 -
 .../test4-local-suppr-report-0.txt            |   1 -
 .../test4-local-suppr-report-1.txt            |   1 -
 .../test41-enumerator-changes-report-0.txt    |   3 -
 .../test42-negative-suppr-type-report-0.txt   |   1 -
 .../test42-negative-suppr-type-report-1.txt   |   1 -
 .../test47-non-reachable-types-report-1.txt   |   1 -
 .../test47-non-reachable-types-report-2.txt   |   1 -
 .../test47-non-reachable-types-report-3.txt   |   1 -
 .../test47-non-reachable-types-report-4.txt   |   1 -
 .../test47-non-reachable-types-report-5.txt   |   1 -
 .../test47-non-reachable-types-report-7.txt   |   1 -
 .../test47-non-reachable-types-report-8.txt   |   1 -
 .../test5-fn-suppr-report-0.txt               |   1 -
 .../test5-fn-suppr-report-1.txt               |   1 -
 .../test5-fn-suppr-report-2.txt               |   1 -
 .../test5-fn-suppr-report-3.txt               |   1 -
 .../test5-fn-suppr-report-4.txt               |   1 -
 .../test5-fn-suppr-report-5.txt               |   1 -
 .../test6-fn-suppr-report-0-1.txt             |   1 -
 .../test6-fn-suppr-report-0.txt               |   1 -
 .../test6-fn-suppr-report-1.txt               |   1 -
 .../test6-fn-suppr-report-2.txt               |   1 -
 .../test6-fn-suppr-report-3.txt               |   1 -
 .../test7-var-suppr-report-0.txt              |   1 +
 .../test7-var-suppr-report-8.txt              |   1 +
 .../test8-redundant-fn-report-0.txt           |   1 -
 .../test8-redundant-fn-report-1.txt           |   1 -
 .../test9-changed-parm-c-report-0.txt         |   1 -
 .../test9-changed-parm-c-report-1.txt         |   1 -
 tests/test-abidiff-exit.cc                    |  10 ++
 197 files changed, 156 insertions(+), 385 deletions(-)
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o

-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/7] abidiff: Clean up new lines between sections.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-27 14:00 ` [PATCH 2/7] abidiff: Remove blank line after base class diffs Giuliano Procida
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

Some blank lines were unintentionally removed with a recent patch. The
new line to remove should have been the one after all changed
functions not the one after each one. Changed functions (and
variables) tend to be reported as paragraphs, rather than single
lines, so the extra spacing is useful.

This patch removes the blank line emitted after all changed
functions, variables and unreachable types, and adds back the
missing blank lines between changed functions.

	* src/abg-default-reporter.cc (report): In the corpus_diff
	override, add back the extra blank line per changed function
	but remove the extra one after all changed changed functions
	and variables; comment these.
	* src/abg-leaf-reporter.cc (report): In the corpus_diff
	override, add back the extra blank line per changed function
	but remove the extra one after all changed changed functions
	and variables; comment these.
	* src/abg-reporter-priv.cc
	(maybe_report_unreachable_type_changes): Remove extra blank
	line emitted after all unreachable type changes; comment
	this.
	* tests/data/test*report*.txt: Remove/add blank lines.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-default-reporter.cc                   | 13 +++++--------
 src/abg-leaf-reporter.cc                      | 14 ++++++--------
 src/abg-reporter-priv.cc                      | 19 ++++---------------
 .../test0-fn-changed-report-0.txt             |  1 -
 .../test0-fn-changed-report-2.txt             |  1 -
 .../test7-fn-changed-report-0.txt             |  1 -
 .../test-abidiff-exit/test-leaf3-report.txt   |  3 +++
 .../test-loc-with-locs-report.txt             |  1 -
 .../test-loc-without-locs-report.txt          |  1 -
 .../test1-voffset-change-report0.txt          |  1 -
 .../test-abidiff/test-PR18791-report0.txt     |  1 -
 .../PR25058-liblttng-ctl-report-1.txt         |  1 -
 .../test-23-diff-arch-report-0.txt            |  1 -
 tests/data/test-diff-dwarf/test0-report.txt   |  1 -
 tests/data/test-diff-dwarf/test1-report.txt   |  1 -
 tests/data/test-diff-dwarf/test10-report.txt  |  1 -
 tests/data/test-diff-dwarf/test11-report.txt  |  1 -
 tests/data/test-diff-dwarf/test13-report.txt  |  1 -
 .../test-diff-dwarf/test15-enum-report.txt    |  1 -
 tests/data/test-diff-dwarf/test2-report.txt   |  1 -
 .../test20-add-fn-parm-report-0.txt           |  1 -
 .../test21-redundant-fn-report-0.txt          |  1 -
 .../test22-changed-parm-c-report-0.txt        |  1 -
 .../test24-added-fn-parms-report-0.txt        |  1 -
 .../test25-removed-fn-parms-report-0.txt      |  1 -
 ...t26-added-parms-before-variadic-report.txt |  1 -
 .../test27-local-base-diff-report.txt         |  1 -
 .../test28-vtable-changes-report-0.txt        |  1 -
 tests/data/test-diff-dwarf/test3-report.txt   |  1 -
 .../test30-vtable-changes-report-0.txt        |  1 -
 .../test31-vtable-changes-report-0.txt        |  1 -
 .../test32-fnptr-changes-report-0.txt         |  1 -
 .../test33-fnref-changes-report-0.txt         |  1 -
 .../test36-ppc64-aliases-report-0.txt         |  1 -
 .../test-diff-dwarf/test37-union-report-0.txt |  1 -
 .../test-diff-dwarf/test38-union-report-0.txt |  1 -
 .../test-diff-dwarf/test39-union-report-0.txt |  1 -
 tests/data/test-diff-dwarf/test4-report.txt   |  1 -
 .../data/test-diff-dwarf/test40-report-0.txt  |  1 -
 .../test41-PR20476-hidden-report-0.txt        |  1 -
 .../test42-PR21296-clanggcc-report0.txt       |  1 -
 .../test43-PR22913-report-0.txt               |  1 -
 .../test44-anon-struct-union-report-0.txt     |  1 -
 .../test45-anon-dm-change-report-0.txt        |  1 -
 .../test-diff-dwarf/test46-rust-report-0.txt  |  1 -
 tests/data/test-diff-dwarf/test5-report.txt   |  1 -
 tests/data/test-diff-dwarf/test6-report.txt   |  1 -
 tests/data/test-diff-dwarf/test8-report.txt   |  1 -
 .../libtest45-basic-type-change-report-0.txt  |  1 -
 .../libtest45-basic-type-change-report-1.txt  |  3 +++
 .../test-PR24731-report-1.txt                 |  1 -
 tests/data/test-diff-filter/test0-report.txt  |  1 -
 tests/data/test-diff-filter/test01-report.txt |  1 -
 tests/data/test-diff-filter/test1-report.txt  |  1 -
 tests/data/test-diff-filter/test10-report.txt |  1 -
 tests/data/test-diff-filter/test11-report.txt |  1 -
 tests/data/test-diff-filter/test13-report.txt |  1 -
 .../data/test-diff-filter/test14-0-report.txt |  1 -
 .../data/test-diff-filter/test14-1-report.txt |  1 -
 .../data/test-diff-filter/test15-1-report.txt |  1 +
 .../data/test-diff-filter/test16-report-2.txt |  1 -
 tests/data/test-diff-filter/test16-report.txt |  1 -
 .../data/test-diff-filter/test17-0-report.txt |  1 -
 .../data/test-diff-filter/test17-1-report.txt |  1 -
 tests/data/test-diff-filter/test18-report.txt |  1 -
 .../test-diff-filter/test19-enum-report-1.txt |  1 -
 tests/data/test-diff-filter/test2-report.txt  |  1 -
 .../test22-compatible-fns-report-0.txt        |  1 -
 ...st23-redundant-fn-parm-change-report-0.txt |  1 -
 .../test25-cyclic-type-report-0.txt           |  1 -
 .../test25-cyclic-type-report-1.txt           |  1 -
 ...st26-qualified-redundant-node-report-0.txt |  1 -
 ...st26-qualified-redundant-node-report-1.txt |  1 -
 ...t-and-filtered-children-nodes-report-0.txt |  1 -
 ...t-and-filtered-children-nodes-report-1.txt |  1 -
 ...t-and-filtered-children-nodes-report-2.txt |  1 -
 ...t-and-filtered-children-nodes-report-0.txt |  1 -
 ...t-and-filtered-children-nodes-report-1.txt |  1 -
 ...st29-finer-redundancy-marking-report-0.txt |  1 -
 tests/data/test-diff-filter/test3-report.txt  |  1 -
 .../test30-pr18904-rvalueref-report0.txt      |  1 -
 .../test30-pr18904-rvalueref-report1.txt      |  1 -
 .../test30-pr18904-rvalueref-report2.txt      |  1 -
 .../test31-pr18535-libstdc++-report-0.txt     |  1 -
 .../test31-pr18535-libstdc++-report-1.txt     |  1 -
 .../test32-ppc64le-struct-change-report0.txt  |  1 -
 .../test35-pr18754-no-added-syms-report-0.txt |  1 -
 .../data/test-diff-filter/test36-report-0.txt |  1 -
 .../data/test-diff-filter/test37-report-0.txt |  1 -
 .../test39/test39-report-0.txt                |  1 -
 .../data/test-diff-filter/test41-report-0.txt |  1 -
 .../test44-anonymous-data-member-report-0.txt |  1 -
 tests/data/test-diff-filter/test6-report.txt  |  1 -
 tests/data/test-diff-filter/test7-report.txt  |  1 -
 tests/data/test-diff-filter/test9-report.txt  |  1 -
 ...x86_64--2.24.2-30.fc30.x86_64-report-0.txt |  1 -
 .../PR24690/PR24690-report-0.txt              |  1 -
 .../data/test-diff-pkg/dirpkg-1-report-1.txt  |  1 -
 .../data/test-diff-pkg/dirpkg-3-report-1.txt  |  1 -
 .../data/test-diff-pkg/dirpkg-3-report-2.txt  |  1 -
 ...libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt |  2 +-
 ...4--libcdio-0.94-2.fc26.x86_64-report.1.txt |  1 -
 ...-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt |  1 -
 .../nss-3.23.0-1.0.fc23.x86_64-report-0.txt   |  3 ---
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-0.txt |  1 -
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-1.txt |  1 -
 ...l7.x86_64-0.12.8-1.el7.x86_64-report-2.txt |  1 -
 .../symlink-dir-test1-report0.txt             |  1 -
 .../data/test-diff-pkg/tarpkg-0-report-0.txt  |  1 -
 .../data/test-diff-pkg/tarpkg-1-report-0.txt  |  1 -
 ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt |  1 -
 ...bb-4.3-3.20141204.fc23.x86_64-report-1.txt |  1 -
 .../libtest48-soname-abixml-report-1.txt      |  1 -
 .../test0-type-suppr-report-0.txt             |  1 -
 .../test0-type-suppr-report-3.txt             |  1 -
 .../test0-type-suppr-report-5.txt             |  1 -
 .../test0-type-suppr-report-7.txt             |  1 -
 .../test1-typedef-suppr-report-0.txt          |  1 -
 .../test1-typedef-suppr-report-2.txt          |  1 -
 .../test10-changed-parm-c-report-0.txt        |  1 -
 .../test11-add-data-member-report-0.txt       |  1 -
 .../test12-add-data-member-report-0.txt       |  1 -
 .../test12-add-data-member-report-2.txt       |  1 -
 .../test13-suppr-through-pointer-report-0.txt |  1 -
 .../test13-suppr-through-pointer-report-1.txt |  1 -
 .../test14-suppr-non-redundant-report-0.txt   |  1 -
 .../test14-suppr-non-redundant-report-1.txt   |  1 -
 .../test15-suppr-added-fn-report-0.txt        |  1 -
 .../test15-suppr-added-fn-report-1.txt        |  1 -
 .../test15-suppr-added-fn-report-5.txt        |  1 -
 .../test16-suppr-removed-fn-report-0.txt      |  1 -
 .../test16-suppr-removed-fn-report-2.txt      |  1 -
 .../test2-struct-suppr-report-0.txt           |  1 -
 .../test23-alias-filter-report-0.txt          |  1 -
 .../test23-alias-filter-report-2.txt          |  1 -
 .../test24-soname-report-1.txt                |  1 -
 .../test24-soname-report-10.txt               |  1 -
 .../test24-soname-report-12.txt               |  1 -
 .../test24-soname-report-14.txt               |  1 -
 .../test24-soname-report-16.txt               |  1 -
 .../test24-soname-report-4.txt                |  1 -
 .../test25-typedef-report-0.txt               |  1 -
 .../test26-loc-suppr-report-0.txt             |  1 -
 .../test26-loc-suppr-report-3.txt             |  1 -
 .../test3-struct-suppr-report-0.txt           |  1 -
 .../test3-struct-suppr-report-1.txt           |  1 -
 .../test3-struct-suppr-report-2.txt           |  1 -
 .../data/test-diff-suppr/test30-report-0.txt  |  1 -
 .../data/test-diff-suppr/test31-report-1.txt  |  1 -
 .../data/test-diff-suppr/test32-report-0.txt  |  1 -
 .../data/test-diff-suppr/test32-report-1.txt  |  1 -
 .../data/test-diff-suppr/test33-report-0.txt  |  1 -
 .../test39-opaque-type-report-0.txt           |  1 -
 .../test4-local-suppr-report-0.txt            |  1 -
 .../test4-local-suppr-report-1.txt            |  1 -
 .../test41-enumerator-changes-report-0.txt    |  1 -
 .../test42-negative-suppr-type-report-0.txt   |  1 -
 .../test42-negative-suppr-type-report-1.txt   |  1 -
 .../test47-non-reachable-types-report-1.txt   |  1 -
 .../test47-non-reachable-types-report-2.txt   |  1 -
 .../test47-non-reachable-types-report-3.txt   |  1 -
 .../test47-non-reachable-types-report-4.txt   |  1 -
 .../test47-non-reachable-types-report-5.txt   |  1 -
 .../test47-non-reachable-types-report-7.txt   |  1 -
 .../test47-non-reachable-types-report-8.txt   |  1 -
 .../test5-fn-suppr-report-0.txt               |  1 -
 .../test5-fn-suppr-report-1.txt               |  1 -
 .../test5-fn-suppr-report-2.txt               |  1 -
 .../test5-fn-suppr-report-3.txt               |  1 -
 .../test5-fn-suppr-report-4.txt               |  1 -
 .../test5-fn-suppr-report-5.txt               |  1 -
 .../test6-fn-suppr-report-0-1.txt             |  1 -
 .../test6-fn-suppr-report-0.txt               |  1 -
 .../test6-fn-suppr-report-1.txt               |  1 -
 .../test6-fn-suppr-report-2.txt               |  1 -
 .../test6-fn-suppr-report-3.txt               |  1 -
 .../test7-var-suppr-report-0.txt              |  1 +
 .../test7-var-suppr-report-8.txt              |  1 +
 .../test8-redundant-fn-report-0.txt           |  1 -
 .../test8-redundant-fn-report-1.txt           |  1 -
 .../test9-changed-parm-c-report-0.txt         |  1 -
 .../test9-changed-parm-c-report-1.txt         |  1 -
 182 files changed, 25 insertions(+), 207 deletions(-)

diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index 57f641a2..e2f520fd 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -1855,7 +1855,6 @@ default_reporter::report(const corpus_diff& d, ostream& out,
 	out << indent << num_changed
 	    << " functions with some indirect sub-type change:\n\n";
 
-      bool emitted = false;
       vector<function_decl_diff_sptr> sorted_changed_fns;
       sort_string_function_decl_diff_sptr_map(d.priv_->changed_fns_map_,
 					      sorted_changed_fns);
@@ -1920,12 +1919,11 @@ default_reporter::report(const corpus_diff& d, ostream& out,
 		    }
 		}
 	      diff->report(out, indent + "    ");
+	      // Extra spacing.
 	      out << "\n";
-	      emitted = true;
 	    }
 	}
-      if (emitted)
-	out << "\n";
+      // Changed functions have extra spacing already. No new line here.
     }
 
   // Report removed/added/changed variables.
@@ -2020,7 +2018,6 @@ default_reporter::report(const corpus_diff& d, ostream& out,
 	    << " Changed variables:\n\n";
       string n1, n2;
 
-      bool emitted = false;
       for (var_diff_sptrs_type::const_iterator i =
 	     d.priv_->sorted_changed_vars_.begin();
 	   i != d.priv_->sorted_changed_vars_.end();
@@ -2043,10 +2040,10 @@ default_reporter::report(const corpus_diff& d, ostream& out,
 	  report_loc_info(diff->second_subject(), *ctxt, out);
 	  out << ":\n";
 	  diff->report(out, indent + "    ");
-	  emitted = true;
+	  // Extra spacing.
+	  out << "\n";
 	}
-      if (emitted)
-	out << "\n";
+      // Changed variables have extra spacing already. No new line here.
     }
 
   // Report removed function symbols not referenced by any debug info.
diff --git a/src/abg-leaf-reporter.cc b/src/abg-leaf-reporter.cc
index 58443b23..77569d2c 100644
--- a/src/abg-leaf-reporter.cc
+++ b/src/abg-leaf-reporter.cc
@@ -1140,7 +1140,6 @@ leaf_reporter::report(const corpus_diff& d,
 	out << indent << num_changed
 	    << " functions with some sub-type change:\n\n";
 
-      bool emitted = false;
       vector<function_decl_diff_sptr> sorted_changed_fns;
       sort_string_function_decl_diff_sptr_map(d.priv_->changed_fns_map_,
 					      sorted_changed_fns);
@@ -1192,11 +1191,11 @@ leaf_reporter::report(const corpus_diff& d,
 		    }
 		}
 	      diff->report(out, indent + "    ");
-	      emitted = true;
+	      // Extra spacing.
+	      out << "\n";
 	    }
 	}
-      if (emitted)
-	out << "\n";
+      // Changed functions have extra spacing already. No new line here.
     }
 
   // Report removed/added/changed variables.
@@ -1289,7 +1288,6 @@ leaf_reporter::report(const corpus_diff& d,
 	out << indent << num_changed
 	    << " Changed variables:\n\n";
       string n1, n2;
-      bool emitted = false;
       for (var_diff_sptrs_type::const_iterator i =
 	     d.priv_->sorted_changed_vars_.begin();
 	   i != d.priv_->sorted_changed_vars_.end();
@@ -1312,10 +1310,10 @@ leaf_reporter::report(const corpus_diff& d,
 	  report_loc_info(diff->second_subject(), *ctxt, out);
 	  out << ":\n";
 	  diff->report(out, indent + "    ");
-	  emitted = true;
+	  // Extra spacing.
+	  out << "\n";
 	}
-      if (emitted)
-	out << "\n";
+      // Changed variables have extra spacing already. No new line here.
     }
 
   // Report removed function symbols not referenced by any debug info.
diff --git a/src/abg-reporter-priv.cc b/src/abg-reporter-priv.cc
index 0d60fab4..f66a7721 100644
--- a/src/abg-reporter-priv.cc
+++ b/src/abg-reporter-priv.cc
@@ -1257,10 +1257,7 @@ maybe_report_unreachable_type_changes(const corpus_diff& d,
       emitted = true;
     }
   if (emitted)
-    {
-      out << "\n";
-      emitted = false;
-    }
+    out << "\n";
 
   // Handle changed unreachable types!
   if (s.net_num_changed_unreachable_types() == 1)
@@ -1274,7 +1271,6 @@ maybe_report_unreachable_type_changes(const corpus_diff& d,
   diff_sptrs_type sorted_diff_sptrs;
   sort_string_diff_sptr_map(d.priv_->changed_unreachable_types_,
 			    sorted_diff_sptrs);
-  emitted =  true;
   for (diff_sptrs_type::const_iterator i = sorted_diff_sptrs.begin();
        i != sorted_diff_sptrs.end();
        ++i)
@@ -1287,14 +1283,10 @@ maybe_report_unreachable_type_changes(const corpus_diff& d,
 
       out << indent << "  [C] '" << repr << "' changed:\n";
       diff->report(out, indent + "    ");
+      // Extra spacing.
       out << "\n";
-      emitted = true;
-    }
-  if (emitted)
-    {
-      out << "\n";
-      emitted = false;
     }
+  // Changed types have extra spacing already. No new line here.
 
   // Handle added unreachable types.
   if (s.net_num_added_unreachable_types() == 1)
@@ -1323,10 +1315,7 @@ maybe_report_unreachable_type_changes(const corpus_diff& d,
       emitted = true;
     }
   if (emitted)
-    {
-      out << "\n";
-      emitted = false;
-    }
+    out << "\n";
 }
 
 /// If a given diff node impacts some public interfaces, then report
diff --git a/tests/data/test-abicompat/test0-fn-changed-report-0.txt b/tests/data/test-abicompat/test0-fn-changed-report-0.txt
index b8884f8f..e81a8fdd 100644
--- a/tests/data/test-abicompat/test0-fn-changed-report-0.txt
+++ b/tests/data/test-abicompat/test0-fn-changed-report-0.txt
@@ -19,4 +19,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char libapp::S1::m1', at offset 32 (in bits)
           'unsigned int libapp::S1::m2', at offset 64 (in bits)
 
-
diff --git a/tests/data/test-abicompat/test0-fn-changed-report-2.txt b/tests/data/test-abicompat/test0-fn-changed-report-2.txt
index fc55ef62..a9d2efd4 100644
--- a/tests/data/test-abicompat/test0-fn-changed-report-2.txt
+++ b/tests/data/test-abicompat/test0-fn-changed-report-2.txt
@@ -19,4 +19,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char libapp::S1::m1', at offset 32 (in bits) at test0-fn-changed-libapp-v1.cc:24:1
           'unsigned int libapp::S1::m2', at offset 64 (in bits) at test0-fn-changed-libapp-v1.cc:25:1
 
-
diff --git a/tests/data/test-abicompat/test7-fn-changed-report-0.txt b/tests/data/test-abicompat/test7-fn-changed-report-0.txt
index 6a34710d..a1c822ac 100644
--- a/tests/data/test-abicompat/test7-fn-changed-report-0.txt
+++ b/tests/data/test-abicompat/test7-fn-changed-report-0.txt
@@ -16,4 +16,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'float Student::percentage', at offset 128 (in bits)
 
-
diff --git a/tests/data/test-abidiff-exit/test-leaf3-report.txt b/tests/data/test-abidiff-exit/test-leaf3-report.txt
index 86517f87..34b7a848 100644
--- a/tests/data/test-abidiff-exit/test-leaf3-report.txt
+++ b/tests/data/test-abidiff-exit/test-leaf3-report.txt
@@ -9,15 +9,18 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'struct sto1' changed:
       type name changed from 'sto1' to 'stn1'
       type size hasn't changed
+
   [C] 'function void fn2(sto2)' at test-leaf3-v1.c:13:1 has some sub-type changes:
     parameter 1 of type 'struct sto2' changed:
       type name changed from 'sto2' to 'stn2'
       type size changed from 64 to 128 (in bits)
       1 data member insertion:
         'double stn2::y', at offset 64 (in bits) at test-leaf3-v1.c:7:1
+
   [C] 'function void fn3(sto1*)' at test-leaf3-v1.c:16:1 has some sub-type changes:
     parameter 1 of type 'sto1*' changed:
       pointer type changed from: 'sto1*' to: 'stn1*'
+
   [C] 'function void fn4(sto2*)' at test-leaf3-v1.c:19:1 has some sub-type changes:
     parameter 1 of type 'sto2*' changed:
       pointer type changed from: 'sto2*' to: 'stn2*'
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 bc37ff53..b5763b95 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
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       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 56c41d79..2f244fbd 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
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'unsigned char' to 'signed char'
       type size hasn't changed
 
-
diff --git a/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt b/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt
index c8396254..7080934a 100644
--- a/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt
+++ b/tests/data/test-abidiff-exit/test1-voffset-change-report0.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     the vtable offset of method virtual char C::virtual_func1() changed from 1 to 0
       note that this is an ABI incompatible change to the vtable of class C
 
-
diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt
index 2e847fb2..3c26de12 100644
--- a/tests/data/test-abidiff/test-PR18791-report0.txt
+++ b/tests/data/test-abidiff/test-PR18791-report0.txt
@@ -189,4 +189,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       in referenced type 'const sigc::trackable':
         unqualified underlying type 'struct sigc::trackable' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
index 9cba98e3..8a13f3b3 100644
--- a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
+++ b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
@@ -327,7 +327,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
     parameter 1 of type 'YYSTYPE*' has sub-type changes:
       pointed to type 'typedef YYSTYPE' changed, as reported earlier
 
-
 3 Added variables:
 
   [A] 'const char* const mi_lttng_element_command_disable_rotation'
diff --git a/tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt b/tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt
index b1fad0ee..c5a6e0a3 100644
--- a/tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt
+++ b/tests/data/test-diff-dwarf/test-23-diff-arch-report-0.txt
@@ -9,4 +9,3 @@ architecture changed from 'elf-intel-80386' to 'elf-amd-x86_64'
   [C] 'function int foo()' has some indirect sub-type changes:
     address size of function changed from 32 bits to 64 bits
 
-
diff --git a/tests/data/test-diff-dwarf/test0-report.txt b/tests/data/test-diff-dwarf/test0-report.txt
index 03ce0f6a..05cc3bdf 100644
--- a/tests/data/test-diff-dwarf/test0-report.txt
+++ b/tests/data/test-diff-dwarf/test0-report.txt
@@ -20,4 +20,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
 
-
diff --git a/tests/data/test-diff-dwarf/test1-report.txt b/tests/data/test-diff-dwarf/test1-report.txt
index 9c7178f3..39f6072d 100644
--- a/tests/data/test-diff-dwarf/test1-report.txt
+++ b/tests/data/test-diff-dwarf/test1-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test10-report.txt b/tests/data/test-diff-dwarf/test10-report.txt
index 96e0d46c..ea1817b7 100644
--- a/tests/data/test-diff-dwarf/test10-report.txt
+++ b/tests/data/test-diff-dwarf/test10-report.txt
@@ -21,4 +21,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size hasn't changed
           and offset changed from 512 to 640 (in bits) (by +128 bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test11-report.txt b/tests/data/test-diff-dwarf/test11-report.txt
index 0979602f..0675db65 100644
--- a/tests/data/test-diff-dwarf/test11-report.txt
+++ b/tests/data/test-diff-dwarf/test11-report.txt
@@ -18,4 +18,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             array type subrange 2 changed length from 4 to 5
           and offset changed from 480 to 576 (in bits) (by +96 bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test13-report.txt b/tests/data/test-diff-dwarf/test13-report.txt
index 170fb3dd..d2148fe4 100644
--- a/tests/data/test-diff-dwarf/test13-report.txt
+++ b/tests/data/test-diff-dwarf/test13-report.txt
@@ -16,4 +16,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size changed from 32 to 64 (in bits)
           'unsigned char S::m3' offset changed from 96 to 128 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test15-enum-report.txt b/tests/data/test-diff-dwarf/test15-enum-report.txt
index 337d9c35..ae6370b7 100644
--- a/tests/data/test-diff-dwarf/test15-enum-report.txt
+++ b/tests/data/test-diff-dwarf/test15-enum-report.txt
@@ -13,4 +13,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           '__anonymous_enum__::v5' value '5'
 
 
-
diff --git a/tests/data/test-diff-dwarf/test2-report.txt b/tests/data/test-diff-dwarf/test2-report.txt
index 902ca456..556c611d 100644
--- a/tests/data/test-diff-dwarf/test2-report.txt
+++ b/tests/data/test-diff-dwarf/test2-report.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 2 of type 'char' changed:
       entity changed from 'char' to compatible type 'typedef Char'
 
-
diff --git a/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt b/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt
index f79b6d99..18b30645 100644
--- a/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt
+++ b/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt
@@ -7,4 +7,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 3 of type 'int' was added
 
 
-
diff --git a/tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt b/tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt
index 1582fffc..9b7599d0 100644
--- a/tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt
+++ b/tests/data/test-diff-dwarf/test21-redundant-fn-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'S*' has sub-type changes:
       pointed to type 'struct S' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt b/tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt
index 89e0d179..ef3e23e4 100644
--- a/tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt
+++ b/tests/data/test-diff-dwarf/test22-changed-parm-c-report-0.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'int' to 'char'
       type size changed from 32 to 8 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt b/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt
index 860fb791..8a21e38c 100644
--- a/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt
+++ b/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 3 of type 'int' was added
 
 
-
diff --git a/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt b/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt
index 78d341e9..1253a8be 100644
--- a/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt
+++ b/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 3 of type 'int' was removed
 
 
-
diff --git a/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt b/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt
index b87e4635..2432e53c 100644
--- a/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt
+++ b/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt
@@ -31,4 +31,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 4 of type '...' was added
 
 
-
diff --git a/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt b/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt
index 3df36134..050afd22 100644
--- a/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt
+++ b/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt
@@ -21,4 +21,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S::m0' offset changed from 32 to 64 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt
index 6f015fc8..f18439f5 100644
--- a/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test28-vtable-changes-report-0.txt
@@ -16,7 +16,6 @@ Variable symbols changes summary: 0 Removed, 3 Added variable symbols not refere
     method void S::bar() is now declared virtual
       note that this is an ABI incompatible change to the vtable of struct S
 
-
 3 Added variable symbols not referenced by debug info:
 
   [A] _ZTI1S
diff --git a/tests/data/test-diff-dwarf/test3-report.txt b/tests/data/test-diff-dwarf/test3-report.txt
index a556b0f8..b8166a7f 100644
--- a/tests/data/test-diff-dwarf/test3-report.txt
+++ b/tests/data/test-diff-dwarf/test3-report.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char C0::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt
index 4153952e..64e5604e 100644
--- a/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test30-vtable-changes-report-0.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     the vtable offset of method virtual void S::fn1() changed from 3 to 4
       note that this is an ABI incompatible change to the vtable of struct S
 
-
diff --git a/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt b/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt
index a36122c1..624c1233 100644
--- a/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test31-vtable-changes-report-0.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     the vtable offset of method virtual void S::fn1() changed from 3 to 2
       note that this is an ABI incompatible change to the vtable of struct S
 
-
diff --git a/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt b/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt
index e6c205ed..b3a0f9c4 100644
--- a/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt
@@ -42,4 +42,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           entity changed from 'int ()*' to 'int'
           type size changed from 64 to 32 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt b/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt
index acf078c1..8b529fdc 100644
--- a/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt
@@ -44,4 +44,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               entity changed from 'function type int ()' to 'int'
               type size changed from 64 to 32 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt b/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt
index 62709474..54156226 100644
--- a/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt
+++ b/tests/data/test-diff-dwarf/test36-ppc64-aliases-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'int S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test37-union-report-0.txt b/tests/data/test-diff-dwarf/test37-union-report-0.txt
index c399e94c..33b0ac1a 100644
--- a/tests/data/test-diff-dwarf/test37-union-report-0.txt
+++ b/tests/data/test-diff-dwarf/test37-union-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'S some_union_type::m2'
 
-
diff --git a/tests/data/test-diff-dwarf/test38-union-report-0.txt b/tests/data/test-diff-dwarf/test38-union-report-0.txt
index 79c40a36..fd9708e6 100644
--- a/tests/data/test-diff-dwarf/test38-union-report-0.txt
+++ b/tests/data/test-diff-dwarf/test38-union-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         to:
           union some_union_type{char m1; S m2;}
 
-
diff --git a/tests/data/test-diff-dwarf/test39-union-report-0.txt b/tests/data/test-diff-dwarf/test39-union-report-0.txt
index 0fe91e1d..560de2ae 100644
--- a/tests/data/test-diff-dwarf/test39-union-report-0.txt
+++ b/tests/data/test-diff-dwarf/test39-union-report-0.txt
@@ -13,4 +13,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             1 data member insertion:
               'char S::S_member2', at offset 64 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test4-report.txt b/tests/data/test-diff-dwarf/test4-report.txt
index 42ea4807..78972227 100644
--- a/tests/data/test-diff-dwarf/test4-report.txt
+++ b/tests/data/test-diff-dwarf/test4-report.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int C0::m0' access changed from 'private' to 'public'
 
-
diff --git a/tests/data/test-diff-dwarf/test40-report-0.txt b/tests/data/test-diff-dwarf/test40-report-0.txt
index 3aa1e286..3f956d7a 100644
--- a/tests/data/test-diff-dwarf/test40-report-0.txt
+++ b/tests/data/test-diff-dwarf/test40-report-0.txt
@@ -32,4 +32,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'int S1::m0' offset changed from 0 to 64 (in bits) (by +64 bits)
           'char S1::m1' offset changed from 32 to 96 (in bits) (by +64 bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt b/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
index df387deb..d88db9c4 100644
--- a/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
+++ b/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
@@ -16,4 +16,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               note that this is an ABI incompatible change to the vtable of class Interface
 
 
-
diff --git a/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt b/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
index 71a2cc3a..b45fa918 100644
--- a/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
+++ b/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
@@ -77,4 +77,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'class std::tuple<STR&&>' changed:
       details were reported earlier
 
-
diff --git a/tests/data/test-diff-dwarf/test43-PR22913-report-0.txt b/tests/data/test-diff-dwarf/test43-PR22913-report-0.txt
index 60681336..fc35f21d 100644
--- a/tests/data/test-diff-dwarf/test43-PR22913-report-0.txt
+++ b/tests/data/test-diff-dwarf/test43-PR22913-report-0.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member deletion:
             'char m2', at offset 8 (in bits)
 
-
diff --git a/tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt b/tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt
index 7dfa3390..5a8b4f15 100644
--- a/tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt
+++ b/tests/data/test-diff-dwarf/test44-anon-struct-union-report-0.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             entity changed from 'union {int d; char c;}' to 'int'
             type size hasn't changed
 
-
diff --git a/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt b/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt
index 51f271c1..f7ad7cbc 100644
--- a/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt
+++ b/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt
@@ -19,4 +19,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         type size hasn't changed
         1 data member change:
           data member int S0::m0 at offset 0 (in bits) became anonymous data member 'union {int m0; char m01;}'
-
diff --git a/tests/data/test-diff-dwarf/test46-rust-report-0.txt b/tests/data/test-diff-dwarf/test46-rust-report-0.txt
index 109abd65..0c745256 100644
--- a/tests/data/test-diff-dwarf/test46-rust-report-0.txt
+++ b/tests/data/test-diff-dwarf/test46-rust-report-0.txt
@@ -15,4 +15,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 2 of type 'u32' was added
 
 
-
diff --git a/tests/data/test-diff-dwarf/test5-report.txt b/tests/data/test-diff-dwarf/test5-report.txt
index 81a4aa38..63d7ffa9 100644
--- a/tests/data/test-diff-dwarf/test5-report.txt
+++ b/tests/data/test-diff-dwarf/test5-report.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int C0::m0' access changed from 'private' to 'public'
 
-
diff --git a/tests/data/test-diff-dwarf/test6-report.txt b/tests/data/test-diff-dwarf/test6-report.txt
index cb7b00b6..bf5cb174 100644
--- a/tests/data/test-diff-dwarf/test6-report.txt
+++ b/tests/data/test-diff-dwarf/test6-report.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           name of 'S0::m2' changed to 'S0::m12'
 
-
diff --git a/tests/data/test-diff-dwarf/test8-report.txt b/tests/data/test-diff-dwarf/test8-report.txt
index 5069e8ab..ee185dbf 100644
--- a/tests/data/test-diff-dwarf/test8-report.txt
+++ b/tests/data/test-diff-dwarf/test8-report.txt
@@ -25,4 +25,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size changed from 32 to 8 (in bits)
           and offset changed from 32 to 64 (in bits) (by +32 bits), access changed from 'public' to 'private'
 
-
diff --git a/tests/data/test-diff-filter/libtest45-basic-type-change-report-0.txt b/tests/data/test-diff-filter/libtest45-basic-type-change-report-0.txt
index 6de2ad07..1b3c7d92 100644
--- a/tests/data/test-diff-filter/libtest45-basic-type-change-report-0.txt
+++ b/tests/data/test-diff-filter/libtest45-basic-type-change-report-0.txt
@@ -48,4 +48,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'int' to 'char'
       type size changed from 32 to 8 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt b/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
index 5b2d2267..d2cb8097 100644
--- a/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
+++ b/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
@@ -8,12 +8,15 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'function int& foo0(S0&)' at test45-basic-type-change-v1.cc:24:1 has some sub-type changes:
     return type changed:
       reference type changed from: 'int&' to: 'char&'
+
   [C] 'function int* foo1(S1&)' at test45-basic-type-change-v1.cc:28:1 has some sub-type changes:
     return type changed:
       pointer type changed from: 'int*' to: 'char*'
+
   [C] 'function const int foo2(S2&)' at test45-basic-type-change-v1.cc:32:1 has some sub-type changes:
     return type changed:
       'const int' changed to 'const char'
+
   [C] 'function int foo3(S2&)' at test45-basic-type-change-v1.cc:36:1 has some sub-type changes:
     return type changed:
       type name changed from 'int' to 'char'
diff --git a/tests/data/test-diff-filter/test-PR24731-report-1.txt b/tests/data/test-diff-filter/test-PR24731-report-1.txt
index a07e6d68..759fc39c 100644
--- a/tests/data/test-diff-filter/test-PR24731-report-1.txt
+++ b/tests/data/test-diff-filter/test-PR24731-report-1.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       to:
         union u{int a; short int s; char c;}
 
-
diff --git a/tests/data/test-diff-filter/test0-report.txt b/tests/data/test-diff-filter/test0-report.txt
index bb42e471..1dc19ed9 100644
--- a/tests/data/test-diff-filter/test0-report.txt
+++ b/tests/data/test-diff-filter/test0-report.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-filter/test01-report.txt b/tests/data/test-diff-filter/test01-report.txt
index a208f2e0..8c08ddb9 100644
--- a/tests/data/test-diff-filter/test01-report.txt
+++ b/tests/data/test-diff-filter/test01-report.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
 
-
diff --git a/tests/data/test-diff-filter/test1-report.txt b/tests/data/test-diff-filter/test1-report.txt
index 064b41ec..6fc96cbf 100644
--- a/tests/data/test-diff-filter/test1-report.txt
+++ b/tests/data/test-diff-filter/test1-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int C1::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-filter/test10-report.txt b/tests/data/test-diff-filter/test10-report.txt
index 9b798f73..4d08d4bd 100644
--- a/tests/data/test-diff-filter/test10-report.txt
+++ b/tests/data/test-diff-filter/test10-report.txt
@@ -15,4 +15,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member deletion:
           'unsigned int S::m', at offset 0 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test11-report.txt b/tests/data/test-diff-filter/test11-report.txt
index c3b9672e..5c5875b4 100644
--- a/tests/data/test-diff-filter/test11-report.txt
+++ b/tests/data/test-diff-filter/test11-report.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'unsigned int S0::m2', at offset 64 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test13-report.txt b/tests/data/test-diff-filter/test13-report.txt
index a4582051..17844fa6 100644
--- a/tests/data/test-diff-filter/test13-report.txt
+++ b/tests/data/test-diff-filter/test13-report.txt
@@ -20,4 +20,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size changed from 32 to 8 (in bits)
           and offset changed from 32 to 64 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-filter/test14-0-report.txt b/tests/data/test-diff-filter/test14-0-report.txt
index 52cdcf89..bbc05f06 100644
--- a/tests/data/test-diff-filter/test14-0-report.txt
+++ b/tests/data/test-diff-filter/test14-0-report.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'unsigned int S::m2', at offset 64 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test14-1-report.txt b/tests/data/test-diff-filter/test14-1-report.txt
index 27df61a8..101722b4 100644
--- a/tests/data/test-diff-filter/test14-1-report.txt
+++ b/tests/data/test-diff-filter/test14-1-report.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'S&' has sub-type changes:
       referenced type 'struct S' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-filter/test15-1-report.txt b/tests/data/test-diff-filter/test15-1-report.txt
index 9dd1ad59..25d2ac42 100644
--- a/tests/data/test-diff-filter/test15-1-report.txt
+++ b/tests/data/test-diff-filter/test15-1-report.txt
@@ -9,6 +9,7 @@ Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
         type size changed from 64 to 96 (in bits)
         1 data member insertion:
           'unsigned int S::m2', at offset 64 (in bits)
+
   [C] 'S* var2' was changed:
     type of variable changed:
       pointed to type 'struct S' changed, as reported earlier
diff --git a/tests/data/test-diff-filter/test16-report-2.txt b/tests/data/test-diff-filter/test16-report-2.txt
index c85d1a84..a90e85ad 100644
--- a/tests/data/test-diff-filter/test16-report-2.txt
+++ b/tests/data/test-diff-filter/test16-report-2.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             pointed to type 'struct S' changed; details are being reported
           and offset changed from 0 to 64 (in bits) (by +64 bits)
 
-
diff --git a/tests/data/test-diff-filter/test16-report.txt b/tests/data/test-diff-filter/test16-report.txt
index 80c3f1ec..e195097f 100644
--- a/tests/data/test-diff-filter/test16-report.txt
+++ b/tests/data/test-diff-filter/test16-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'S* S::m2' offset changed from 0 to 64 (in bits) (by +64 bits)
 
-
diff --git a/tests/data/test-diff-filter/test17-0-report.txt b/tests/data/test-diff-filter/test17-0-report.txt
index a90cab1e..20036821 100644
--- a/tests/data/test-diff-filter/test17-0-report.txt
+++ b/tests/data/test-diff-filter/test17-0-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'S* S::m2' offset changed from 0 to 64 (in bits) (by +64 bits)
 
-
diff --git a/tests/data/test-diff-filter/test17-1-report.txt b/tests/data/test-diff-filter/test17-1-report.txt
index 83a8945c..7c51152a 100644
--- a/tests/data/test-diff-filter/test17-1-report.txt
+++ b/tests/data/test-diff-filter/test17-1-report.txt
@@ -18,4 +18,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'S&' has sub-type changes:
       referenced type 'struct S' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-filter/test18-report.txt b/tests/data/test-diff-filter/test18-report.txt
index c93ca49e..a2a10964 100644
--- a/tests/data/test-diff-filter/test18-report.txt
+++ b/tests/data/test-diff-filter/test18-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type name changed from 'int' to 'unsigned int'
             type size hasn't changed
 
-
diff --git a/tests/data/test-diff-filter/test19-enum-report-1.txt b/tests/data/test-diff-filter/test19-enum-report-1.txt
index 337d9c35..ae6370b7 100644
--- a/tests/data/test-diff-filter/test19-enum-report-1.txt
+++ b/tests/data/test-diff-filter/test19-enum-report-1.txt
@@ -13,4 +13,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           '__anonymous_enum__::v5' value '5'
 
 
-
diff --git a/tests/data/test-diff-filter/test2-report.txt b/tests/data/test-diff-filter/test2-report.txt
index e9c040ff..3e68ab6d 100644
--- a/tests/data/test-diff-filter/test2-report.txt
+++ b/tests/data/test-diff-filter/test2-report.txt
@@ -24,4 +24,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'E0 C0::m0' offset changed from 0 to 8 (in bits) (by +8 bits)
           'E1 C0::m1' offset changed from 8 to 16 (in bits) (by +8 bits)
 
-
diff --git a/tests/data/test-diff-filter/test22-compatible-fns-report-0.txt b/tests/data/test-diff-filter/test22-compatible-fns-report-0.txt
index bdbca052..c7bdffbd 100644
--- a/tests/data/test-diff-filter/test22-compatible-fns-report-0.txt
+++ b/tests/data/test-diff-filter/test22-compatible-fns-report-0.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       in pointed to type 'const volatile S* const* const':
         'const volatile S* const* const' changed to 'const volatile typedef_of_S* const* const'
 
-
diff --git a/tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt b/tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt
index 99c14329..4c1c9e23 100644
--- a/tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt
+++ b/tests/data/test-diff-filter/test23-redundant-fn-parm-change-report-0.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'int' to 'float'
       type size hasn't changed
 
-
diff --git a/tests/data/test-diff-filter/test25-cyclic-type-report-0.txt b/tests/data/test-diff-filter/test25-cyclic-type-report-0.txt
index 8f96c202..4c9d2606 100644
--- a/tests/data/test-diff-filter/test25-cyclic-type-report-0.txt
+++ b/tests/data/test-diff-filter/test25-cyclic-type-report-0.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char S::m1', at offset 32 (in bits)
         no data member change (1 filtered);
 
-
diff --git a/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt b/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt
index c9bb7279..6a6beeef 100644
--- a/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt
+++ b/tests/data/test-diff-filter/test25-cyclic-type-report-1.txt
@@ -13,4 +13,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           type of 'S* S::m2' changed:
             pointed to type 'struct S' changed; details are being reported
 
-
diff --git a/tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt b/tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt
index de0be3d4..77725e8c 100644
--- a/tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt
+++ b/tests/data/test-diff-filter/test26-qualified-redundant-node-report-0.txt
@@ -17,4 +17,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
                     1 data member insertion:
                       'char FooStruct::Embedded::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt b/tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt
index 4db74fdb..23083ada 100644
--- a/tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt
+++ b/tests/data/test-diff-filter/test26-qualified-redundant-node-report-1.txt
@@ -20,4 +20,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
                   in pointed to type 'FooStruct::Embedded*':
                     pointed to type 'struct FooStruct::Embedded' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt b/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt
index 7197c376..45548733 100644
--- a/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt
+++ b/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S0::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt b/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt
index dbd7224f..14f0813c 100644
--- a/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt
+++ b/tests/data/test-diff-filter/test27-redundant-and-filtered-children-nodes-report-1.txt
@@ -18,4 +18,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           type of 'S0* S::m0' changed:
             pointed to type 'struct S0' changed, as reported earlier
 
-
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 8233d1a1..7703ecf1 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
@@ -30,4 +30,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             in pointed to type 'struct S2':
               entity changed from 'struct S2' to compatible type 'typedef S2Renamed'
 
-
diff --git a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt
index 9e5fb48b..5db38b25 100644
--- a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt
+++ b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char s::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt
index 11a44d5e..95dd372f 100644
--- a/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt
+++ b/tests/data/test-diff-filter/test28-redundant-and-filtered-children-nodes-report-1.txt
@@ -20,4 +20,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       in referenced type 'const s':
         unqualified underlying type 'class s' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt b/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt
index 5a84c530..2cb2c362 100644
--- a/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt
+++ b/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt
@@ -25,4 +25,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int inherited::m0' offset changed from 32 to 64 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-filter/test3-report.txt b/tests/data/test-diff-filter/test3-report.txt
index ff099fd9..e7ce5bb5 100644
--- a/tests/data/test-diff-filter/test3-report.txt
+++ b/tests/data/test-diff-filter/test3-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'char S::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
index 908aff7c..b1dd3c74 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
@@ -1438,7 +1438,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
     parameter 1 of type 'const VarTable::Entry*&&' changed:
       rvalue reference type 'const VarTable::Entry*&& became an lvalue reference type: 'const VarTable::Entry*&'
 
-
 47 Removed variables:
 
   [D] 'typedef COIRESULT (typedef COIBUFFER, typedef COIBUFFER, typedef uint64_t, typedef uint64_t, typedef uint64_t, typedef COI_COPY_TYPE, typedef uint32_t, const COIEVENT*, COIEVENT*)* COI::BufferCopy'
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
index 0299ad9f..c49d6c68 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
@@ -1438,7 +1438,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
     parameter 1 of type 'const VarTable::Entry*&&' changed:
       rvalue reference type 'const VarTable::Entry*&& became an lvalue reference type: 'const VarTable::Entry*&'
 
-
 47 Removed variables:
 
   [D] 'typedef COIRESULT (typedef COIBUFFER, typedef COIBUFFER, typedef uint64_t, typedef uint64_t, typedef uint64_t, typedef COI_COPY_TYPE, typedef uint32_t, const COIEVENT*, COIEVENT*)* COI::BufferCopy'
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
index bbd79fc3..f0986450 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
@@ -1438,7 +1438,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
     parameter 1 of type 'const VarTable::Entry*&&' changed:
       rvalue reference type 'const VarTable::Entry*&& became an lvalue reference type: 'const VarTable::Entry*&'
 
-
 47 Removed variables:
 
   [D] 'typedef COIRESULT (typedef COIBUFFER, typedef COIBUFFER, typedef uint64_t, typedef uint64_t, typedef uint64_t, typedef COI_COPY_TYPE, typedef uint32_t, const COIEVENT*, COIEVENT*)* COI::BufferCopy'
diff --git a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
index 04c27eea..b1bc0e3a 100644
--- a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
+++ b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
@@ -48,7 +48,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
         'std::regex_constants::error_type::_S_error_last' value '13'
 
 
-
 6 Added variable symbols not referenced by debug info:
 
   [A] _ZTISt16bad_array_length@@CXXABI_1.3.8
diff --git a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
index b69e06d5..440e5720 100644
--- a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
+++ b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
@@ -48,7 +48,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
         'std::regex_constants::error_type::_S_error_last' value '13'
 
 
-
 6 Added variable symbols not referenced by debug info:
 
   [A] _ZTISt16bad_array_length@@CXXABI_1.3.8
diff --git a/tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt b/tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt
index 69ed568c..6172cccf 100644
--- a/tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt
+++ b/tests/data/test-diff-filter/test32-ppc64le-struct-change-report0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
index c502805f..4bda6f6c 100644
--- a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
+++ b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
@@ -354,7 +354,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
     parameter 1 of type 'const VarTable::Entry*&&' changed:
       rvalue reference type 'const VarTable::Entry*&& became an lvalue reference type: 'const VarTable::Entry*&'
 
-
 47 Removed variables:
 
   [D] 'typedef COIRESULT (typedef COIBUFFER, typedef COIBUFFER, typedef uint64_t, typedef uint64_t, typedef uint64_t, typedef COI_COPY_TYPE, typedef uint32_t, const COIEVENT*, COIEVENT*)* COI::BufferCopy'
diff --git a/tests/data/test-diff-filter/test36-report-0.txt b/tests/data/test-diff-filter/test36-report-0.txt
index 4a7f1aac..12916d66 100644
--- a/tests/data/test-diff-filter/test36-report-0.txt
+++ b/tests/data/test-diff-filter/test36-report-0.txt
@@ -24,4 +24,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type name changed from 'int' to 'unsigned int'
             type size hasn't changed
 
-
diff --git a/tests/data/test-diff-filter/test37-report-0.txt b/tests/data/test-diff-filter/test37-report-0.txt
index 404a5d20..582a7b3a 100644
--- a/tests/data/test-diff-filter/test37-report-0.txt
+++ b/tests/data/test-diff-filter/test37-report-0.txt
@@ -30,4 +30,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type name changed from 'int' to 'char'
             type size changed from 32 to 8 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test39/test39-report-0.txt b/tests/data/test-diff-filter/test39/test39-report-0.txt
index 87e9dce0..d7f3e24d 100644
--- a/tests/data/test-diff-filter/test39/test39-report-0.txt
+++ b/tests/data/test-diff-filter/test39/test39-report-0.txt
@@ -25,4 +25,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               1 data member insertion:
                 'unsigned char opaque_type::m1', at offset 32 (in bits) at test39-c-v1.c:6:1
 
-
diff --git a/tests/data/test-diff-filter/test41-report-0.txt b/tests/data/test-diff-filter/test41-report-0.txt
index c3945cce..da9a820a 100644
--- a/tests/data/test-diff-filter/test41-report-0.txt
+++ b/tests/data/test-diff-filter/test41-report-0.txt
@@ -49,7 +49,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
 
   [C] 'method bool abigail::xml_writer::write_context::type_ptr_cmp::operator()(const abigail::ir::type_base*, const abigail::ir::type_base*) const' at abg-writer.cc:359:1 has some indirect sub-type changes:
 
-
 1 Removed function symbol not referenced by debug info:
 
   [D] _ZN7abigail10xml_writer13write_contextD1Ev
diff --git a/tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt b/tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt
index b2f1a4c2..b8bb951c 100644
--- a/tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt
+++ b/tests/data/test-diff-filter/test44-anonymous-data-member-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             struct {int b; float c; char e;}
           'int S2::d' offset changed from 96 to 128 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-filter/test6-report.txt b/tests/data/test-diff-filter/test6-report.txt
index ddf991f7..61fb1d93 100644
--- a/tests/data/test-diff-filter/test6-report.txt
+++ b/tests/data/test-diff-filter/test6-report.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         type name changed from 'unsigned char' to 'unsigned int'
         type size changed from 8 to 32 (in bits)
 
-
diff --git a/tests/data/test-diff-filter/test7-report.txt b/tests/data/test-diff-filter/test7-report.txt
index 26933033..2a28163f 100644
--- a/tests/data/test-diff-filter/test7-report.txt
+++ b/tests/data/test-diff-filter/test7-report.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type size hasn't changed
       no data member change (1 filtered);
 
-
diff --git a/tests/data/test-diff-filter/test9-report.txt b/tests/data/test-diff-filter/test9-report.txt
index 0787f566..867b83ad 100644
--- a/tests/data/test-diff-filter/test9-report.txt
+++ b/tests/data/test-diff-filter/test9-report.txt
@@ -15,4 +15,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'int S::m0', at offset 0 (in bits)
 
-
diff --git a/tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt b/tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt
index 9167fa72..6358be7b 100644
--- a/tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/GtkAda-gl-2.24.2-29.fc29.x86_64--2.24.2-30.fc30.x86_64-report-0.txt
@@ -38,7 +38,6 @@
                     entity changed from 'integer' to '<range natural___XDLU_0__2147483647>[2147483648]'
                     type size changed from 32 to 2147483647 (in bits)
 
-
   6 Removed variable symbols not referenced by debug info:
 
     [D] gtk__glarea__C210s
diff --git a/tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt b/tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt
index 5582b1f9..4dd8f2e7 100644
--- a/tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt
+++ b/tests/data/test-diff-pkg/PR24690/PR24690-report-0.txt
@@ -40,7 +40,6 @@
         'typedef gboolean (FlatpakTransaction*, GCancellable*, GError**)* _FlatpakTransactionClass::run' offset changed from 1536 to 1600 (in bits) (by +64 bits)
         'gpointer _FlatpakTransactionClass::padding[9]' offset changed from 1600 to 1664 (in bits) (by +64 bits)
 
-
   3 added types unreachable from any public interface:
 
     [A] 'struct gpgme_data_cbs' at gpgme-64.h:1139:1
diff --git a/tests/data/test-diff-pkg/dirpkg-1-report-1.txt b/tests/data/test-diff-pkg/dirpkg-1-report-1.txt
index 8631497a..6b475942 100644
--- a/tests/data/test-diff-pkg/dirpkg-1-report-1.txt
+++ b/tests/data/test-diff-pkg/dirpkg-1-report-1.txt
@@ -11,6 +11,5 @@
           1 data member insertion:
             'char S::mem1', at offset 32 (in bits)
 
-
 ================ end of changes of 'libobj-v0.so'===============
 
diff --git a/tests/data/test-diff-pkg/dirpkg-3-report-1.txt b/tests/data/test-diff-pkg/dirpkg-3-report-1.txt
index 3bc01e14..6a48bb59 100644
--- a/tests/data/test-diff-pkg/dirpkg-3-report-1.txt
+++ b/tests/data/test-diff-pkg/dirpkg-3-report-1.txt
@@ -11,6 +11,5 @@
           1 data member insertion:
             'int S1::mem2', at offset 0 (in bits)
 
-
 ================ end of changes of 'libobj-v0.so'===============
 
diff --git a/tests/data/test-diff-pkg/dirpkg-3-report-2.txt b/tests/data/test-diff-pkg/dirpkg-3-report-2.txt
index 5ed307f2..cff94ef5 100644
--- a/tests/data/test-diff-pkg/dirpkg-3-report-2.txt
+++ b/tests/data/test-diff-pkg/dirpkg-3-report-2.txt
@@ -11,6 +11,5 @@
           1 data member insertion:
             'int S1::mem2', at offset 0 (in bits) at obj-v0.cc:17:1
 
-
 ================ end of changes of 'libobj-v0.so'===============
 
diff --git a/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt b/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
index f37cfc6d..487c672c 100644
--- a/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
+++ b/tests/data/test-diff-pkg/libICE-1.0.6-1.el6.x86_64.rpm--libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt
@@ -78,7 +78,6 @@
                 in pointed to type 'struct _IcePingWait' at ICEconn.h:48:1:
                   entity changed from 'struct _IcePingWait' to compatible type 'typedef _IcePingWait' at ICEconn.h:48:1
 
-
   1 Removed variable:
 
     [D] 'const in6_addr in6addr_any'    {in6addr_any}
@@ -93,6 +92,7 @@
             type size hasn't changed
         type name changed from 'char*[1]' to 'const char*[1]'
         type size hasn't changed
+
     [C] '_IceWatchProc* _IceWatchProcs' was changed at globals.h:39:1:
       type of variable changed:
         in pointed to type 'struct _IceWatchProc' at ICElibint.h:322:1:
diff --git a/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt b/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt
index d3239574..929f43a3 100644
--- a/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt
+++ b/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt
@@ -38,7 +38,6 @@
       parameter 3 of type 'cdio_dvd_struct_t*' has sub-type changes:
         pointed to type 'typedef cdio_dvd_struct_t' changed at dvd.h:130:1, as reported earlier
 
-
 ================ end of changes of 'libcdio.so.16.0.0'===============
 
 ================ changes of 'libiso9660++.so.0.0.0'===============
diff --git a/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt b/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
index ca83a0af..9f22d5f5 100644
--- a/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
+++ b/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
@@ -84,6 +84,5 @@
                     and name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl'
 
 
-
 ================ end of changes of 'libsigc-2.0.so.0.0.0'===============
 
diff --git a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
index 22260037..8c0c6417 100644
--- a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
@@ -14,7 +14,6 @@
             '__anonymous_enum__1::SEC_OID_TOTAL' from value '347' to '348' at secoidt.h:34:1
 
 
-
 ================ end of changes of 'libnss3.so'===============
 
 ================ changes of 'libssl3.so'===============
@@ -60,7 +59,6 @@
                     '__anonymous_enum__::ssl_auth_size' value '10'
 
 
-
   1 Changed variable:
 
     [C] 'const PRUint16 SSL_ImplementedCiphers[74]' was changed to 'const PRUint16 SSL_ImplementedCiphers[69]' at sslenum.c:51:1:
@@ -113,6 +111,5 @@
                                                     '__anonymous_enum__1::SEC_OID_TOTAL' from value '347' to '348' at secoidt.h:34:1
 
 
-
 ================ end of changes of 'libsmime3.so'===============
 
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt
index 3ebfcd87..231ae0c8 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt
@@ -51,6 +51,5 @@
         underlying type 'enum __anonymous_enum__2' at spice.h:471:1 changed:
           enum type 'enum __anonymous_enum__2' changed at spice.h:471:1, as reported earlier
 
-
 ================ end of changes of 'libspice-server.so.1.8.0'===============
 
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt
index 0c4de257..5b8e4781 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt
@@ -50,6 +50,5 @@
         typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1
         underlying type 'enum __anonymous_enum__2' changed at spice.h:471:1, as reported earlier
 
-
 ================ end of changes of 'libspice-server.so.1.8.0'===============
 
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
index b2c71ab0..055cb597 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
@@ -712,6 +712,5 @@
       parameter 1 of type 'SpiceServer*' has sub-type changes:
         pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier
 
-
 ================ end of changes of 'libspice-server.so.1.8.0'===============
 
diff --git a/tests/data/test-diff-pkg/symlink-dir-test1-report0.txt b/tests/data/test-diff-pkg/symlink-dir-test1-report0.txt
index 478fa263..d5bff94d 100644
--- a/tests/data/test-diff-pkg/symlink-dir-test1-report0.txt
+++ b/tests/data/test-diff-pkg/symlink-dir-test1-report0.txt
@@ -11,6 +11,5 @@
           1 data member insertion:
             'char S::m1', at offset 32 (in bits) at foo.c:6:1
 
-
 ================ end of changes of 'libfoo.so'===============
 
diff --git a/tests/data/test-diff-pkg/tarpkg-0-report-0.txt b/tests/data/test-diff-pkg/tarpkg-0-report-0.txt
index 8631497a..6b475942 100644
--- a/tests/data/test-diff-pkg/tarpkg-0-report-0.txt
+++ b/tests/data/test-diff-pkg/tarpkg-0-report-0.txt
@@ -11,6 +11,5 @@
           1 data member insertion:
             'char S::mem1', at offset 32 (in bits)
 
-
 ================ end of changes of 'libobj-v0.so'===============
 
diff --git a/tests/data/test-diff-pkg/tarpkg-1-report-0.txt b/tests/data/test-diff-pkg/tarpkg-1-report-0.txt
index de24937a..8d737581 100644
--- a/tests/data/test-diff-pkg/tarpkg-1-report-0.txt
+++ b/tests/data/test-diff-pkg/tarpkg-1-report-0.txt
@@ -11,6 +11,5 @@
           1 data member insertion:
             'char S::mem1', at offset 32 (in bits) at obj-v0.cc:7:1
 
-
 ================ end of changes of 'libobj-v0.so'===============
 
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
index 0978b5c0..5aa8483d 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
@@ -211,7 +211,6 @@
       parameter 1 of type 'tbb::spin_mutex&' has sub-type changes:
         referenced type 'class tbb::spin_mutex' changed at spin_mutex.h:47:1, as reported earlier
 
-
   3 Removed variable symbols not referenced by debug info:
 
     [D] _ZTVN3rml16versioned_objectE
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
index 2fec8647..9cfc3f6a 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
@@ -82,7 +82,6 @@
           1 base class insertion:
             class tbb::internal::mutex_copy_deprecated_and_disabled at tbb_stddef.h:334:1
 
-
   3 Removed variable symbols not referenced by debug info:
 
     [D] _ZTVN3rml16versioned_objectE
diff --git a/tests/data/test-diff-suppr/libtest48-soname-abixml-report-1.txt b/tests/data/test-diff-suppr/libtest48-soname-abixml-report-1.txt
index 1bd9abb0..431c891a 100644
--- a/tests/data/test-diff-suppr/libtest48-soname-abixml-report-1.txt
+++ b/tests/data/test-diff-suppr/libtest48-soname-abixml-report-1.txt
@@ -13,4 +13,3 @@ SONAME changed from 'test48-soname-abixml-v0' to 'test48-soname-abixml-v1'
         1 data member insertion:
           'char S::m1', at offset 32 (in bits) at test48-soname-abixml-v1.c:4:1
 
-
diff --git a/tests/data/test-diff-suppr/test0-type-suppr-report-0.txt b/tests/data/test-diff-suppr/test0-type-suppr-report-0.txt
index 33153bf2..b5b4afe7 100644
--- a/tests/data/test-diff-suppr/test0-type-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test0-type-suppr-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               1 data member insertion:
                 'char MyType::Private::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test0-type-suppr-report-3.txt b/tests/data/test-diff-suppr/test0-type-suppr-report-3.txt
index 33153bf2..b5b4afe7 100644
--- a/tests/data/test-diff-suppr/test0-type-suppr-report-3.txt
+++ b/tests/data/test-diff-suppr/test0-type-suppr-report-3.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               1 data member insertion:
                 'char MyType::Private::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test0-type-suppr-report-5.txt b/tests/data/test-diff-suppr/test0-type-suppr-report-5.txt
index 33153bf2..b5b4afe7 100644
--- a/tests/data/test-diff-suppr/test0-type-suppr-report-5.txt
+++ b/tests/data/test-diff-suppr/test0-type-suppr-report-5.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               1 data member insertion:
                 'char MyType::Private::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test0-type-suppr-report-7.txt b/tests/data/test-diff-suppr/test0-type-suppr-report-7.txt
index 33153bf2..b5b4afe7 100644
--- a/tests/data/test-diff-suppr/test0-type-suppr-report-7.txt
+++ b/tests/data/test-diff-suppr/test0-type-suppr-report-7.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               1 data member insertion:
                 'char MyType::Private::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt b/tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt
index 8b33db84..e5c0b813 100644
--- a/tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test1-typedef-suppr-report-0.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int a_type::m_int' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt b/tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt
index 251f4356..e4021ae2 100644
--- a/tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt
+++ b/tests/data/test-diff-suppr/test1-typedef-suppr-report-2.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int b_type::m_int' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt b/tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt
index c39851d3..9aaf6a7f 100644
--- a/tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt
+++ b/tests/data/test-diff-suppr/test10-changed-parm-c-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'int' to 'float'
       type size hasn't changed
 
-
diff --git a/tests/data/test-diff-suppr/test11-add-data-member-report-0.txt b/tests/data/test-diff-suppr/test11-add-data-member-report-0.txt
index f3c4c1d9..4a6ff721 100644
--- a/tests/data/test-diff-suppr/test11-add-data-member-report-0.txt
+++ b/tests/data/test-diff-suppr/test11-add-data-member-report-0.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char S::m1', at offset 8 (in bits)
           'int S::m2', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test12-add-data-member-report-0.txt b/tests/data/test-diff-suppr/test12-add-data-member-report-0.txt
index c92f1f34..cd301b58 100644
--- a/tests/data/test-diff-suppr/test12-add-data-member-report-0.txt
+++ b/tests/data/test-diff-suppr/test12-add-data-member-report-0.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char S::m_inserted1', at offset 8 (in bits)
           'char S::m_inserted2', at offset 64 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test12-add-data-member-report-2.txt b/tests/data/test-diff-suppr/test12-add-data-member-report-2.txt
index c92f1f34..cd301b58 100644
--- a/tests/data/test-diff-suppr/test12-add-data-member-report-2.txt
+++ b/tests/data/test-diff-suppr/test12-add-data-member-report-2.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char S::m_inserted1', at offset 8 (in bits)
           'char S::m_inserted2', at offset 64 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt b/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt
index 754409ca..baf711f4 100644
--- a/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt
+++ b/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'struct S' has sub-type changes:
       details were reported earlier
 
-
diff --git a/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt b/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt
index 46c078c0..270ec1fc 100644
--- a/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt
+++ b/tests/data/test-diff-suppr/test13-suppr-through-pointer-report-1.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member insertion:
         'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt b/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt
index 40b936fc..ddea8503 100644
--- a/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt
+++ b/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt b/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt
index f351bc58..86d49d12 100644
--- a/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt
+++ b/tests/data/test-diff-suppr/test14-suppr-non-redundant-report-1.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt b/tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt
index da13c8e6..4eaba5b7 100644
--- a/tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt
+++ b/tests/data/test-diff-suppr/test15-suppr-added-fn-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt b/tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt
index eb8df613..83dfe326 100644
--- a/tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt
+++ b/tests/data/test-diff-suppr/test15-suppr-added-fn-report-1.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt b/tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt
index da13c8e6..4eaba5b7 100644
--- a/tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt
+++ b/tests/data/test-diff-suppr/test15-suppr-added-fn-report-5.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt b/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt
index 40316b33..b28fbd16 100644
--- a/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt
+++ b/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'unsigned int S::bar', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt b/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt
index 2c085a78..1a826c1b 100644
--- a/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt
+++ b/tests/data/test-diff-suppr/test16-suppr-removed-fn-report-2.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'unsigned int S::bar', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt b/tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt
index b380313d..cb8a2198 100644
--- a/tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test2-struct-suppr-report-0.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int C::int_member' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test23-alias-filter-report-0.txt b/tests/data/test-diff-suppr/test23-alias-filter-report-0.txt
index 125cd90c..0788d489 100644
--- a/tests/data/test-diff-suppr/test23-alias-filter-report-0.txt
+++ b/tests/data/test-diff-suppr/test23-alias-filter-report-0.txt
@@ -15,4 +15,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test23-alias-filter-report-2.txt b/tests/data/test-diff-suppr/test23-alias-filter-report-2.txt
index 125cd90c..0788d489 100644
--- a/tests/data/test-diff-suppr/test23-alias-filter-report-2.txt
+++ b/tests/data/test-diff-suppr/test23-alias-filter-report-2.txt
@@ -15,4 +15,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test24-soname-report-1.txt b/tests/data/test-diff-suppr/test24-soname-report-1.txt
index dabce854..8e0c021f 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-1.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-1.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test24-soname-report-10.txt b/tests/data/test-diff-suppr/test24-soname-report-10.txt
index dabce854..8e0c021f 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-10.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-10.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test24-soname-report-12.txt b/tests/data/test-diff-suppr/test24-soname-report-12.txt
index dabce854..8e0c021f 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-12.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-12.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test24-soname-report-14.txt b/tests/data/test-diff-suppr/test24-soname-report-14.txt
index dabce854..8e0c021f 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-14.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-14.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test24-soname-report-16.txt b/tests/data/test-diff-suppr/test24-soname-report-16.txt
index dabce854..8e0c021f 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-16.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-16.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test24-soname-report-4.txt b/tests/data/test-diff-suppr/test24-soname-report-4.txt
index dabce854..8e0c021f 100644
--- a/tests/data/test-diff-suppr/test24-soname-report-4.txt
+++ b/tests/data/test-diff-suppr/test24-soname-report-4.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test25-typedef-report-0.txt b/tests/data/test-diff-suppr/test25-typedef-report-0.txt
index 6d2ba155..e93b16ca 100644
--- a/tests/data/test-diff-suppr/test25-typedef-report-0.txt
+++ b/tests/data/test-diff-suppr/test25-typedef-report-0.txt
@@ -19,4 +19,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member insertion:
             'char PrivateType1::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt b/tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt
index a06d0413..6a7f2fad 100644
--- a/tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test26-loc-suppr-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::added_member', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt b/tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt
index a06d0413..6a7f2fad 100644
--- a/tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt
+++ b/tests/data/test-diff-suppr/test26-loc-suppr-report-3.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::added_member', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt b/tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt
index b36cce6e..d06b2c00 100644
--- a/tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test3-struct-suppr-report-0.txt
@@ -19,4 +19,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int C::int_member' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt b/tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt
index a2fe75aa..70d4a5c8 100644
--- a/tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt
+++ b/tests/data/test-diff-suppr/test3-struct-suppr-report-1.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int C::int_member' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt b/tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt
index 0e09e1ec..96c07865 100644
--- a/tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt
+++ b/tests/data/test-diff-suppr/test3-struct-suppr-report-2.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S::int_member' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test30-report-0.txt b/tests/data/test-diff-suppr/test30-report-0.txt
index ef48c1db..79b6cd7f 100644
--- a/tests/data/test-diff-suppr/test30-report-0.txt
+++ b/tests/data/test-diff-suppr/test30-report-0.txt
@@ -28,4 +28,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               1 data member insertion:
                 'int S::priv_type::member1', at offset 64 (in bits) at test30-pub-lib-v1.cc:18:1
 
-
diff --git a/tests/data/test-diff-suppr/test31-report-1.txt b/tests/data/test-diff-suppr/test31-report-1.txt
index cad99541..43f36101 100644
--- a/tests/data/test-diff-suppr/test31-report-1.txt
+++ b/tests/data/test-diff-suppr/test31-report-1.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char hidden::S0::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test32-report-0.txt b/tests/data/test-diff-suppr/test32-report-0.txt
index 3dc192f6..2489b56d 100644
--- a/tests/data/test-diff-suppr/test32-report-0.txt
+++ b/tests/data/test-diff-suppr/test32-report-0.txt
@@ -13,4 +13,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'void' to 'char'
       type size changed from 0 to 8 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test32-report-1.txt b/tests/data/test-diff-suppr/test32-report-1.txt
index 7b0fbd44..2f785d02 100644
--- a/tests/data/test-diff-suppr/test32-report-1.txt
+++ b/tests/data/test-diff-suppr/test32-report-1.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'void' to 'char'
       type size changed from 0 to 8 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test33-report-0.txt b/tests/data/test-diff-suppr/test33-report-0.txt
index 5807f845..29d6cf55 100644
--- a/tests/data/test-diff-suppr/test33-report-0.txt
+++ b/tests/data/test-diff-suppr/test33-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'int to_keep::member1', at offset 0 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test39-opaque-type-report-0.txt b/tests/data/test-diff-suppr/test39-opaque-type-report-0.txt
index 06d04b98..7993fc08 100644
--- a/tests/data/test-diff-suppr/test39-opaque-type-report-0.txt
+++ b/tests/data/test-diff-suppr/test39-opaque-type-report-0.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         typedef name changed from StructType to AnotherStructType at test39-header-v1.h:2:1
 
 
-
diff --git a/tests/data/test-diff-suppr/test4-local-suppr-report-0.txt b/tests/data/test-diff-suppr/test4-local-suppr-report-0.txt
index 4129ccae..795ae553 100644
--- a/tests/data/test-diff-suppr/test4-local-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test4-local-suppr-report-0.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char a_not_private_type::j', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test4-local-suppr-report-1.txt b/tests/data/test-diff-suppr/test4-local-suppr-report-1.txt
index b76e25b0..b8c10090 100644
--- a/tests/data/test-diff-suppr/test4-local-suppr-report-1.txt
+++ b/tests/data/test-diff-suppr/test4-local-suppr-report-1.txt
@@ -17,4 +17,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char a_not_private_type::j', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt b/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt
index d772bd1d..653de77f 100644
--- a/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt
+++ b/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt
@@ -21,4 +21,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         'EnumType0::enum_count' from value '3' to '4' at test41-enumerator-changes-v1.cc:1:1
 
 
-
diff --git a/tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt b/tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt
index 601d4f8d..5a0aec33 100644
--- a/tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt
+++ b/tests/data/test-diff-suppr/test42-negative-suppr-type-report-0.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member insertion:
         'char type_to_keep::m1', at offset 32 (in bits) at test42-negative-suppr-type-v1.cc:4:1
 
-
diff --git a/tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt b/tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt
index 601d4f8d..5a0aec33 100644
--- a/tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt
+++ b/tests/data/test-diff-suppr/test42-negative-suppr-type-report-1.txt
@@ -9,4 +9,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member insertion:
         'char type_to_keep::m1', at offset 32 (in bits) at test42-negative-suppr-type-v1.cc:4:1
 
-
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-1.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-1.txt
index a1b349bb..8f651743 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-1.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-1.txt
@@ -13,7 +13,6 @@ Unreachable types summary: 1 removed, 1 changed, 1 added types
     1 data member insertion:
       'char unreachable_struct2::m2', at offset 32 (in bits) at test-v1.c:9:1
 
-
 1 added type unreachable from any public interface:
 
   [A] 'struct unreachable_struct3' at test-v1.c:12:1
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-2.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-2.txt
index 84c24bc5..33e9ba01 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-2.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-2.txt
@@ -9,7 +9,6 @@ Unreachable types summary: 0 removed (1 filtered out), 1 changed, 1 added types
     1 data member insertion:
       'char unreachable_struct2::m2', at offset 32 (in bits) at test-v1.c:9:1
 
-
 1 added type unreachable from any public interface:
 
   [A] 'struct unreachable_struct3' at test-v1.c:12:1
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-3.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-3.txt
index 15dce83a..35b63415 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-3.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-3.txt
@@ -6,7 +6,6 @@ Unreachable types summary: 1 removed, 0 changed (1 filtered out), 1 added types
 
   [D] 'struct unreachable_struct1' at test-v0.c:6:1
 
-
 1 added type unreachable from any public interface:
 
   [A] 'struct unreachable_struct3' at test-v1.c:12:1
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-4.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-4.txt
index 3249a77a..f2dc1ab1 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-4.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-4.txt
@@ -13,4 +13,3 @@ Unreachable types summary: 1 removed, 1 changed, 0 added (1 filtered out) types
     1 data member insertion:
       'char unreachable_struct2::m2', at offset 32 (in bits) at test-v1.c:9:1
 
-
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-5.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-5.txt
index 11d0d202..eb879ea7 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-5.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-5.txt
@@ -2,4 +2,3 @@ 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 filtered out), 0 changed (1 filtered out), 0 added (1 filtered out) types
 
-
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-7.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-7.txt
index 7de31388..a2d41a32 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-7.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-7.txt
@@ -15,7 +15,6 @@ Unreachable types summary: 1 removed, 1 changed, 1 added types
     1 data member insertion:
       'char unreachable_struct2::m2', at offset 32 (in bits) at test-v1.c:9:1
 
-
 1 added type unreachable from any public interface:
 
   [A] 'struct unreachable_struct3' at test-v1.c:12:1
diff --git a/tests/data/test-diff-suppr/test47-non-reachable-types-report-8.txt b/tests/data/test-diff-suppr/test47-non-reachable-types-report-8.txt
index 46e854b6..16f6dfe8 100644
--- a/tests/data/test-diff-suppr/test47-non-reachable-types-report-8.txt
+++ b/tests/data/test-diff-suppr/test47-non-reachable-types-report-8.txt
@@ -4,4 +4,3 @@ Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
 Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
 Unreachable types summary: 0 removed (1 filtered out), 0 changed (1 filtered out), 0 added (1 filtered out) types
 
-
diff --git a/tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt b/tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt
index 505ba42c..4cdf875d 100644
--- a/tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test5-fn-suppr-report-0.txt
@@ -16,4 +16,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 2 of type 'struct S' has sub-type changes:
       details were reported earlier
 
-
diff --git a/tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt b/tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt
index 45ead077..bb8ff0b7 100644
--- a/tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt
+++ b/tests/data/test-diff-suppr/test5-fn-suppr-report-1.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member change:
         'int S::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt b/tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt
index 45ead077..bb8ff0b7 100644
--- a/tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt
+++ b/tests/data/test-diff-suppr/test5-fn-suppr-report-2.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member change:
         'int S::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt b/tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt
index 45ead077..bb8ff0b7 100644
--- a/tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt
+++ b/tests/data/test-diff-suppr/test5-fn-suppr-report-3.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member change:
         'int S::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt b/tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt
index 1d631754..723c025f 100644
--- a/tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt
+++ b/tests/data/test-diff-suppr/test5-fn-suppr-report-4.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member change:
           'int S::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt b/tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt
index 45ead077..bb8ff0b7 100644
--- a/tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt
+++ b/tests/data/test-diff-suppr/test5-fn-suppr-report-5.txt
@@ -11,4 +11,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 data member change:
         'int S::m1' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt b/tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt
index 559182db..03f89b72 100644
--- a/tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt
+++ b/tests/data/test-diff-suppr/test6-fn-suppr-report-0-1.txt
@@ -31,4 +31,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S2::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt b/tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt
index a679f47a..3e54f609 100644
--- a/tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test6-fn-suppr-report-0.txt
@@ -31,4 +31,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S2::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt b/tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt
index 20fcb19b..79c37bd2 100644
--- a/tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt
+++ b/tests/data/test-diff-suppr/test6-fn-suppr-report-1.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S2::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt b/tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt
index 20fcb19b..79c37bd2 100644
--- a/tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt
+++ b/tests/data/test-diff-suppr/test6-fn-suppr-report-2.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S2::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt b/tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt
index 20fcb19b..79c37bd2 100644
--- a/tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt
+++ b/tests/data/test-diff-suppr/test6-fn-suppr-report-3.txt
@@ -22,4 +22,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           1 data member change:
             'int S2::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
 
-
diff --git a/tests/data/test-diff-suppr/test7-var-suppr-report-0.txt b/tests/data/test-diff-suppr/test7-var-suppr-report-0.txt
index 97d16ae6..3cce1b35 100644
--- a/tests/data/test-diff-suppr/test7-var-suppr-report-0.txt
+++ b/tests/data/test-diff-suppr/test7-var-suppr-report-0.txt
@@ -11,6 +11,7 @@ Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
           'char S0::inserted_member', at offset 0 (in bits)
         1 data member change:
           'int S0::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
+
   [C] 'S1* var1' was changed:
     type of variable changed:
       in pointed to type 'struct S1':
diff --git a/tests/data/test-diff-suppr/test7-var-suppr-report-8.txt b/tests/data/test-diff-suppr/test7-var-suppr-report-8.txt
index 97d16ae6..3cce1b35 100644
--- a/tests/data/test-diff-suppr/test7-var-suppr-report-8.txt
+++ b/tests/data/test-diff-suppr/test7-var-suppr-report-8.txt
@@ -11,6 +11,7 @@ Variables changes summary: 0 Removed, 2 Changed, 0 Added variables
           'char S0::inserted_member', at offset 0 (in bits)
         1 data member change:
           'int S0::m0' offset changed from 0 to 32 (in bits) (by +32 bits)
+
   [C] 'S1* var1' was changed:
     type of variable changed:
       in pointed to type 'struct S1':
diff --git a/tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt b/tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt
index 40b936fc..ddea8503 100644
--- a/tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt
+++ b/tests/data/test-diff-suppr/test8-redundant-fn-report-0.txt
@@ -10,4 +10,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 data member insertion:
           'char S::m1', at offset 32 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt b/tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt
index 1582fffc..9b7599d0 100644
--- a/tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt
+++ b/tests/data/test-diff-suppr/test8-redundant-fn-report-1.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 1 of type 'S*' has sub-type changes:
       pointed to type 'struct S' changed, as reported earlier
 
-
diff --git a/tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt b/tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt
index 89e0d179..ef3e23e4 100644
--- a/tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt
+++ b/tests/data/test-diff-suppr/test9-changed-parm-c-report-0.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'int' to 'char'
       type size changed from 32 to 8 (in bits)
 
-
diff --git a/tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt b/tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt
index 89e0d179..ef3e23e4 100644
--- a/tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt
+++ b/tests/data/test-diff-suppr/test9-changed-parm-c-report-1.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type name changed from 'int' to 'char'
       type size changed from 32 to 8 (in bits)
 
-
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 2/7] abidiff: Remove blank line after base class diffs.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
  2020-03-27 14:00 ` [PATCH 1/7] abidiff: Clean up new lines between sections Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-27 14:00 ` [PATCH 3/7] abidiff: Fix enum impacted interfaces blank line Giuliano Procida
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

This patch removes the blank line emitted after base class diffs.
These are jarring, particularly when the diffs are nested.

	* src/abg-default-reporter.cc (report): In the class_diff
	overload, eliminate the extra blank line after base class
	changes and remove unneeded new line logic.
	* tests/data/test*report*.txt: Remove blank lines after base
	class diffs in 9 files.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-default-reporter.cc                            | 10 +---------
 tests/data/test-abidiff/test-PR18791-report0.txt       |  4 ----
 tests/data/test-diff-dwarf/test0-report.txt            |  1 -
 .../test-diff-dwarf/test27-local-base-diff-report.txt  |  1 -
 tests/data/test-diff-dwarf/test8-report.txt            |  1 -
 tests/data/test-diff-filter/test0-report.txt           |  1 -
 tests/data/test-diff-filter/test01-report.txt          |  1 -
 .../test29-finer-redundancy-marking-report-0.txt       |  1 -
 ...libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt |  3 ---
 ...x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt |  1 -
 10 files changed, 1 insertion(+), 23 deletions(-)

diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index e2f520fd..b67fe259 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -1338,7 +1338,6 @@ default_reporter::report(const class_diff& d, ostream& out,
 	}
 
       // Report changes.
-      bool emitted = false;
       size_t num_filtered = d.get_priv()->count_filtered_bases();
       if (numchanges)
 	{
@@ -1359,10 +1358,7 @@ default_reporter::report(const class_diff& d, ostream& out,
 	      report_loc_info(o->get_base_class(), *d.context(), out);
 	      out << " changed:\n";
 	      diff->report(out, indent + "    ");
-	      emitted = true;
 	    }
-	  if (emitted)
-	    out << "\n";
 	}
 
       //Report insertions.
@@ -1372,20 +1368,16 @@ default_reporter::report(const class_diff& d, ostream& out,
 	  report_mem_header(out, numins, 0, ins_kind,
 			    "base class", indent);
 
-	  bool emitted = false;
 	  for (class_decl::base_specs::const_iterator i =
 		 d.get_priv()->sorted_inserted_bases_.begin();
 	       i != d.get_priv()->sorted_inserted_bases_.end();
 	       ++i)
 	    {
 	      class_decl_sptr b = (*i)->get_base_class();
-	      if (emitted)
-		out << "\n";
 	      out << indent << "  " << b->get_pretty_representation();
 	      report_loc_info(b, *ctxt, out);
-	      emitted = true;
+	      out << "\n";
 	    }
-	  out << "\n";
 	}
     }
 
diff --git a/tests/data/test-abidiff/test-PR18791-report0.txt b/tests/data/test-abidiff/test-PR18791-report0.txt
index 3c26de12..87322587 100644
--- a/tests/data/test-abidiff/test-PR18791-report0.txt
+++ b/tests/data/test-abidiff/test-PR18791-report0.txt
@@ -53,10 +53,8 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
                                               'unsigned long int std::_List_node<long unsigned int>::_M_data', at offset 128 (in bits)
                                           and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node'
                                       and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl'
-
                             'bool sigc::internal::trackable_callback_list::clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
 
-
   [C] 'method sigc::connection& sigc::connection::operator=(const sigc::connection&)' has some indirect sub-type changes:
     return type changed:
       in referenced type 'struct sigc::connection':
@@ -131,7 +129,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
                       and name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node'
                   and name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl'
 
-
   [C] 'method sigc::signal_base::iterator_type sigc::signal_base::insert(sigc::signal_base::iterator_type, const sigc::slot_base&)' has some indirect sub-type changes:
     return type changed:
       underlying type 'typedef sigc::internal::signal_impl::iterator_type' changed, as reported earlier
@@ -148,7 +145,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 base class change:
           'struct sigc::trackable' changed:
             details were reported earlier
-
         1 data member change:
           type of 'sigc::internal::signal_impl* sigc::signal_base::impl_' changed:
             pointed to type 'struct sigc::internal::signal_impl' changed, as reported earlier
diff --git a/tests/data/test-diff-dwarf/test0-report.txt b/tests/data/test-diff-dwarf/test0-report.txt
index 05cc3bdf..d8a213a5 100644
--- a/tests/data/test-diff-dwarf/test0-report.txt
+++ b/tests/data/test-diff-dwarf/test0-report.txt
@@ -16,7 +16,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size changed from 64 to 96 (in bits)
             1 data member insertion:
               'unsigned int B0S0::m2', at offset 64 (in bits)
-
         1 data member change:
           'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
 
diff --git a/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt b/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt
index 050afd22..a2db4e9e 100644
--- a/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt
+++ b/tests/data/test-diff-dwarf/test27-local-base-diff-report.txt
@@ -17,7 +17,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 base class change:
           'struct base' changed:
             details were reported earlier
-
         1 data member change:
           'int S::m0' offset changed from 32 to 64 (in bits) (by +32 bits)
 
diff --git a/tests/data/test-diff-dwarf/test8-report.txt b/tests/data/test-diff-dwarf/test8-report.txt
index ee185dbf..59834a5a 100644
--- a/tests/data/test-diff-dwarf/test8-report.txt
+++ b/tests/data/test-diff-dwarf/test8-report.txt
@@ -16,7 +16,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
             type size hasn't changed
             1 data member change:
               'char B0::m0' access changed from 'public' to 'private'
-
         1 base class insertion:
           class B1
         1 data member change:
diff --git a/tests/data/test-diff-filter/test0-report.txt b/tests/data/test-diff-filter/test0-report.txt
index 1dc19ed9..afa87571 100644
--- a/tests/data/test-diff-filter/test0-report.txt
+++ b/tests/data/test-diff-filter/test0-report.txt
@@ -18,7 +18,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               'unsigned int B0S0::m2', at offset 32 (in bits)
             1 data member change:
               'char B0S0::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
-
         1 data member change:
           'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits)
 
diff --git a/tests/data/test-diff-filter/test01-report.txt b/tests/data/test-diff-filter/test01-report.txt
index 8c08ddb9..73b907e5 100644
--- a/tests/data/test-diff-filter/test01-report.txt
+++ b/tests/data/test-diff-filter/test01-report.txt
@@ -18,7 +18,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
               'unsigned int B0S0::m2', at offset 32 (in bits)
             1 data member change:
               'char B0S0::m1' offset changed from 32 to 64 (in bits) (by +32 bits)
-
         1 data member change:
           'int S0::m0' offset changed from 64 to 96 (in bits) (by +32 bits), access changed from 'private' to 'protected'
 
diff --git a/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt b/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt
index 2cb2c362..dd8b6b01 100644
--- a/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt
+++ b/tests/data/test-diff-filter/test29-finer-redundancy-marking-report-0.txt
@@ -21,7 +21,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         1 base class change:
           'struct base' changed:
             details were reported earlier
-
         1 data member change:
           'int inherited::m0' offset changed from 32 to 64 (in bits) (by +32 bits)
 
diff --git a/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt b/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
index 9f22d5f5..b1611303 100644
--- a/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
+++ b/tests/data/test-diff-pkg/libsigc++-2.0-0c2a_2.4.0-1_amd64--libsigc++-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt
@@ -59,10 +59,8 @@
                                                         'unsigned long int std::_List_node<long unsigned int>::_M_data', at offset 128 (in bits)
                                                     and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_List_impl::_M_node'
                                                 and name of 'std::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::internal::trackable_callback, std::allocator<sigc::internal::trackable_callback> >::_M_impl'
-
                                       'bool sigc::internal::trackable_callback_list::clearing_' offset changed from 128 to 192 (in bits) (by +64 bits)
 
-
     [C] 'method sigc::internal::signal_impl* sigc::signal_base::impl() const' has some indirect sub-type changes:
       return type changed:
         in pointed to type 'struct sigc::internal::signal_impl':
@@ -83,6 +81,5 @@
                         name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_List_impl::_M_node'
                     and name of 'std::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl' changed to 'std::__cxx11::_List_base<sigc::slot_base, std::allocator<sigc::slot_base> >::_M_impl'
 
-
 ================ end of changes of 'libsigc-2.0.so.0.0.0'===============
 
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
index 5aa8483d..ced0499d 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
@@ -118,7 +118,6 @@
                                 struct tbb::internal::padded<tbb::internal::unpadded_mail_outbox, 128ul> at tbb_stddef.h:251:1
                               1 data member deletion:
                                 'char tbb::internal::mail_outbox::pad[104]', at offset 136 (in bits) at mailbox.h:114:1
-
                 1 member function deletion:
                   'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&, bool)' at scheduler.h:391:1, virtual at voffset 7/7
 
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 3/7] abidiff: Fix enum impacted interfaces blank line.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
  2020-03-27 14:00 ` [PATCH 1/7] abidiff: Clean up new lines between sections Giuliano Procida
  2020-03-27 14:00 ` [PATCH 2/7] abidiff: Remove blank line after base class diffs Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-27 14:00 ` [PATCH 4/7] abidiff: Remove member function diff blank lines Giuliano Procida
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

There was a spurious new line at the end of reporting enum diffs,
before reporting impacted interfaces, if requested.

	* src/abg-default-reporter.cc (report): In the enum_diff
	overload, don't emit a blank line before a possible "impacted
	interfaces" stanza. In the class_or_union overload, change a
	stray conditional to use the emitted state variable for
	consistency.
	* tests/data/test*report*.txt: Remove blank lines after enum
	diffs in 17 files.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-default-reporter.cc                                | 4 +---
 tests/data/test-abidiff/test-enum0-report.txt              | 1 -
 tests/data/test-abidiff/test-enum1-report.txt              | 1 -
 .../data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt | 7 -------
 tests/data/test-diff-dwarf/test15-enum-report.txt          | 1 -
 tests/data/test-diff-filter/test19-enum-report-1.txt       | 1 -
 .../test-diff-filter/test30-pr18904-rvalueref-report0.txt  | 1 -
 .../test-diff-filter/test30-pr18904-rvalueref-report1.txt  | 1 -
 .../test-diff-filter/test30-pr18904-rvalueref-report2.txt  | 1 -
 .../test-diff-filter/test31-pr18535-libstdc++-report-0.txt | 1 -
 .../test-diff-filter/test31-pr18535-libstdc++-report-1.txt | 1 -
 .../test35-pr18754-no-added-syms-report-0.txt              | 1 -
 .../test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt  | 4 ----
 ...r-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt | 1 -
 ...r-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt | 1 -
 ...r-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt | 1 -
 ...r-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt | 1 -
 ...c22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt | 1 -
 ...c22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt | 1 -
 .../test-diff-suppr/test41-enumerator-changes-report-0.txt | 2 --
 20 files changed, 1 insertion(+), 32 deletions(-)

diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index b67fe259..1c39b3b2 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -170,8 +170,6 @@ default_reporter::report(const enum_diff& d, ostream& out,
 	}
     }
 
-  out << "\n";
-
   if (d.context()->show_leaf_changes_only())
     maybe_report_interfaces_impacted_by_diff(&d, out, indent);
 
@@ -979,7 +977,7 @@ default_reporter::report(const class_or_union_diff& d,
 	  diff->report(out, indent + "    ");
 	  emitted = true;
 	}
-      if (numchanges)
+      if (emitted)
 	out << "\n";
     }
 
diff --git a/tests/data/test-abidiff/test-enum0-report.txt b/tests/data/test-abidiff/test-enum0-report.txt
index 1cd7eaaf..e6aad7aa 100644
--- a/tests/data/test-abidiff/test-enum0-report.txt
+++ b/tests/data/test-abidiff/test-enum0-report.txt
@@ -5,7 +5,6 @@
       'E::e2' value '1'
     1 enumerator insertion:
       'E::e1' value '1'
-
 1 changed declaration:
   'function void foo(E)' was changed to 'function void foo(E)':
     parameter 1 of type 'enum E' has sub-type changes:
diff --git a/tests/data/test-abidiff/test-enum1-report.txt b/tests/data/test-abidiff/test-enum1-report.txt
index 7e8acf80..ab13895c 100644
--- a/tests/data/test-abidiff/test-enum1-report.txt
+++ b/tests/data/test-abidiff/test-enum1-report.txt
@@ -5,7 +5,6 @@
       'E::e1' value '1'
     1 enumerator change:
       'E::e2' from value '1' to '2'
-
 1 changed declaration:
   'function void foo(E)' was changed to 'function void foo(E)':
     parameter 1 of type 'enum E' has sub-type changes:
diff --git a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
index 8a13f3b3..dfb63684 100644
--- a/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
+++ b/tests/data/test-diff-dwarf/PR25058-liblttng-ctl-report-1.txt
@@ -95,7 +95,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
             2 enumerator insertions:
               'lttng_event_context_type::LTTNG_EVENT_CONTEXT_CALLSTACK_KERNEL' value '20'
               'lttng_event_context_type::LTTNG_EVENT_CONTEXT_CALLSTACK_USER' value '21'
-
           type of 'union {lttng_event_perf_counter_ctx perf_counter; struct {char* provider_name; char* ctx_name;} app_ctx; char padding[288];} lttng_event_context::u' changed:
             type name changed from '__anonymous_union__4' to '__anonymous_union__5'
             type size hasn't changed
@@ -116,7 +115,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
         'lttng_condition_type::LTTNG_CONDITION_TYPE_SESSION_ROTATION_ONGOING' value '103'
         'lttng_condition_type::LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED' value '104'
 
-
   [C] 'function int lttng_disable_event_ext(lttng_handle*, lttng_event*, const char*, const char*)' has some indirect sub-type changes:
     parameter 2 of type 'lttng_event*' has sub-type changes:
       in pointed to type 'struct lttng_event':
@@ -127,7 +125,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
             1 enumerator insertion:
               'lttng_event_type::LTTNG_EVENT_USERSPACE_PROBE' value '6'
 
-
   [C] 'function int lttng_enable_event(lttng_handle*, lttng_event*, const char*)' has some indirect sub-type changes:
     parameter 2 of type 'lttng_event*' has sub-type changes:
       pointed to type 'struct lttng_event' changed, as reported earlier
@@ -195,7 +192,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
       type size hasn't changed
       1 enumerator insertion:
         'lttng_notification_channel_status::LTTNG_NOTIFICATION_CHANNEL_STATUS_INTERRUPTED' value '2'
-
     parameter 2 of type 'lttng_notification**' has sub-type changes:
       in pointed to type 'lttng_notification*':
         in pointed to type 'struct lttng_notification':
@@ -249,7 +245,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
                               type size hasn't changed
                               1 enumerator insertion:
                                 'ast_link_type::AST_LINK_BRACKET' value '3'
-
                             type of 'ast_link_type pre_op' changed:
                               details were reported earlier
                             type of 'union {char* string; uint64_t constant; double float_constant; char* identifier; filter_node* child;} u' changed:
@@ -282,7 +277,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
                                 'op_type::AST_OP_BIT_AND' value '10'
                                 'op_type::AST_OP_BIT_OR' value '11'
                                 'op_type::AST_OP_BIT_XOR' value '12'
-
                             type of 'filter_node* lchild' changed:
                               pointed to type 'struct filter_node' changed; details are being reported
                             type of 'filter_node* rchild' changed:
@@ -301,7 +295,6 @@ Variables changes summary: 0 Removed, 0 Changed, 3 Added variables
                                 'unary_op_type::AST_UNARY_BIN_NOT' value '4'
                               1 enumerator insertion:
                                 'unary_op_type::AST_UNARY_BIT_NOT' value '4'
-
                             type of 'filter_node* child' changed:
                               pointed to type 'struct filter_node' changed; details are being reported
                 'cds_list_head filter_ast::allocated_nodes' offset changed from 576 to 640 (in bits) (by +64 bits)
diff --git a/tests/data/test-diff-dwarf/test15-enum-report.txt b/tests/data/test-diff-dwarf/test15-enum-report.txt
index ae6370b7..bcc40270 100644
--- a/tests/data/test-diff-dwarf/test15-enum-report.txt
+++ b/tests/data/test-diff-dwarf/test15-enum-report.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           '__anonymous_enum__::v4' value '4'
           '__anonymous_enum__::v5' value '5'
 
-
diff --git a/tests/data/test-diff-filter/test19-enum-report-1.txt b/tests/data/test-diff-filter/test19-enum-report-1.txt
index ae6370b7..bcc40270 100644
--- a/tests/data/test-diff-filter/test19-enum-report-1.txt
+++ b/tests/data/test-diff-filter/test19-enum-report-1.txt
@@ -12,4 +12,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           '__anonymous_enum__::v4' value '4'
           '__anonymous_enum__::v5' value '5'
 
-
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
index b1dd3c74..6867c0ea 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
@@ -1294,7 +1294,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126'
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133'
 
-
   [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' has some indirect sub-type changes:
     parameter 1 of type 'VarDesc*' has sub-type changes:
       in pointed to type 'struct VarDesc':
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
index c49d6c68..951f0605 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
@@ -1294,7 +1294,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126' at liboffload_error_codes.h:38:1
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133' at liboffload_error_codes.h:38:1
 
-
   [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' at offload_host.h:157:1 has some indirect sub-type changes:
     parameter 1 of type 'VarDesc*' has sub-type changes:
       in pointed to type 'struct VarDesc' at offload_common.h:254:1:
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
index f0986450..fdd96bc8 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
@@ -1294,7 +1294,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126' at liboffload_error_codes.h:38:1
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133' at liboffload_error_codes.h:38:1
 
-
   [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' at offload_host.h:157:1 has some indirect sub-type changes:
     parameter 1 of type 'VarDesc*' has sub-type changes:
       in pointed to type 'struct VarDesc' at offload_common.h:254:1:
diff --git a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
index b1bc0e3a..28feddff 100644
--- a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
+++ b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-0.txt
@@ -47,7 +47,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
       1 enumerator deletion:
         'std::regex_constants::error_type::_S_error_last' value '13'
 
-
 6 Added variable symbols not referenced by debug info:
 
   [A] _ZTISt16bad_array_length@@CXXABI_1.3.8
diff --git a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
index 440e5720..ec25bf6d 100644
--- a/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
+++ b/tests/data/test-diff-filter/test31-pr18535-libstdc++-report-1.txt
@@ -47,7 +47,6 @@ Variable symbols changes summary: 0 Removed, 6 Added variable symbols not refere
       1 enumerator deletion:
         'std::regex_constants::error_type::_S_error_last' value '13'
 
-
 6 Added variable symbols not referenced by debug info:
 
   [A] _ZTISt16bad_array_length@@CXXABI_1.3.8
diff --git a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
index 4bda6f6c..c0e56207 100644
--- a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
+++ b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
@@ -210,7 +210,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
           '__anonymous_enum__::c_report_myorelease' from value '122' to '126'
           '__anonymous_enum__::c_coipipe_max_number' from value '123' to '133'
 
-
   [C] 'method bool OffloadDescriptor::setup_descriptors(VarDesc*, VarDesc2*, int, int, void*)' has some indirect sub-type changes:
     parameter 1 of type 'VarDesc*' has sub-type changes:
       in pointed to type 'struct VarDesc':
diff --git a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
index 8c0c6417..f484d0c6 100644
--- a/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/nss-3.23.0-1.0.fc23.x86_64-report-0.txt
@@ -13,7 +13,6 @@
           1 enumerator change:
             '__anonymous_enum__1::SEC_OID_TOTAL' from value '347' to '348' at secoidt.h:34:1
 
-
 ================ end of changes of 'libnss3.so'===============
 
 ================ changes of 'libssl3.so'===============
@@ -35,7 +34,6 @@
           1 enumerator change:
             '__anonymous_enum__::ssl_kea_size' from value '5' to '6' at sslt.h:40:1
 
-
     [C] 'function SECStatus SSL_GetCipherSuiteInfo(PRUint16, SSLCipherSuiteInfo*, PRUintn)' at sslinfo.c:294:1 has some indirect sub-type changes:
       parameter 2 of type 'SSLCipherSuiteInfo*' has sub-type changes:
         in pointed to type 'typedef SSLCipherSuiteInfo' at sslt.h:252:1:
@@ -58,7 +56,6 @@
                     '__anonymous_enum__::ssl_auth_psk' value '9'
                     '__anonymous_enum__::ssl_auth_size' value '10'
 
-
   1 Changed variable:
 
     [C] 'const PRUint16 SSL_ImplementedCiphers[74]' was changed to 'const PRUint16 SSL_ImplementedCiphers[69]' at sslenum.c:51:1:
@@ -110,6 +107,5 @@
                                                   1 enumerator change:
                                                     '__anonymous_enum__1::SEC_OID_TOTAL' from value '347' to '348' at secoidt.h:34:1
 
-
 ================ end of changes of 'libsmime3.so'===============
 
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt
index 231ae0c8..f3b5b686 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-0.txt
@@ -44,7 +44,6 @@
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ4' value '7'
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_ENUM_END' value '8'
 
-
     [C] 'function int spice_server_set_image_compression(SpiceServer*, spice_image_compression_t)' at reds.c:3602:1 has some indirect sub-type changes:
       parameter 2 of type 'typedef spice_image_compression_t' changed:
         typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt
index 5b8e4781..0cb9723d 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt
@@ -44,7 +44,6 @@
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ4' value '7'
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_ENUM_END' value '8'
 
-
     [C] 'function int spice_server_set_image_compression(SpiceServer*, spice_image_compression_t)' at reds.c:3602:1 has some indirect sub-type changes:
       parameter 2 of type 'typedef spice_image_compression_t' changed:
         typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
index 055cb597..6d9beb85 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt
@@ -450,7 +450,6 @@
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ' value '6'
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ4' value '7'
             'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_ENUM_END' value '8'
-
       parameter 1 of type 'SpiceServer*' has sub-type changes:
         pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier
 
diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt
index 11cd5682..2ed87e92 100644
--- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt
+++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-3.txt
@@ -40,7 +40,6 @@ Leaf changes summary: 11 artifacts changed (7 filtered out)
       'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ' value '6'
       'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ4' value '7'
       'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_ENUM_END' value '8'
-
     2 impacted interfaces:
       function spice_image_compression_t spice_server_get_image_compression(SpiceServer*)
       function int spice_server_set_image_compression(SpiceServer*, spice_image_compression_t)
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
index ced0499d..451a4981 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
@@ -59,7 +59,6 @@
         1 enumerator change:
           'tbb::internal::exception_id::eid_max' from value '20' to '21' at tbb_exception.h:79:1
 
-
     [C] 'method void tbb::mutex::scoped_lock::internal_acquire(tbb::mutex&)' at mutex.h:129:1 has some indirect sub-type changes:
       parameter 1 of type 'tbb::mutex&' has sub-type changes:
         in referenced type 'class tbb::mutex' at mutex.h:40:1:
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
index 9cfc3f6a..bef715b6 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-1.txt
@@ -34,7 +34,6 @@
         1 enumerator change:
           'tbb::internal::exception_id::eid_max' from value '20' to '21' at tbb_exception.h:79:1
 
-
     [C] 'method void tbb::mutex::scoped_lock::internal_acquire(tbb::mutex&)' at mutex.h:129:1 has some indirect sub-type changes:
       parameter 1 of type 'tbb::mutex&' has sub-type changes:
         in referenced type 'class tbb::mutex' at mutex.h:40:1:
diff --git a/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt b/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt
index 653de77f..7dd246c1 100644
--- a/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt
+++ b/tests/data/test-diff-suppr/test41-enumerator-changes-report-0.txt
@@ -11,7 +11,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 enumerator change:
         'EnumType1::eenum_count' from value '3' to '4' at test41-enumerator-changes-v1.cc:10:1
 
-
   [C] 'function void foo(EnumType0)' at test41-enumerator-changes-v1.cc:20:1 has some indirect sub-type changes:
     parameter 1 of type 'enum EnumType0' has sub-type changes:
       type size hasn't changed
@@ -20,4 +19,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       1 enumerator change:
         'EnumType0::enum_count' from value '3' to '4' at test41-enumerator-changes-v1.cc:1:1
 
-
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 4/7] abidiff: Remove member function diff blank lines.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
                   ` (2 preceding siblings ...)
  2020-03-27 14:00 ` [PATCH 3/7] abidiff: Fix enum impacted interfaces blank line Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-30 14:13   ` Dodji Seketeli
  2020-03-27 14:00 ` [PATCH 5/7] abidiff: Fix variable declaration formatting Giuliano Procida
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

Currently, lists of member function deletions, additions and changes
are each followed by a blank line in abidiff output.

While this formatting works reasonably well in leaf-changes-only mode
for top-level changes to types, it is inconsistent with everthing
else. In particular, when reporting member function diffs in default
mode, or more deeply nested in leaf mode, the blank lines are
jarring.

There was also no test coverage for leaf-changes-only mode.

This change removes these blank lines and associated state variables
and logic. It adds a test case for leaf-changes-only mode.

Note that the patch also modifies default mode reporting of member
types, template member functions and template member classes
analogously, but I wasn't able to exercise those code paths.

	* src/abg-default-reporter.cc (report): In the
	class_or_union_diff overload, don't emit a new line after each
	list of member function, member type, template member
	function and template member class changes.
	* src/abg-leaf-reporter.cc (report): : In the
	class_or_union_diff overload, don't emit a new line after each
	list of member function changes.
	* tests/data/Makefile.am: Add new test case files.
	* tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc:
	New test case for --leaf-changes-only member function diffs.
	* tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o:
	Ditto.
	* tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc:
	Ditto. Also add a TODO regarding a potentially bad diff.
	* tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o:
	Ditto.
	* tests/data/test-abidiff/test-struct1-report.txt: Remove
	blank lines after member function changes lists.
	* tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt:
	Ditto.
	* tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt:
	Ditto.
	* tests/test-abidiff-exit.cc: Add new test case.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-default-reporter.cc                   |  63 +++---------------
 src/abg-leaf-reporter.cc                      |  21 ------
 tests/data/Makefile.am                        |   5 ++
 .../test-leaf-cxx-members-report.txt          |  42 ++++++++++++
 .../test-leaf-cxx-members-v0.cc               |  12 ++++
 .../test-leaf-cxx-members-v0.o                | Bin 0 -> 7328 bytes
 .../test-leaf-cxx-members-v1.cc               |  14 ++++
 .../test-leaf-cxx-members-v1.o                | Bin 0 -> 7360 bytes
 .../data/test-abidiff/test-struct1-report.txt |   1 -
 .../test41-PR20476-hidden-report-0.txt        |   2 -
 ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt |   2 -
 tests/test-abidiff-exit.cc                    |  10 +++
 12 files changed, 91 insertions(+), 81 deletions(-)
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
 create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o

diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index 1c39b3b2..2754da4b 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -894,7 +894,6 @@ default_reporter::report(const class_or_union_diff& d,
       if (numdels)
 	report_mem_header(out, numdels, num_filtered, del_kind,
 			  "member function", indent);
-      bool emitted = false;
       for (string_member_function_sptr_map::const_iterator i =
 	     d.get_priv()->deleted_member_functions_.begin();
 	   i != d.get_priv()->deleted_member_functions_.end();
@@ -905,16 +904,10 @@ default_reporter::report(const class_or_union_diff& d,
 	      && !get_member_function_is_virtual(i->second))
 	    continue;
 
-	  if (emitted
-	      && i != d.get_priv()->deleted_member_functions_.begin())
-	    out << "\n";
 	  method_decl_sptr mem_fun = i->second;
 	  out << indent << "  ";
 	  represent(*ctxt, mem_fun, out);
-	  emitted = true;
 	}
-      if (emitted)
-	out << "\n";
 
       // report insertions;
       int numins = d.get_priv()->inserted_member_functions_.size();
@@ -922,7 +915,6 @@ default_reporter::report(const class_or_union_diff& d,
       if (numins)
 	report_mem_header(out, numins, num_filtered, ins_kind,
 			  "member function", indent);
-      emitted = false;
       for (string_member_function_sptr_map::const_iterator i =
 	     d.get_priv()->inserted_member_functions_.begin();
 	   i != d.get_priv()->inserted_member_functions_.end();
@@ -933,16 +925,10 @@ default_reporter::report(const class_or_union_diff& d,
 	      && !get_member_function_is_virtual(i->second))
 	    continue;
 
-	  if (emitted
-	      && i != d.get_priv()->inserted_member_functions_.begin())
-	    out << "\n";
 	  method_decl_sptr mem_fun = i->second;
 	  out << indent << "  ";
 	  represent(*ctxt, mem_fun, out);
-	  emitted = true;
 	}
-      if (emitted)
-	out << "\n";
 
       // report member function with sub-types changes
       int numchanges = d.get_priv()->sorted_changed_member_functions_.size();
@@ -950,7 +936,6 @@ default_reporter::report(const class_or_union_diff& d,
       if (numchanges)
 	report_mem_header(out, numchanges, num_filtered, change_kind,
 			  "member function", indent);
-      emitted = false;
       for (function_decl_diff_sptrs_type::const_iterator i =
 	     d.get_priv()->sorted_changed_member_functions_.begin();
 	   i != d.get_priv()->sorted_changed_member_functions_.end();
@@ -970,15 +955,9 @@ default_reporter::report(const class_or_union_diff& d,
 
 	  string repr =
 	    (*i)->first_function_decl()->get_pretty_representation();
-	  if (emitted
-	      && i != d.get_priv()->sorted_changed_member_functions_.begin())
-	    out << "\n";
 	  out << indent << "  '" << repr << "' has some sub-type changes:\n";
 	  diff->report(out, indent + "    ");
-	  emitted = true;
 	}
-      if (emitted)
-	out << "\n";
     }
 
   // data members
@@ -1090,14 +1069,12 @@ default_reporter::report(const class_or_union_diff& d,
 	       i != d.class_or_union_diff::get_priv()->deleted_member_types_.end();
 	       ++i)
 	    {
-	      if (i != d.class_or_union_diff::get_priv()->deleted_member_types_.begin())
-		out << "\n";
 	      decl_base_sptr mem_type = i->second;
 	      out << indent << "  '"
 		  << mem_type->get_pretty_representation()
-		  << "'";
+		  << "'\n";
 	    }
-	  out << "\n\n";
+	  out << "\n";
 	}
       // report changes
       if (numchanges)
@@ -1135,7 +1112,6 @@ default_reporter::report(const class_or_union_diff& d,
 	  report_mem_header(out, numins, 0, ins_kind,
 			    "member type", indent);
 
-	  bool emitted = false;
 	  for (vector<insertion>::const_iterator i = e.insertions().begin();
 	       i != e.insertions().end();
 	       ++i)
@@ -1146,8 +1122,6 @@ default_reporter::report(const class_or_union_diff& d,
 		   j != i->inserted_indexes().end();
 		   ++j)
 		{
-		  if (emitted)
-		    out << "\n";
 		  mem_type = second->get_member_types()[*j];
 		  if (!d.class_or_union_diff::get_priv()->
 		      member_type_has_changed(get_type_declaration(mem_type)))
@@ -1155,12 +1129,11 @@ default_reporter::report(const class_or_union_diff& d,
 		      out << indent << "  '"
 			  << get_type_declaration(mem_type)->
 			get_pretty_representation()
-			  << "'";
-		      emitted = true;
+			  << "'\n";
 		    }
 		}
 	    }
-	  out << "\n\n";
+	  out << "\n";
 	}
     }
 
@@ -1176,23 +1149,18 @@ default_reporter::report(const class_or_union_diff& d,
 	   i != e.deletions().end();
 	   ++i)
 	{
-	  if (i != e.deletions().begin())
-	    out << "\n";
 	  member_function_template_sptr mem_fn_tmpl =
 	    first->get_member_function_templates()[i->index()];
 	  out << indent << "  '"
 	      << mem_fn_tmpl->as_function_tdecl()->get_pretty_representation()
-	      << "'";
+	      << "'\n";
 	}
-      if (numdels)
-	out << "\n\n";
 
       // report insertions
       int numins = e.num_insertions();
       if (numins)
 	report_mem_header(out, numins, 0, ins_kind,
 			  "member function template", indent);
-      bool emitted = false;
       for (vector<insertion>::const_iterator i = e.insertions().begin();
 	   i != e.insertions().end();
 	   ++i)
@@ -1203,18 +1171,13 @@ default_reporter::report(const class_or_union_diff& d,
 	       j != i->inserted_indexes().end();
 	       ++j)
 	    {
-	      if (emitted)
-		out << "\n";
 	      mem_fn_tmpl = second->get_member_function_templates()[*j];
 	      out << indent << "  '"
 		  << mem_fn_tmpl->as_function_tdecl()->
 		get_pretty_representation()
-		  << "'";
-	      emitted = true;
+		  << "'\n";
 	    }
 	}
-      if (numins)
-	out << "\n\n";
     }
 
   // member class templates.
@@ -1229,23 +1192,18 @@ default_reporter::report(const class_or_union_diff& d,
 	   i != e.deletions().end();
 	   ++i)
 	{
-	  if (i != e.deletions().begin())
-	    out << "\n";
 	  member_class_template_sptr mem_cls_tmpl =
 	    first->get_member_class_templates()[i->index()];
 	  out << indent << "  '"
 	      << mem_cls_tmpl->as_class_tdecl()->get_pretty_representation()
-	      << "'";
+	      << "'\n";
 	}
-      if (numdels)
-	out << "\n\n";
 
       // report insertions
       int numins = e.num_insertions();
       if (numins)
 	report_mem_header(out, numins, 0, ins_kind,
 			  "member class template", indent);
-      bool emitted = false;
       for (vector<insertion>::const_iterator i = e.insertions().begin();
 	   i != e.insertions().end();
 	   ++i)
@@ -1256,18 +1214,13 @@ default_reporter::report(const class_or_union_diff& d,
 	       j != i->inserted_indexes().end();
 	       ++j)
 	    {
-	      if (emitted)
-		out << "\n";
 	      mem_cls_tmpl = second->get_member_class_templates()[*j];
 	      out << indent << "  '"
 		  << mem_cls_tmpl->as_class_tdecl()
 		->get_pretty_representation()
-		  << "'";
-	      emitted = true;
+		  << "'\n";
 	    }
 	}
-      if (numins)
-	out << "\n\n";
     }
 }
 
diff --git a/src/abg-leaf-reporter.cc b/src/abg-leaf-reporter.cc
index 77569d2c..a3c96432 100644
--- a/src/abg-leaf-reporter.cc
+++ b/src/abg-leaf-reporter.cc
@@ -489,7 +489,6 @@ leaf_reporter::report(const class_or_union_diff& d,
       if (numdels)
 	report_mem_header(out, numdels, num_filtered, del_kind,
 			  "member function", indent);
-      bool emitted = false;
       for (string_member_function_sptr_map::const_iterator i =
 	     d.get_priv()->deleted_member_functions_.begin();
 	   i != d.get_priv()->deleted_member_functions_.end();
@@ -500,16 +499,10 @@ leaf_reporter::report(const class_or_union_diff& d,
 	      && !get_member_function_is_virtual(i->second))
 	    continue;
 
-	  if (emitted
-	      && i != d.get_priv()->deleted_member_functions_.begin())
-	    out << "\n";
 	  method_decl_sptr mem_fun = i->second;
 	  out << indent << "  ";
 	  represent(*ctxt, mem_fun, out);
-	  emitted = true;
 	}
-      if (emitted)
-	out << "\n";
 
       // report insertions;
       int numins = d.get_priv()->inserted_member_functions_.size();
@@ -517,7 +510,6 @@ leaf_reporter::report(const class_or_union_diff& d,
       if (numins)
 	report_mem_header(out, numins, num_filtered, ins_kind,
 			  "member function", indent);
-      emitted = false;
       for (string_member_function_sptr_map::const_iterator i =
 	     d.get_priv()->inserted_member_functions_.begin();
 	   i != d.get_priv()->inserted_member_functions_.end();
@@ -528,22 +520,15 @@ leaf_reporter::report(const class_or_union_diff& d,
 	      && !get_member_function_is_virtual(i->second))
 	    continue;
 
-	  if (emitted
-	      && i != d.get_priv()->inserted_member_functions_.begin())
-	    out << "\n";
 	  method_decl_sptr mem_fun = i->second;
 	  out << indent << "  ";
 	  represent(*ctxt, mem_fun, out);
-	  emitted = true;
 	}
-      if (emitted)
-	out << "\n";
 
       // report member function with sub-types changes
       int numchanges = d.get_priv()->sorted_changed_member_functions_.size();
       if (numchanges)
 	report_mem_header(out, change_kind, "member function", indent);
-      emitted = false;
       for (function_decl_diff_sptrs_type::const_iterator i =
 	     d.get_priv()->sorted_changed_member_functions_.begin();
 	   i != d.get_priv()->sorted_changed_member_functions_.end();
@@ -563,15 +548,9 @@ leaf_reporter::report(const class_or_union_diff& d,
 
 	  string repr =
 	    (*i)->first_function_decl()->get_pretty_representation();
-	  if (emitted
-	      && i != d.get_priv()->sorted_changed_member_functions_.begin())
-	    out << "\n";
 	  out << indent << "  '" << repr << "' has some changes:\n";
 	  diff->report(out, indent + "    ");
-	  emitted = true;
 	}
-      if (numchanges)
-	out << "\n";
     }
 
   // data members
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 6d4e2faa..277f5721 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -135,6 +135,11 @@ test-abidiff-exit/test-leaf-peeling-v0.o \
 test-abidiff-exit/test-leaf-peeling-v1.cc \
 test-abidiff-exit/test-leaf-peeling-v1.o \
 test-abidiff-exit/test-leaf-peeling-report.txt \
+test-abidiff-exit/test-leaf-cxx-members-v0.cc \
+test-abidiff-exit/test-leaf-cxx-members-v0.o \
+test-abidiff-exit/test-leaf-cxx-members-v1.cc \
+test-abidiff-exit/test-leaf-cxx-members-v1.o \
+test-abidiff-exit/test-leaf-cxx-members-report.txt \
 \
 test-diff-dwarf/test0-v0.cc		\
 test-diff-dwarf/test0-v0.o			\
diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt b/tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt
new file mode 100644
index 00000000..082db83e
--- /dev/null
+++ b/tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt
@@ -0,0 +1,42 @@
+Leaf changes summary: 4 artifacts changed
+Changed leaf types summary: 1 leaf type changed
+Removed/Changed/Added functions summary: 1 Removed, 1 Changed, 1 Added function
+Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 Removed function:
+
+  [D] 'method virtual int ops::deleted_fn()'    {_ZN3ops10deleted_fnEv}
+    note that this removes an entry from the vtable of struct ops
+
+1 Added function:
+
+  [A] 'method virtual long int ops::added_fn()'    {_ZN3ops8added_fnEv}
+    note that this adds a new entry to the vtable of struct ops
+
+1 function with some sub-type change:
+
+  [C] 'method virtual int ops::changed_fn()' at test-leaf-cxx-members-v1.cc:6:1 has some sub-type changes:
+    return type changed:
+      type name changed from 'int' to 'long int'
+      type size changed from 32 to 64 (in bits)
+
+'struct ops at test-leaf-cxx-members-v0.cc:1:1' changed:
+  type size changed from 128 to 192 (in bits)
+  1 member function deletion:
+    'method virtual int ops::deleted_fn()' at test-leaf-cxx-members-v0.cc:3:1, virtual at voffset 0/1    {_ZN3ops10deleted_fnEv}
+  1 member function insertion:
+    'method virtual long int ops::added_fn()' at test-leaf-cxx-members-v1.cc:3:1, virtual at voffset 0/1    {_ZN3ops8added_fnEv}
+  there are member function changes:
+    'method virtual int ops::changed_fn()' has some changes:
+      return type changed:
+        type name changed from 'int' to 'long int'
+        type size changed from 32 to 64 (in bits)
+  there are data member changes:
+    type 'int' of 'ops::deleted_var' changed:
+      type name changed from 'int' to 'long int'
+      type size changed from 32 to 64 (in bits)
+    and name of 'ops::deleted_var' changed to 'ops::added_var' at test-leaf-cxx-members-v1.cc:2:1, size changed from 32 to 64 (in bits) (by +32 bits)
+    type 'int' of 'ops::changed_var' changed:
+      type name changed from 'int' to 'long int'
+      type size changed from 32 to 64 (in bits)
+    and offset changed from 96 to 128 (in bits) (by +32 bits), size changed from 32 to 64 (in bits) (by +32 bits)
diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc
new file mode 100644
index 00000000..89612562
--- /dev/null
+++ b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc
@@ -0,0 +1,12 @@
+struct ops {
+  int deleted_var;
+  virtual int deleted_fn() { return 0; }
+
+  int changed_var;
+  virtual int changed_fn() { return 0; }
+};
+
+void reg(ops& x) {
+  ops instantiate = x;
+  (void) instantiate;
+}
diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o
new file mode 100644
index 0000000000000000000000000000000000000000..8202ecb5dd7cb2bbe79a0a2f3ff42a103f56387c
GIT binary patch
literal 7328
zcmcIpYiwLc6`s4-Yp=8R`mymVPRiPC+NAAny{^;7Nt?QH-E2r3LYhQTNVQ(u*Y>LR
z+S<K#9YkqGB*2OaiFidK0)9X%gak+kDGE;!1mYL{1F8@|c&Ji9NDT;yNFbH-%{^y5
zJA1dNAWn35=6vUTXU?5F_sm@9<*8?$jyR4IanvETr3tFkbaJadp}P}mx4K9B#z_aK
zjoWr=6Ws5hwv+o^)OK?p;ZEl^-^yM5ODebd(yiR3)3<W3PTkIJ{yMk$^IK$9mw$0n
zdu+aR=Q{M~Zw8DIJ-4}bJNIf2ymFVO?&LN*skwdWL=4)dZb)kjw6@C>>AlLsE2|ZC
zAfi;0X2$d!1^tjv5qNhxPHZn3yUEuTr(@JPLswHDp-saG6NNKmfvz%L+Sa_c#&(hL
zPgQLX)!4pF_}9dyTBxTc;1EO4iL_vpSgTfCJP!rHiF7Jt_glLDK$jkrDN#*n+eWZ*
znoWuWN}T9{yNW|^)3+JN9kn+_izQzrG|~~nt#@KH<kLltPgC2i^V&zfWZ7F#PHQv9
z5gF!=bM4dQv3-N=9q2`_oYl|Q+17$FBUh$XhaRODQ$|z$8l1jMKYfU>i#pAEn)*LS
zUC5i<qCbuw66e~V2p!PeD~ki)A_b9myiK+kJ#7&^2c$UHdI%i^j1eMN7S+!0lQI(O
zTjQskE@yWl8Fv$diPL>uPABCVNjh#U9zPI27$1-CN;>pbxEbe(0XI=fj14?CFsGrW
zs5+V)8=#e<Z86i<44YCd?aECYP417wEe0is2}r5dAZ7rS$nTl>v;Di05`SA`Gd=8k
z^#E-hDjvs3?e|dUP~4@5m^jQ>M<;hWdz_;><*t63lx}d47Cq@8bIG8~>28_m|NP+r
z-0}9Pa$}Nigor(3M*aYLGtQA@;4zm>#X;&L5=F-C_Gg@IvXq!h22sBdL>-8#Y!c)h
zAX~;kVZ&jk<v^LArz?1(daaTc$gp&{m1QBYt;;eK`~R!GN`YN9O23Zt&qO=@>XJ??
z)KR`y@zYCQVLm;(v5{W(mS?<jCA~h9nVr??L_1V#b@gtK?*3SG&)G<XLev=gOhe3I
zI5#3`ICmS^j%d&KqE2ii;*!N*ELK$h+;LRU$+4*qJeOC+QpGQn{9?iP)a+uRwBXI<
z=SynNTk`y%o6oQNGfVkZznu3kta|Fm@zbfv2Oh|drN%R(nQUrwBs-qXj*O<#%l=x)
zdwjtwdFA3PsfF_F;^Q0pA4xwlmP#+A(({GNh0^R|d8M?nR!OgwUM!a8(tcrP$*WYy
zUN4m2b(%Q)r^cq%<xa9ATiFu&kiWdTW!kzY5Z37~GN|#wz;GW0AhR+$b@CWZi>PCw
zK1}uTq~3Y9OzTP=nVdY3+Vhk*Q!JE%`ABCU-D}MZFSYI5Iv+l%oQ+Oru&pI_nbyTl
z!f`?Ls(mui`SHkPd-MCrfiTz}gOQ|>{d`~!imCAZE&fN?uHPE5KOflHRM${yw8j4Q
zojL;nZm_r2nOxOchXHVv-off@uEL3>UR-^G3Bz%ssTVhxnL2|@TV0sAiV9bVxJsT<
zt<hDzwE$~wu*KEcTt(F|MBHG*s<XIiR~-hxRqtznr|R$^LiKo4V|UeEHM%HN6{K6!
zx?FQ>KvG=#7bY$r#%!CbqBf*;SJj*}H1;6<4jb!1D)?cI<3t;X;Acr4R$J>qDm>0^
zL&kbY1vItV!2e~!yN&fMJIf`)hm7@uvoqwgbV*+W{BwiaA!A)t@BH1$zEqQaQfPE>
zwn`d1Wk+hO85i<u$vSnWra)ySq*=R89c7<WXO3q_@_E{b3Nyv^Z1z#=FBK{kUF7q{
z()`L4Rl!rwX?J~x`Upim9JR43|MgBF@;tC}VU@{~lKmPhY=|xqnLFST6E@oawE#!W
zvjsSwjquI*cN@;KvQTj(7nr3F95JQ<l1POR{Ph4<`ix6`!QWzB-fZCbwi4OR9pEx2
zfDRfs#_h$8kUSAI)%Z7A|B!{tI(pH<@8>w5vG6IzU$by|)xT}w+t~jH7JfhLKeg~*
zvi?U4|03(REnF(tKP>#utmk-q%p2xsALC~&e4O?3+@isn6M4n*mkR&7g^T|U3m;_t
zC)}dZUvNzLn}N$3gGr8Tl0UnvyEr+}<Qc-2W!(0cn83|l5px1T9P@rt07>llBLS>&
zi3w=Jz|H$&xGui=eqr2Ub~N)b@5_9Dfy+CPVjl7|^VwtJ;&0|}=DFYS2QKygNdq_Y
zIcMPJxD^98<A1`y!{!;78GnNPft&HC4cv_Xih-N)Ri<)bnU2BK`sJWqlwR3eDr9_b
z!&jNPf?rUXnMy@zAXD8G<SaX1q9d+ltJyFz)o4PV<h>)XU<C9s<(16R%4}hY+;~r^
zcOX-+m5{e4RyPaw^=8%<^gcqV>waNortDFMItzx%_~M{DGO!S6saWzP3eAkl%&sgi
zd-TVROligUGW11~rmvXU7dVc$n4d2fmWi@ZURhh^Y5$*_bF_eEuP}p6up;lvFzMLW
z<WEx4Hsa?(_}Kr1Cv7AC3FgcGhVfDRgePqyzI;2FeC*@GleQ6mF=YIq_rUj=Z_Xd~
za~W6K6k&D^0k!7a1^^3uO_66ZVS?2E3g5WYFU%j_TggZ8dkI5Kmo8JjWGY7A9{)kI
zA?AO}&k|SPe@*dFO2(J^DJfWP>e&YTZ!+OO@k<T(KV-htV^(YSDquyr@GK{+#IA?T
zKTh@b{C|=#J^vQ}4&jiL{@wZ!z91K=6E^-EJbsQHhpEL}2w$H6*9i+7zaJop?2Cc6
z#TWgn)Cn8EpFd$_-^2K*GxqpDA`C;(UxaF8507u|O>khi>ieq@48}A&9<t)v{5Qx~
z=MR!0InMt&^N~NkqV4>DPnaDOVP4=D;v1IHQq|uZ@O$~jrxDB$oBuZ1!t$2~x4~TG
zk3U@7`Qtwt?3kde^Y~JSfkA9vmw>SGH+bRvShIq27QQj;@o_%2V}kNC9{(EirLleS
z-4Qnae%{oknTY#Gt+dC#kH?pF%I<204?iEY1{77=(FXkQ@FD3w3COMRq&>)d%T4{p
zJY*S0;R$qt`MgX8R=;EZ)hZHn<o*RdM*Oh(yBacoDIy79>Id?%$42Z8cAVz-;BLag
j<{y7qV;9h>@+N;Q+^ix&$G(508OFcE`4=pLrK*1e`SU$a

literal 0
HcmV?d00001

diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
new file mode 100644
index 00000000..0437584e
--- /dev/null
+++ b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
@@ -0,0 +1,14 @@
+struct ops {
+  // TODO: type, name and size are differnent from deleted_var, but this is
+  // still reported as a change rather than a deletion and an addition.
+  long added_var;
+  virtual long added_fn() { return 0; }
+
+  long changed_var;
+  virtual long changed_fn() { return 0; }
+};
+
+void reg(ops& x) {
+  ops instantiate = x;
+  (void) instantiate;
+}
diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o
new file mode 100644
index 0000000000000000000000000000000000000000..617ffd21551b158227af04c6e601ebc5a12e6b9b
GIT binary patch
literal 7360
zcmcIpU2L0I89txCIC1L6apGo4+6LUL?OIlQahA2|x^C&RtnPkF)iz}s8;;|A`Oy+P
zvYjlQI;b|W5miHtkj5?|elFM@)3^Zy1r-emdVxS(z%C}JKuBCnqT>RJKpO9JzV~&G
zk3aJ>#9Mtn@B6&J=jS`;eCg*Vo_I9mI7-M-52`ImP^B&>w)ip4j;VcWueObn44>`X
zc2FB*zLVNG^Ig<-GmmhS+4VnUUw(fmyZ++4*(;OpW?!4QnO*-?cKs)RB(1u7;~j0W
z{^ITLLVorg-y=ZIuCLt6zSaY)?3Ibz+4VRzx3X8xM0`=Vkb#r>O#CWE`zUm8X}O|K
zgp_L0-Vr@kJ|7S+1nWM>i5w(lH`%&k^f)mW=xOOCv}F)s!Y~HS(Nm^J>sk-i>0T!M
zi#6Rnb-J$-{teNoHsaJ63?ks1P~;2=k#;S(m=guS3B?tvdyk&q(W8^HOIW+aw-KzI
zR@23SOO)Jwa}|ZWU3W8z9(A;Y7m8IC(@19oU5}%asHckzAEmZi*L5FpiAWeJc9gw2
z<+Qhg7aC;7*?gT0d)7$b2`;pey#p#|TN_e`HqNL{ovarlM<f1C7+s^EK9~&<)2c_S
zf0J0yZ@C4396v<P<}E^ZYTu3do!=%Qv@xZ2{fTs)H0eTE)gWhcH=(=1B133nUJYC$
z;YhHpX{VenXJ0H4bz{3?lf7L|yqEkFjvI+a?~fjf9*qtp9C}IIwDVBE8!N^}`XA_@
z(NIfRol1=K(}K~uh^cFZPN}vI<;G4WMx!u`K=5M%QmWmL=|e@bdm{Q|-#|j*Z)>im
zIp41nZ0}UjC^B{ICFa4XOLG}}n6b_{Gw~khlrFgolh6$xltmNHUbIW>@H-*JbUEE^
zV|}kb+>g%pgq0hS%0m?6juE3P0D9BT$%Jn)lSoG4)JIN~1U>IhJDEf=Hk0t9e%X(@
zGpsTRIPZe9rQ9vvFc`25s1wi7<4>+$y_iu=gTintD@0&hmK7)Z|5y741$Nai{W{Ly
zV;%IXH+x#Fj;eZ<YHHET&!!4%YpEq~Y1%7SQmdJCp`gnN$5nf6A@2z9eJOm`Q=t%r
zs8jTY_rDZA$cl*J;e0QYfpNEi?F{#PKkP(?LN00kRsP)5r?J(Jk4${>Tuv<%E7g3l
zx{$AWsxY4~&UrJr*`mtN%n-AhFRNT`wK~0+TdtOK)r-rXI(d3BIez!unUUnt^l&<p
z93ILX&18m#lc}ZZO3^z$=M}y3LV?75xiEixZS-*J@JKQ>mrTv(D;JA}`EsdPTB)Q~
ziq9_;XHwPt^rBa(rPdk!0v{QfSmipXpz8cWMcq?fT2@?tW@xKiGGuhrFMPHLXqAdi
zW9wfm73Y%JH9reU24HyN?Bg^7B94f7FKw1*^=Y)FT2<=g`1t+F1CMyq3;Cko_f+P{
zL2DFfc6aC*rd9C5S>>$7on718B3EfuU@z1A8MS)No`}U?35|EOK1K$tdw_kL>G6($
z^colcwJrZkzFO&bM)c46dR8?wR2m(*AAH!LAi(v{x(1c2+8ZzcuF@x3gU(gB$uyFy
zZ#F?VZaR(R`Xkq%aOvm^B3IG26+munmg<$R(nnuCNRq4Q3<)4t(OwupuG$rVBF;b)
z{NqjVWCQL;s9ksJ^sf3?oh$<F3BuO3F7LQ?APFx03nG^<XSU8&`kG<G6s7LUq4kI8
zchFc5vVT9Maolu$5`2=xLAA9WWPhI_e2=jnlD?Z-YGRLfquW@|a;|)V@IA)*(U&p8
zHs}$a*cyF@xIM<Ys`dOo*>vxdO-Ap*b-R_n>jiIX<F&o&{Dr!mDI@XBP3!zAwmE;{
zbY>`*qcbQ!y|9|e93g%&U#aMwJhxDsEltq&cmA9<mlcaEH&)|6KJ-cE0p}G~m&}ly
z(pXu0=n;}J11>S4qf=iK@ZHRt4RFkf_?z+XGz?`$VW*K=pcWoDVtg7Pk?ahD`zT$3
zm=XNfEXx}W9N$_(`<MYPV*==yfg^7pIzoi?43hXi@WonPg3DMu&w9ZRahxw%_({g!
zwD2(FZ(H~YmL<Q$zrpyAE&D&S{Cf-k7R$FR{4mRZwea^?&T?In7vE=~a~9soa?Zk!
zv0UI54c4O2tCsyISn-yH|B~?^SvWo~KsUHWqrdPps?^^MT-F{`aV|poCGqz$4!7Fg
zK>TPEdx?oS<|&D_1VS9Mze#{ZcKjh9*0{t3G-lvtzZh<aZ@zcPJIID+J!Zem_Zqmo
z8%g#<on}1;EL`l(`pr5=4SV3S|DP~$v!167+{{}sa5Mg^1|Brdz|8n#Y!BRwKV{%%
z{L2Pz##iae#U;A_Qd=$i?YwYhZ!w>)dTUjcp2=79Dm`7PC=H|oF1mFJ>i|jDLW!rG
zCB6pX!KKTk^kS)yUnDa=V;T)e<sU6%tsQHJ2itnnD|7l>p}IAnpPnvztIAa8%lOKm
z?&!*VvjAvuq3B5z8Wxo<l$Mq}y2Gc7rK*>v&yW;-xfGt`INp42wwzxgm$`CjWtqqP
ze`!8N3s=q#GtL+b@}3NmjB`%@R3&XQ|7?Ii&H(X~wweDK_LuVx`Ekn?KWUr!KNH}O
zb6xzTZRS58;J@d;@UODJIes|bC9kwe!tA{Ru9xsbgnpX@Ta#o?#!Qg-w|U@X-$ER`
zuTqcT`w2r#`zHJq!h*=oe~63_^P~D_$XEA2RG&@q%f2aE%S=7i#Q!aJ_;>!#HSzx;
z`^!GeV%-@9Y?dC(<(O62PXopuw|jg1KTnt*f6HHkq)XCclK2aDnV6vbH#vWn4F{>k
zSct#O|C@vb<xc`6lJn4)w){o@Ix#`{5AdgqoOj5Nea6mzjWDF5zYEpT5a&0~Bp5JU
zv&DVH#-PNXg+UWmT-)|%WTWfX)>}VMas9twf7Fk^dD!*;hA=xOqP)N_1pWkUk|nAS
zNNHoRAL5QrK`_X+eV=qe^&jAgTVr3;-%F2OKkn0ZOt@U-{IU-N12xzZ5S0IGod3G^
z^7k=(bJ+Ru9nlbz>~3=YP4<_@woNq2KgEaI6g#5-*emV)dpW<XQ#MzZ_|hZycflpU
zwD>;(@V5WY`EqoZIC3j~(vGsfWv2dOUakzK_zCnR`|~mtSlwp-H)@E_NdE=KcT3Rx
zT@M()Bsqz{>>sGd&W+et*>H;AgF6We8h`wS%|1Kee~Uj7u0t@$?mx;5@=tdAPM@(H
HEK&UvI(kBo

literal 0
HcmV?d00001

diff --git a/tests/data/test-abidiff/test-struct1-report.txt b/tests/data/test-abidiff/test-struct1-report.txt
index 1300d96c..fe5064c6 100644
--- a/tests/data/test-abidiff/test-struct1-report.txt
+++ b/tests/data/test-abidiff/test-struct1-report.txt
@@ -3,7 +3,6 @@
     type size changed from 192 to 256 (in bits)
     1 member function insertion:
       'method virtual int s0::foo(int, char) const', virtual at voffset 2/2
-
     1 data member deletion:
       'char s0::m1', at offset 96 (in bits)
     1 data member insertion:
diff --git a/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt b/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
index d88db9c4..78f91a58 100644
--- a/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
+++ b/tests/data/test-diff-dwarf/test41-PR20476-hidden-report-0.txt
@@ -9,10 +9,8 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         type size hasn't changed
         1 member function insertion:
           'method virtual void Interface::method2()', virtual at voffset 3/4
-
         1 member function change:
           'method virtual void Interface::method3()' has some sub-type changes:
             the vtable offset of method virtual void Interface::method3() changed from 3 to 4
               note that this is an ABI incompatible change to the vtable of class Interface
 
-
diff --git a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
index 451a4981..62785044 100644
--- a/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
+++ b/tests/data/test-diff-pkg/tbb-4.1-9.20130314.fc22.x86_64--tbb-4.3-3.20141204.fc23.x86_64-report-0.txt
@@ -119,10 +119,8 @@
                                 'char tbb::internal::mail_outbox::pad[104]', at offset 136 (in bits) at mailbox.h:114:1
                 1 member function deletion:
                   'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&, bool)' at scheduler.h:391:1, virtual at voffset 7/7
-
                 1 member function insertion:
                   'method virtual tbb::task* tbb::internal::generic_scheduler::receive_or_steal_task(tbb::internal::reference_count&)' at scheduler.h:362:1, virtual at voffset 7/7
-
                 3 data member deletions:
                   'unsigned int tbb::internal::generic_scheduler::hint_for_push', at offset 896 (in bits) at scheduler.h:171:1
                   'volatile intptr_t* tbb::internal::generic_scheduler::my_ref_top_priority', at offset 2560 (in bits) at scheduler.h:433:1
diff --git a/tests/test-abidiff-exit.cc b/tests/test-abidiff-exit.cc
index ebac7a00..17523afa 100644
--- a/tests/test-abidiff-exit.cc
+++ b/tests/test-abidiff-exit.cc
@@ -167,6 +167,16 @@ InOutSpec in_out_specs[] =
     "data/test-abidiff-exit/test-leaf-peeling-report.txt",
     "output/test-abidiff-exit/test-leaf-peeling-report.txt"
   },
+  {
+    "data/test-abidiff-exit/test-leaf-cxx-members-v0.o",
+    "data/test-abidiff-exit/test-leaf-cxx-members-v1.o",
+    "",
+    "--leaf-changes-only",
+    abigail::tools_utils::ABIDIFF_ABI_CHANGE
+    | abigail::tools_utils::ABIDIFF_ABI_INCOMPATIBLE_CHANGE,
+    "data/test-abidiff-exit/test-leaf-cxx-members-report.txt",
+    "output/test-abidiff-exit/test-leaf-cxx-members-report.txt"
+  },
   {0, 0, 0 ,0,  abigail::tools_utils::ABIDIFF_OK, 0, 0}
 };
 
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 5/7] abidiff: Fix variable declaration formatting.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
                   ` (3 preceding siblings ...)
  2020-03-27 14:00 ` [PATCH 4/7] abidiff: Remove member function diff blank lines Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-27 14:00 ` [PATCH 6/7] abidiff: Eliminate leaf mode double blank lines Giuliano Procida
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

The represent(var_diff_sptr) function tracks vertical "\n" and
horizontal ", " spacing using two state variables:

    - emitted - the main diff text has been emitted
    - begin_with_and - main text emitted && new line started, so
      any further description must be indented and prefixed "and ".
    - if emitted is true and begin_with_and is false, then further
      description is prefixed with ", " instead.

There was some inconsistent emission of new lines and maintenance of
the state variables. This patch documents the variables and makes sure
new lines and state variables are kept in sync.

Finally, it is theoretically possible to reach the end of the function
without emitted becoming true. This patch adds a TODO and makes sure
at something is output shoud that ever happen.

	* src/abg-reporter-priv.cc: (represent) In the var_diff_sptr
	overload, make sure the state variables begin_with_and and
	emitted are updated consistently; add a TODO for one case
	which may result in the end of the function being reached
	without having emitted a report; add missing new lines
	following reporting of anonymous member changes; only emit a
	final new line if begin_with_and hasn't tracked one already;
	document state variables.
	* tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt:
	Add missing blank line after anonymous member change text.
	* tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt:
	Add missing "and " continuation.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-reporter-priv.cc                      | 42 ++++++++++++++++---
 .../test-leaf-peeling-report.txt              |  2 -
 .../test-abidiff-exit/test-leaf2-report.txt   |  1 -
 .../test45-anon-dm-change-report-0.txt        |  2 +
 .../libtest45-basic-type-change-report-1.txt  |  3 --
 .../test44-anonymous-data-member-report-1.txt |  2 +-
 6 files changed, 39 insertions(+), 13 deletions(-)

diff --git a/src/abg-reporter-priv.cc b/src/abg-reporter-priv.cc
index f66a7721..bb5b869d 100644
--- a/src/abg-reporter-priv.cc
+++ b/src/abg-reporter-priv.cc
@@ -412,7 +412,9 @@ represent(const var_diff_sptr	&diff,
   var_decl_sptr o = diff->first_var();
   var_decl_sptr n = diff->second_var();
 
+  // Has the main diff text been output?
   bool emitted = false;
+  // Are we continuing on a new line? (implies emitted)
   bool begin_with_and = false;
   string name1 = o->get_qualified_name();
   string name2 = n->get_qualified_name();
@@ -435,6 +437,9 @@ represent(const var_diff_sptr	&diff,
 	      << indent << "  " << tr1 << "\n"
 	      << indent << "to:\n"
 	      << indent << "  " << tr2 << "\n";
+
+	  begin_with_and = true;
+	  emitted = true;
 	}
       else if (get_type_name(t1) != get_type_name(t2)
 	       && is_decl(t1) && is_decl(t2)
@@ -451,7 +456,11 @@ represent(const var_diff_sptr	&diff,
 	      << indent << " This is usually due to "
 	      << "an anonymous member type being added or removed from "
 	      << "the containing type\n";
+
+	  begin_with_and = true;
+	  emitted = true;
 	}
+      // TODO: else ...?
     }
   else if (filtering::has_anonymous_data_member_change(diff))
     {
@@ -468,7 +477,7 @@ represent(const var_diff_sptr	&diff,
 			      *ctxt, out);
 	  out << " became data member '"
 	      << n->get_pretty_representation()
-	      << "'";
+	      << "'\n";
 	}
       else
 	{
@@ -482,8 +491,11 @@ represent(const var_diff_sptr	&diff,
 			      *ctxt, out);
 	  out << " became anonymous data member '"
 	      << n->get_pretty_representation()
-	      << "'";
+	      << "'\n";
 	}
+
+      begin_with_and = true;
+      emitted = true;
     }
   else if (diff_sptr d = diff->type_diff())
     {
@@ -522,7 +534,9 @@ represent(const var_diff_sptr	&diff,
 		out << indent << "  details were reported earlier\n";
 	      else
 		d->report(out, indent + "  ");
+
 	      begin_with_and = true;
+	      emitted = true;
 	    }
 	}
     }
@@ -535,12 +549,15 @@ represent(const var_diff_sptr	&diff,
 	;
       else
 	{
-	  out << indent;
 	  if (begin_with_and)
 	    {
-	      out << "and ";
+	      out << indent << "and ";
 	      begin_with_and = false;
 	    }
+	  else if (!emitted)
+	    out << indent;
+	  else
+	    out << ", ";
 	  out << "name of '" << name1 << "' changed to '" << name2 << "'";
 	  report_loc_info(n, *ctxt, out);
 	  emitted = true;
@@ -689,7 +706,20 @@ represent(const var_diff_sptr	&diff,
 	out << "now becomes static";
       emitted = true;
     }
-  if (emitted)
+
+  if (begin_with_and)
+    // do nothing as begin_with_and implies emitted
+    ;
+  else if (!emitted)
+    // We appear to have fallen off the edge of the map.
+    out << indent << "'" << pretty_representation
+	<< "' has *some* difference - please report as a bug";
+  else
+    // do nothing
+    ;
+  emitted = true;
+
+  if (!begin_with_and)
     out << "\n";
 }
 
@@ -956,7 +986,7 @@ report_mem_header(ostream& out,
 
   if (num_filtered)
     out << " (" << num_filtered << " filtered)";
-  out << colon_or_semi_colon << '\n';
+  out << colon_or_semi_colon << "\n";
 }
 
 /// Output the header preceding the the report for
diff --git a/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt b/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
index eeffc7b5..c2e5e0fb 100644
--- a/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
+++ b/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
@@ -19,7 +19,6 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
       pointer type changed from: 'int*' to: 'int**'
 
 
-
 'struct ops2 at test-leaf-peeling.0.cc:9:1' changed:
   type size changed from 320 to 640 (in bits)
   there are data member changes:
@@ -31,4 +30,3 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
   there are data member changes:
     type 'void (int&)*' of 'ops3::spong' changed:
       pointer type changed from: 'void (int&)*' to: 'void (int&&)*'
-
diff --git a/tests/data/test-abidiff-exit/test-leaf2-report.txt b/tests/data/test-abidiff-exit/test-leaf2-report.txt
index 88e18962..1caf2cba 100644
--- a/tests/data/test-abidiff-exit/test-leaf2-report.txt
+++ b/tests/data/test-abidiff-exit/test-leaf2-report.txt
@@ -8,4 +8,3 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
   there are data member changes:
     type 'void (int)*' of 'ops::munge' changed:
       pointer type changed from: 'void (int)*' to: 'char (long int, bool)*'
-
diff --git a/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt b/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt
index f7ad7cbc..12af287b 100644
--- a/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt
+++ b/tests/data/test-diff-dwarf/test45-anon-dm-change-report-0.txt
@@ -13,9 +13,11 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           'char S1::m1' offset changed from 64 to 40 (in bits) (by -24 bits)
         1 data member change:
           anonymous data member struct {int m0; char m01;} at offset 0 (in bits) became data member 'int S1::m0'
+
   [C] 'function void foo(S0&)' has some indirect sub-type changes:
     parameter 1 of type 'S0&' has sub-type changes:
       in referenced type 'struct S0':
         type size hasn't changed
         1 data member change:
           data member int S0::m0 at offset 0 (in bits) became anonymous data member 'union {int m0; char m01;}'
+
diff --git a/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt b/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
index d2cb8097..eecb84a0 100644
--- a/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
+++ b/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
@@ -29,7 +29,6 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
       pointer type changed from: 'int*' to: 'char*'
 
 
-
 'struct S1 at test45-basic-type-change-v0.cc:13:1' changed:
   type size hasn't changed
   there are data member changes:
@@ -37,10 +36,8 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
       pointer type changed from: 'int*' to: 'char*'
 
 
-
 'struct S2 at test45-basic-type-change-v0.cc:18:1' changed:
   type size hasn't changed
   there are data member changes:
     type 'int*' of 'S2::m0' changed:
       pointer type changed from: 'int*' to: 'char*'
-
diff --git a/tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt b/tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt
index ca32f5eb..0979891a 100644
--- a/tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt
+++ b/tests/data/test-diff-filter/test44-anonymous-data-member-report-1.txt
@@ -10,5 +10,5 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
       struct {int b; float c;}
     to:
       struct {int b; float c; char e;}
-    size changed from 64 to 96 (in bits) (by +32 bits)
+    and size changed from 64 to 96 (in bits) (by +32 bits)
     'int S2::d' offset changed from 96 to 128 (in bits) (by +32 bits)
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 6/7] abidiff: Eliminate leaf mode double blank lines.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
                   ` (4 preceding siblings ...)
  2020-03-27 14:00 ` [PATCH 5/7] abidiff: Fix variable declaration formatting Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-27 14:00 ` [PATCH 7/7] abidiff: Remove new lines after parameter diffs Giuliano Procida
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

In --leaf-changes-only mode, the report currently has 2 blank lines
after each type-diff section. This patches changes this to 1.

	* src/abg-leaf-reporter.cc: (report_diffs) Emit 1 instead of 2
	new lines between sections.
	* tests/data/test-abidiff-exit/test-leaf-peeling-report.txt:
	Replace double blank lines with single ones.
	* tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt:
	Ditto.
	* tests/data/test-diff-suppr/test36-leaf-report-0.txt: Ditto.
	* tests/data/test-*/test*report*.txt:: Ditto.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-leaf-reporter.cc                                       | 2 +-
 tests/data/test-abidiff-exit/test-leaf-peeling-report.txt      | 3 ---
 .../test-diff-filter/libtest45-basic-type-change-report-1.txt  | 2 --
 tests/data/test-diff-suppr/test36-leaf-report-0.txt            | 1 -
 4 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/src/abg-leaf-reporter.cc b/src/abg-leaf-reporter.cc
index a3c96432..16e8f365 100644
--- a/src/abg-leaf-reporter.cc
+++ b/src/abg-leaf-reporter.cc
@@ -74,7 +74,7 @@ report_diffs(const reporter_base& r,
       if (r.diff_to_be_reported((*i)->get_canonical_diff()))
 	{
 	  if (started_to_emit)
-	    out << "\n\n";
+	    out << "\n";
 
 	  string n = (*i)->first_subject()->get_pretty_representation();
 
diff --git a/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt b/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
index c2e5e0fb..4d7d5754 100644
--- a/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
+++ b/tests/data/test-abidiff-exit/test-leaf-peeling-report.txt
@@ -11,20 +11,17 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
       type size changed from 32 to 64 (in bits)
     and size changed from 32 to 64 (in bits) (by +32 bits)
 
-
 'struct ops1 at test-leaf-peeling.0.cc:5:1' changed:
   type size hasn't changed
   there are data member changes:
     type 'int*' of 'ops1::x' changed:
       pointer type changed from: 'int*' to: 'int**'
 
-
 'struct ops2 at test-leaf-peeling.0.cc:9:1' changed:
   type size changed from 320 to 640 (in bits)
   there are data member changes:
     'foo ops2::y[10]' size changed from 320 to 640 (in bits) (by +320 bits)
 
-
 'struct ops3 at test-leaf-peeling.0.cc:13:1' changed:
   type size hasn't changed
   there are data member changes:
diff --git a/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt b/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
index eecb84a0..3bea50c9 100644
--- a/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
+++ b/tests/data/test-diff-filter/libtest45-basic-type-change-report-1.txt
@@ -28,14 +28,12 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
     type 'int*' of 'S0::m0' changed:
       pointer type changed from: 'int*' to: 'char*'
 
-
 'struct S1 at test45-basic-type-change-v0.cc:13:1' changed:
   type size hasn't changed
   there are data member changes:
     type 'int*' of 'S1::m0' changed:
       pointer type changed from: 'int*' to: 'char*'
 
-
 'struct S2 at test45-basic-type-change-v0.cc:18:1' changed:
   type size hasn't changed
   there are data member changes:
diff --git a/tests/data/test-diff-suppr/test36-leaf-report-0.txt b/tests/data/test-diff-suppr/test36-leaf-report-0.txt
index 92de4df4..d270740d 100644
--- a/tests/data/test-diff-suppr/test36-leaf-report-0.txt
+++ b/tests/data/test-diff-suppr/test36-leaf-report-0.txt
@@ -12,7 +12,6 @@ Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
     function void interface2(struct_type&)
     function void interface3(struct_type**)
 
-
 'struct leaf2 at test36-leaf-v0.cc:9:1' changed:
   type size changed from 64 to 96 (in bits)
   there are data member changes:
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 7/7] abidiff: Remove new lines after parameter diffs.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
                   ` (5 preceding siblings ...)
  2020-03-27 14:00 ` [PATCH 6/7] abidiff: Eliminate leaf mode double blank lines Giuliano Procida
@ 2020-03-27 14:00 ` Giuliano Procida
  2020-03-29 17:29 ` [PATCH 0/7] Mostly whitespace changes and fixes Matthias Maennich
  2020-03-31 10:37 ` Dodji Seketeli
  8 siblings, 0 replies; 13+ messages in thread
From: Giuliano Procida @ 2020-03-27 14:00 UTC (permalink / raw)
  To: libabigail; +Cc: dodji, kernel-team, gprocida, maennich

These blank lines break up the output unexpectedly and often cause
double blank lines after reporting of function changes.

	* src/abg-default-reporter.cc: (report_local_function_type_changes):
	Remove unnecessary blank lines after lists of parameter changes.
	* tests/data/test-*/test*report*.txt: Remove blank lines after
	parameter change lists in 12 files.

Signed-off-by: Giuliano Procida <gprocida@google.com>
---
 src/abg-default-reporter.cc                              | 9 ---------
 .../data/test-diff-dwarf/test20-add-fn-parm-report-0.txt | 1 -
 .../test-diff-dwarf/test24-added-fn-parms-report-0.txt   | 1 -
 .../test-diff-dwarf/test25-removed-fn-parms-report-0.txt | 1 -
 .../test26-added-parms-before-variadic-report.txt        | 4 ----
 .../test-diff-dwarf/test32-fnptr-changes-report-0.txt    | 1 -
 .../test-diff-dwarf/test33-fnref-changes-report-0.txt    | 1 -
 .../test-diff-dwarf/test42-PR21296-clanggcc-report0.txt  | 1 -
 tests/data/test-diff-dwarf/test46-rust-report-0.txt      | 1 -
 .../test30-pr18904-rvalueref-report0.txt                 | 1 -
 .../test30-pr18904-rvalueref-report1.txt                 | 1 -
 .../test30-pr18904-rvalueref-report2.txt                 | 1 -
 .../test35-pr18754-no-added-syms-report-0.txt            | 1 -
 13 files changed, 24 deletions(-)

diff --git a/src/abg-default-reporter.cc b/src/abg-default-reporter.cc
index 2754da4b..d2ac4a58 100644
--- a/src/abg-default-reporter.cc
+++ b/src/abg-default-reporter.cc
@@ -552,7 +552,6 @@ default_reporter::report_local_function_type_changes(const function_type_diff& d
   // this shouldn't be as straightforward.
 
   // Report about the parameters that got removed.
-  bool emitted = false;
   for (vector<function_decl::parameter_sptr>::const_iterator i =
 	 d.priv_->sorted_deleted_parms_.begin();
        i != d.priv_->sorted_deleted_parms_.end();
@@ -561,13 +560,9 @@ default_reporter::report_local_function_type_changes(const function_type_diff& d
       out << indent << "parameter " << (*i)->get_index()
 	  << " of type '" << (*i)->get_type_pretty_representation()
 	  << "' was removed\n";
-      emitted = true;
     }
-  if (emitted)
-    out << "\n";
 
   // Report about the parameters that got added
-  emitted = false;
   for (vector<function_decl::parameter_sptr>::const_iterator i =
 	 d.priv_->sorted_added_parms_.begin();
        i != d.priv_->sorted_added_parms_.end();
@@ -576,11 +571,7 @@ default_reporter::report_local_function_type_changes(const function_type_diff& d
       out << indent << "parameter " << (*i)->get_index()
 	  << " of type '" << (*i)->get_type_pretty_representation()
 	  << "' was added\n";
-      emitted = true;
     }
-
-  if (emitted)
-    out << "\n";
 }
 
 /// Build and emit a textual report about a @ref function_type_diff.
diff --git a/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt b/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt
index 18b30645..022d0d11 100644
--- a/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt
+++ b/tests/data/test-diff-dwarf/test20-add-fn-parm-report-0.txt
@@ -6,4 +6,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
   [C] 'function int add(int, int)' has some indirect sub-type changes:
     parameter 3 of type 'int' was added
 
-
diff --git a/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt b/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt
index 8a21e38c..e270f48b 100644
--- a/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt
+++ b/tests/data/test-diff-dwarf/test24-added-fn-parms-report-0.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 2 of type 'char' was added
     parameter 3 of type 'int' was added
 
-
diff --git a/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt b/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt
index 1253a8be..fab3a5f4 100644
--- a/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt
+++ b/tests/data/test-diff-dwarf/test25-removed-fn-parms-report-0.txt
@@ -8,4 +8,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     parameter 2 of type 'char' was removed
     parameter 3 of type 'int' was removed
 
-
diff --git a/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt b/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt
index 2432e53c..bfeb4f3b 100644
--- a/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt
+++ b/tests/data/test-diff-dwarf/test26-added-parms-before-variadic-report.txt
@@ -9,25 +9,21 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
       type size changed from 0 to 64 (in bits)
     parameter 3 of type '...' was added
 
-
   [C] 'function void fun2(const char*, ...)' has some indirect sub-type changes:
     parameter 2 of type '...' changed:
       entity changed from 'variadic parameter type' to 'const char*'
       type size changed from 0 to 64 (in bits)
     parameter 3 of type '...' was added
 
-
   [C] 'function void fun3(const char*, const int*, ...)' has some indirect sub-type changes:
     parameter 3 of type '...' changed:
       entity changed from 'variadic parameter type' to 'const int*'
       type size changed from 0 to 64 (in bits)
     parameter 4 of type '...' was added
 
-
   [C] 'function void fun4(const char*, const int*, ...)' has some indirect sub-type changes:
     parameter 3 of type '...' changed:
       entity changed from 'variadic parameter type' to 'const int*'
       type size changed from 0 to 64 (in bits)
     parameter 4 of type '...' was added
 
-
diff --git a/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt b/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt
index b3a0f9c4..8c6c6f73 100644
--- a/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test32-fnptr-changes-report-0.txt
@@ -33,7 +33,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         type of 'int ()* S::fnptr0' changed:
           in pointed to type 'function type int ()':
             parameter 1 of type 'double' was added
-
         type of 'int ()* S::fnptr1' changed:
           in pointed to type 'function type int ()':
             entity changed from 'function type int ()' to 'void'
diff --git a/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt b/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt
index 8b529fdc..2e886cf6 100644
--- a/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt
+++ b/tests/data/test-diff-dwarf/test33-fnref-changes-report-0.txt
@@ -34,7 +34,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
           type of 'int ()& S::fnref0' changed:
             in referenced type 'function type int ()':
               parameter 1 of type 'double' was added
-
           type of 'int ()& S::fnref1' changed:
             in referenced type 'function type int ()':
               entity changed from 'function type int ()' to 'int*'
diff --git a/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt b/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
index b45fa918..ff9e2841 100644
--- a/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
+++ b/tests/data/test-diff-dwarf/test42-PR21296-clanggcc-report0.txt
@@ -14,7 +14,6 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
     name of symbol changed from _ZN3STRD1Ev to _ZN3STRD2Ev
     parameter 1 of type 'int' was removed
 
-
   [C] 'function std::tuple<STR&&> my_forward_as_tuple<STR>(STR&&)' has some indirect sub-type changes:
     return type changed:
       type name changed from 'std::tuple<STR&&>' to 'std::tuple<STR &&>'
diff --git a/tests/data/test-diff-dwarf/test46-rust-report-0.txt b/tests/data/test-diff-dwarf/test46-rust-report-0.txt
index 0c745256..0562456e 100644
--- a/tests/data/test-diff-dwarf/test46-rust-report-0.txt
+++ b/tests/data/test-diff-dwarf/test46-rust-report-0.txt
@@ -14,4 +14,3 @@ Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
         name of 'one::Foo::a' changed to 'two::Foo::a'
     parameter 2 of type 'u32' was added
 
-
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
index 6867c0ea..79d41913 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report0.txt
@@ -1318,7 +1318,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
             type of 'void ()* InitTableEntry::func' changed:
               in pointed to type 'function type void ()':
                 parameter 1 of type 'typedef MyoArena' was added
-
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__2::func'
 
   [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' has some indirect sub-type changes:
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
index 951f0605..215cfbea 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report1.txt
@@ -1318,7 +1318,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
             type of 'void ()* InitTableEntry::func' changed:
               in pointed to type 'function type void ()':
                 parameter 1 of type 'typedef MyoArena' was added
-
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__2::func' at offload_table.h:295:1
 
   [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' at compiler_if_host.cpp:456:1 has some indirect sub-type changes:
diff --git a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
index fdd96bc8..09fdb9c6 100644
--- a/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
+++ b/tests/data/test-diff-filter/test30-pr18904-rvalueref-report2.txt
@@ -1318,7 +1318,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
             type of 'void ()* InitTableEntry::func' changed:
               in pointed to type 'function type void ()':
                 parameter 1 of type 'typedef MyoArena' was added
-
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__2::func' at offload_table.h:295:1
 
   [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' at compiler_if_host.cpp:456:1 has some indirect sub-type changes:
diff --git a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
index c0e56207..1f6e3e79 100644
--- a/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
+++ b/tests/data/test-diff-filter/test35-pr18754-no-added-syms-report-0.txt
@@ -234,7 +234,6 @@ Variable symbols changes summary: 0 Removed, 0 Added variable symbol not referen
             type of 'void ()* InitTableEntry::func' changed:
               in pointed to type 'function type void ()':
                 parameter 1 of type 'typedef MyoArena' was added
-
             and name of 'InitTableEntry::func' changed to '__anonymous_struct__2::func'
 
   [C] 'function int __offload_offload(OFFLOAD, const char*, int, int, VarDesc*, VarDesc2*, int, void**, void*, int, void*)' has some indirect sub-type changes:
-- 
2.25.1.696.g5e7596f4ac-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/7] Mostly whitespace changes and fixes.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
                   ` (6 preceding siblings ...)
  2020-03-27 14:00 ` [PATCH 7/7] abidiff: Remove new lines after parameter diffs Giuliano Procida
@ 2020-03-29 17:29 ` Matthias Maennich
  2020-03-31 10:37 ` Dodji Seketeli
  8 siblings, 0 replies; 13+ messages in thread
From: Matthias Maennich @ 2020-03-29 17:29 UTC (permalink / raw)
  To: Giuliano Procida; +Cc: libabigail, dodji, kernel-team

On Fri, Mar 27, 2020 at 02:00:10PM +0000, Giuliano Procida wrote:
>Hi.
>
>These are mostly whitespace changes. Let me know if any of them need
>a tweak. Apologies in advance for fedabipkgdiff test breakage.
>
>The first patch partially undoes 474ad38f in line with
>maennich@google.com's review comments and my original intention.
>
>However, if you prefer the more compact output format for top-level
>lists of [C]hanged things, it should be easy to switch to that as all
>the places where the different behaviour happens is commented.
>
>The fourth patch touches quite a bit of code which is not covered by
>current tests and I wasn't able to exercise.
>
>The fifth patch has semantic changes and warrants more careful review.
>
>This was also me working out how to do hg split with git.
>
> git rebase -i
> git reset HEAD^1
> git add -p
> git commit -c REBASE_HEAD
>

This is all excellent work and makes the output of abidiff so much more
consistent and nicer to read. Thanks a lot. For the whole series:
Reviewed-by: Matthias Maennich <maennich@google.com>

Cheers,
Matthias

>Regards,
>Giuliano.
>
>Giuliano Procida (7):
>  abidiff: Clean up new lines between sections.
>  abidiff: Remove blank line after base class diffs.
>  abidiff: Fix enum impacted interfaces blank line.
>  abidiff: Remove member function diff blank lines.
>  abidiff: Fix variable declaration formatting.
>  abidiff: Eliminate leaf mode double blank lines.
>  abidiff: Remove new lines after parameter diffs.
>
> src/abg-default-reporter.cc                   |  97 +++---------------
> src/abg-leaf-reporter.cc                      |  37 ++-----
> src/abg-reporter-priv.cc                      |  61 +++++++----
> tests/data/Makefile.am                        |   5 +
> .../test0-fn-changed-report-0.txt             |   1 -
> .../test0-fn-changed-report-2.txt             |   1 -
> .../test7-fn-changed-report-0.txt             |   1 -
> .../test-leaf-cxx-members-report.txt          |  42 ++++++++
> .../test-leaf-cxx-members-v0.cc               |  12 +++
> .../test-leaf-cxx-members-v0.o                | Bin 0 -> 7328 bytes
> .../test-leaf-cxx-members-v1.cc               |  14 +++
> .../test-leaf-cxx-members-v1.o                | Bin 0 -> 7360 bytes
> .../test-leaf-peeling-report.txt              |   5 -
> .../test-abidiff-exit/test-leaf2-report.txt   |   1 -
> .../test-abidiff-exit/test-leaf3-report.txt   |   3 +
> .../test-loc-with-locs-report.txt             |   1 -
> .../test-loc-without-locs-report.txt          |   1 -
> .../test1-voffset-change-report0.txt          |   1 -
> .../test-abidiff/test-PR18791-report0.txt     |   5 -
> tests/data/test-abidiff/test-enum0-report.txt |   1 -
> tests/data/test-abidiff/test-enum1-report.txt |   1 -
> .../data/test-abidiff/test-struct1-report.txt |   1 -
> .../PR25058-liblttng-ctl-report-1.txt         |   8 --
> .../test-23-diff-arch-report-0.txt            |   1 -
> tests/data/test-diff-dwarf/test0-report.txt   |   2 -
> tests/data/test-diff-dwarf/test1-report.txt   |   1 -
> tests/data/test-diff-dwarf/test10-report.txt  |   1 -
> tests/data/test-diff-dwarf/test11-report.txt  |   1 -
> tests/data/test-diff-dwarf/test13-report.txt  |   1 -
> .../test-diff-dwarf/test15-enum-report.txt    |   2 -
> tests/data/test-diff-dwarf/test2-report.txt   |   1 -
> .../test20-add-fn-parm-report-0.txt           |   2 -
> .../test21-redundant-fn-report-0.txt          |   1 -
> .../test22-changed-parm-c-report-0.txt        |   1 -
> .../test24-added-fn-parms-report-0.txt        |   2 -
> .../test25-removed-fn-parms-report-0.txt      |   2 -
> ...t26-added-parms-before-variadic-report.txt |   5 -
> .../test27-local-base-diff-report.txt         |   2 -
> .../test28-vtable-changes-report-0.txt        |   1 -
> tests/data/test-diff-dwarf/test3-report.txt   |   1 -
> .../test30-vtable-changes-report-0.txt        |   1 -
> .../test31-vtable-changes-report-0.txt        |   1 -
> .../test32-fnptr-changes-report-0.txt         |   2 -
> .../test33-fnref-changes-report-0.txt         |   2 -
> .../test36-ppc64-aliases-report-0.txt         |   1 -
> .../test-diff-dwarf/test37-union-report-0.txt |   1 -
> .../test-diff-dwarf/test38-union-report-0.txt |   1 -
> .../test-diff-dwarf/test39-union-report-0.txt |   1 -
> tests/data/test-diff-dwarf/test4-report.txt   |   1 -
> .../data/test-diff-dwarf/test40-report-0.txt  |   1 -
> .../test41-PR20476-hidden-report-0.txt        |   3 -
> .../test42-PR21296-clanggcc-report0.txt       |   2 -
> .../test43-PR22913-report-0.txt               |   1 -
> .../test44-anon-struct-union-report-0.txt     |   1 -
> .../test45-anon-dm-change-report-0.txt        |   1 +
> .../test-diff-dwarf/test46-rust-report-0.txt  |   2 -
> tests/data/test-diff-dwarf/test5-report.txt   |   1 -
> tests/data/test-diff-dwarf/test6-report.txt   |   1 -
> tests/data/test-diff-dwarf/test8-report.txt   |   2 -
> .../libtest45-basic-type-change-report-0.txt  |   1 -
> .../libtest45-basic-type-change-report-1.txt  |   8 +-
> .../test-PR24731-report-1.txt                 |   1 -
> tests/data/test-diff-filter/test0-report.txt  |   2 -
> tests/data/test-diff-filter/test01-report.txt |   2 -
> tests/data/test-diff-filter/test1-report.txt  |   1 -
> tests/data/test-diff-filter/test10-report.txt |   1 -
> tests/data/test-diff-filter/test11-report.txt |   1 -
> tests/data/test-diff-filter/test13-report.txt |   1 -
> .../data/test-diff-filter/test14-0-report.txt |   1 -
> .../data/test-diff-filter/test14-1-report.txt |   1 -
> .../data/test-diff-filter/test15-1-report.txt |   1 +
> .../data/test-diff-filter/test16-report-2.txt |   1 -
> tests/data/test-diff-filter/test16-report.txt |   1 -
> .../data/test-diff-filter/test17-0-report.txt |   1 -
> .../data/test-diff-filter/test17-1-report.txt |   1 -
> tests/data/test-diff-filter/test18-report.txt |   1 -
> .../test-diff-filter/test19-enum-report-1.txt |   2 -
> tests/data/test-diff-filter/test2-report.txt  |   1 -
> .../test22-compatible-fns-report-0.txt        |   1 -
> ...st23-redundant-fn-parm-change-report-0.txt |   1 -
> .../test25-cyclic-type-report-0.txt           |   1 -
> .../test25-cyclic-type-report-1.txt           |   1 -
> ...st26-qualified-redundant-node-report-0.txt |   1 -
> ...st26-qualified-redundant-node-report-1.txt |   1 -
> ...t-and-filtered-children-nodes-report-0.txt |   1 -
> ...t-and-filtered-children-nodes-report-1.txt |   1 -
> ...t-and-filtered-children-nodes-report-2.txt |   1 -
> ...t-and-filtered-children-nodes-report-0.txt |   1 -
> ...t-and-filtered-children-nodes-report-1.txt |   1 -
> ...st29-finer-redundancy-marking-report-0.txt |   2 -
> tests/data/test-diff-filter/test3-report.txt  |   1 -
> .../test30-pr18904-rvalueref-report0.txt      |   3 -
> .../test30-pr18904-rvalueref-report1.txt      |   3 -
> .../test30-pr18904-rvalueref-report2.txt      |   3 -
> .../test31-pr18535-libstdc++-report-0.txt     |   2 -
> .../test31-pr18535-libstdc++-report-1.txt     |   2 -
> .../test32-ppc64le-struct-change-report0.txt  |   1 -
> .../test35-pr18754-no-added-syms-report-0.txt |   3 -
> .../data/test-diff-filter/test36-report-0.txt |   1 -
> .../data/test-diff-filter/test37-report-0.txt |   1 -
> .../test39/test39-report-0.txt                |   1 -
> .../data/test-diff-filter/test41-report-0.txt |   1 -
> .../test44-anonymous-data-member-report-0.txt |   1 -
> .../test44-anonymous-data-member-report-1.txt |   2 +-
> tests/data/test-diff-filter/test6-report.txt  |   1 -
> tests/data/test-diff-filter/test7-report.txt  |   1 -
> tests/data/test-diff-filter/test9-report.txt  |   1 -
> ...x86_64--2.24.2-30.fc30.x86_64-report-0.txt |   1 -
> .../PR24690/PR24690-report-0.txt              |   1 -
> .../data/test-diff-pkg/dirpkg-1-report-1.txt  |   1 -
> .../data/test-diff-pkg/dirpkg-3-report-1.txt  |   1 -
> .../data/test-diff-pkg/dirpkg-3-report-2.txt  |   1 -
> ...libICE-1.0.9-2.el7.x86_64.rpm-report-0.txt |   2 +-
> ...4--libcdio-0.94-2.fc26.x86_64-report.1.txt |   1 -
> ...-2.0-0v5_2.4.1-1ubuntu2_amd64-report-0.txt |   4 -
> .../nss-3.23.0-1.0.fc23.x86_64-report-0.txt   |   7 --
> ...l7.x86_64-0.12.8-1.el7.x86_64-report-0.txt |   2 -
> ...l7.x86_64-0.12.8-1.el7.x86_64-report-1.txt |   2 -
> ...l7.x86_64-0.12.8-1.el7.x86_64-report-2.txt |   2 -
> ...l7.x86_64-0.12.8-1.el7.x86_64-report-3.txt |   1 -
> .../symlink-dir-test1-report0.txt             |   1 -
> .../data/test-diff-pkg/tarpkg-0-report-0.txt  |   1 -
> .../data/test-diff-pkg/tarpkg-1-report-0.txt  |   1 -
> ...bb-4.3-3.20141204.fc23.x86_64-report-0.txt |   5 -
> ...bb-4.3-3.20141204.fc23.x86_64-report-1.txt |   2 -
> .../libtest48-soname-abixml-report-1.txt      |   1 -
> .../test0-type-suppr-report-0.txt             |   1 -
> .../test0-type-suppr-report-3.txt             |   1 -
> .../test0-type-suppr-report-5.txt             |   1 -
> .../test0-type-suppr-report-7.txt             |   1 -
> .../test1-typedef-suppr-report-0.txt          |   1 -
> .../test1-typedef-suppr-report-2.txt          |   1 -
> .../test10-changed-parm-c-report-0.txt        |   1 -
> .../test11-add-data-member-report-0.txt       |   1 -
> .../test12-add-data-member-report-0.txt       |   1 -
> .../test12-add-data-member-report-2.txt       |   1 -
> .../test13-suppr-through-pointer-report-0.txt |   1 -
> .../test13-suppr-through-pointer-report-1.txt |   1 -
> .../test14-suppr-non-redundant-report-0.txt   |   1 -
> .../test14-suppr-non-redundant-report-1.txt   |   1 -
> .../test15-suppr-added-fn-report-0.txt        |   1 -
> .../test15-suppr-added-fn-report-1.txt        |   1 -
> .../test15-suppr-added-fn-report-5.txt        |   1 -
> .../test16-suppr-removed-fn-report-0.txt      |   1 -
> .../test16-suppr-removed-fn-report-2.txt      |   1 -
> .../test2-struct-suppr-report-0.txt           |   1 -
> .../test23-alias-filter-report-0.txt          |   1 -
> .../test23-alias-filter-report-2.txt          |   1 -
> .../test24-soname-report-1.txt                |   1 -
> .../test24-soname-report-10.txt               |   1 -
> .../test24-soname-report-12.txt               |   1 -
> .../test24-soname-report-14.txt               |   1 -
> .../test24-soname-report-16.txt               |   1 -
> .../test24-soname-report-4.txt                |   1 -
> .../test25-typedef-report-0.txt               |   1 -
> .../test26-loc-suppr-report-0.txt             |   1 -
> .../test26-loc-suppr-report-3.txt             |   1 -
> .../test3-struct-suppr-report-0.txt           |   1 -
> .../test3-struct-suppr-report-1.txt           |   1 -
> .../test3-struct-suppr-report-2.txt           |   1 -
> .../data/test-diff-suppr/test30-report-0.txt  |   1 -
> .../data/test-diff-suppr/test31-report-1.txt  |   1 -
> .../data/test-diff-suppr/test32-report-0.txt  |   1 -
> .../data/test-diff-suppr/test32-report-1.txt  |   1 -
> .../data/test-diff-suppr/test33-report-0.txt  |   1 -
> .../test-diff-suppr/test36-leaf-report-0.txt  |   1 -
> .../test39-opaque-type-report-0.txt           |   1 -
> .../test4-local-suppr-report-0.txt            |   1 -
> .../test4-local-suppr-report-1.txt            |   1 -
> .../test41-enumerator-changes-report-0.txt    |   3 -
> .../test42-negative-suppr-type-report-0.txt   |   1 -
> .../test42-negative-suppr-type-report-1.txt   |   1 -
> .../test47-non-reachable-types-report-1.txt   |   1 -
> .../test47-non-reachable-types-report-2.txt   |   1 -
> .../test47-non-reachable-types-report-3.txt   |   1 -
> .../test47-non-reachable-types-report-4.txt   |   1 -
> .../test47-non-reachable-types-report-5.txt   |   1 -
> .../test47-non-reachable-types-report-7.txt   |   1 -
> .../test47-non-reachable-types-report-8.txt   |   1 -
> .../test5-fn-suppr-report-0.txt               |   1 -
> .../test5-fn-suppr-report-1.txt               |   1 -
> .../test5-fn-suppr-report-2.txt               |   1 -
> .../test5-fn-suppr-report-3.txt               |   1 -
> .../test5-fn-suppr-report-4.txt               |   1 -
> .../test5-fn-suppr-report-5.txt               |   1 -
> .../test6-fn-suppr-report-0-1.txt             |   1 -
> .../test6-fn-suppr-report-0.txt               |   1 -
> .../test6-fn-suppr-report-1.txt               |   1 -
> .../test6-fn-suppr-report-2.txt               |   1 -
> .../test6-fn-suppr-report-3.txt               |   1 -
> .../test7-var-suppr-report-0.txt              |   1 +
> .../test7-var-suppr-report-8.txt              |   1 +
> .../test8-redundant-fn-report-0.txt           |   1 -
> .../test8-redundant-fn-report-1.txt           |   1 -
> .../test9-changed-parm-c-report-0.txt         |   1 -
> .../test9-changed-parm-c-report-1.txt         |   1 -
> tests/test-abidiff-exit.cc                    |  10 ++
> 197 files changed, 156 insertions(+), 385 deletions(-)
> create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-report.txt
> create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.cc
> create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v0.o
> create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
> create mode 100644 tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.o
>
>-- 
>2.25.1.696.g5e7596f4ac-goog
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 4/7] abidiff: Remove member function diff blank lines.
  2020-03-27 14:00 ` [PATCH 4/7] abidiff: Remove member function diff blank lines Giuliano Procida
@ 2020-03-30 14:13   ` Dodji Seketeli
  2020-03-30 14:50     ` Giuliano Procida
  0 siblings, 1 reply; 13+ messages in thread
From: Dodji Seketeli @ 2020-03-30 14:13 UTC (permalink / raw)
  To: Giuliano Procida; +Cc: libabigail, kernel-team, maennich

Giuliano Procida <gprocida@google.com> a écrit:

> Currently, lists of member function deletions, additions and changes
> are each followed by a blank line in abidiff output.
>
> While this formatting works reasonably well in leaf-changes-only mode
> for top-level changes to types, it is inconsistent with everthing
> else. In particular, when reporting member function diffs in default
> mode, or more deeply nested in leaf mode, the blank lines are
> jarring.
>
> There was also no test coverage for leaf-changes-only mode.
>
> This change removes these blank lines and associated state variables
> and logic. It adds a test case for leaf-changes-only mode.
>
> Note that the patch also modifies default mode reporting of member
> types, template member functions and template member classes
> analogously, but I wasn't able to exercise those code paths.

The template handling code can be ignored for now.  I initially started
to work on it but it needed huge adaptations on the compiler side to
have it emit debug info for non-instantiated templates.  I eventually
gave up on doing that because of more pressing matters.  So until we
have a compiler that emits debug information for non instantiated
templates, I don't think that code will be exercised.

[...]


> diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
> new file mode 100644
> index 00000000..0437584e
> --- /dev/null
> +++ b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
> @@ -0,0 +1,14 @@
> +struct ops {
> +  // TODO: type, name and size are differnent from deleted_var, but this is
> +  // still reported as a change rather than a deletion and an addition.
> +  long added_var;
> +  virtual long added_fn() { return 0; }

This is by design.  If a member variable S::foo_member at a given
offset/ is replaced by another variable S::bar_member (foo_member and
bar_member have the same offset), we chose to detect that foo_member was
renamed into bar_member.

So I think we can remove that TODO above.

Would you agree?

Cheers,

-- 
		Dodji

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 4/7] abidiff: Remove member function diff blank lines.
  2020-03-30 14:13   ` Dodji Seketeli
@ 2020-03-30 14:50     ` Giuliano Procida
  2020-03-30 15:22       ` Dodji Seketeli
  0 siblings, 1 reply; 13+ messages in thread
From: Giuliano Procida @ 2020-03-30 14:50 UTC (permalink / raw)
  To: Dodji Seketeli; +Cc: libabigail, kernel-team, Matthias Männich

Hi.

On Mon, 30 Mar 2020 at 15:13, Dodji Seketeli <dodji@seketeli.org> wrote:
>
> Giuliano Procida <gprocida@google.com> a écrit:
>
> > Currently, lists of member function deletions, additions and changes
> > are each followed by a blank line in abidiff output.
> >
> > While this formatting works reasonably well in leaf-changes-only mode
> > for top-level changes to types, it is inconsistent with everthing
> > else. In particular, when reporting member function diffs in default
> > mode, or more deeply nested in leaf mode, the blank lines are
> > jarring.
> >
> > There was also no test coverage for leaf-changes-only mode.
> >
> > This change removes these blank lines and associated state variables
> > and logic. It adds a test case for leaf-changes-only mode.
> >
> > Note that the patch also modifies default mode reporting of member
> > types, template member functions and template member classes
> > analogously, but I wasn't able to exercise those code paths.
>
> The template handling code can be ignored for now.  I initially started
> to work on it but it needed huge adaptations on the compiler side to
> have it emit debug info for non-instantiated templates.  I eventually
> gave up on doing that because of more pressing matters.  So until we
> have a compiler that emits debug information for non instantiated
> templates, I don't think that code will be exercised.

Good to know. It's worth adding some comments to the code to this
effect, so I'll do this.

> [...]
>
>
> > diff --git a/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
> > new file mode 100644
> > index 00000000..0437584e
> > --- /dev/null
> > +++ b/tests/data/test-abidiff-exit/test-leaf-cxx-members-v1.cc
> > @@ -0,0 +1,14 @@
> > +struct ops {
> > +  // TODO: type, name and size are differnent from deleted_var, but this is
> > +  // still reported as a change rather than a deletion and an addition.
> > +  long added_var;
> > +  virtual long added_fn() { return 0; }
>
> This is by design.  If a member variable S::foo_member at a given
> offset/ is replaced by another variable S::bar_member (foo_member and
> bar_member have the same offset), we chose to detect that foo_member was
> renamed into bar_member.
>
> So I think we can remove that TODO above.
>
> Would you agree?

I think the TODO has served its purpose which was to attract attention
(now or in the future). I'll remove it.

As to whether I agree... It was a little surprising. I think in most
large structs, if there are changes, the thing I'd mostly to discount
is offset, or perhaps name, next size (for arrays and perhaps integer
types on little endian architectures - but that is very risky) and
finally types. This doesn't really answer the question.

I think my mental model of comparing structs would be: list all the
names in offset order, compute a minimal edit based on names. Pair up
names that have been both removed and added and reclassify them as
moves (note that there may be more than one solution A,B -> B,A could
be A moving or B moving). Finally, perhaps, look at all (remaining)
possible matching removed/added pairs at the same position and see if
the type (including size) remains the same and reclassify these as
renames (this is also ambiguous and is more likely to be misleading
(bool flag1, bool flag2, -> bool flag3)).

If your structs correspond to network (wire) or hardware (DMA) data
structures, you're going to care about offsets an awful lot more.

Here are a couple more worth thinking about:

struct {
  char padding1[16];
  long foo;
  char padding2[8];
};

struct {
  char padding1[8];
  // did foo move and get renamed?
  long bar;
  char padding2[16];
};

and

struct {
  bool flag1;
  bool flag2;
};

struct {
  // flag1 deleted or flag1 renamed and flag2 deleted?
  bool flag2;
};

I'm happy for the code to be working as intended.

Regards.
Giuliano.

> Cheers,
>
> --
>                 Dodji
>
> --
> To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com.
>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 4/7] abidiff: Remove member function diff blank lines.
  2020-03-30 14:50     ` Giuliano Procida
@ 2020-03-30 15:22       ` Dodji Seketeli
  0 siblings, 0 replies; 13+ messages in thread
From: Dodji Seketeli @ 2020-03-30 15:22 UTC (permalink / raw)
  To: Giuliano Procida; +Cc: libabigail, kernel-team, Matthias Männich

Giuliano Procida <gprocida@google.com> a écrit:

[...]


>> > +struct ops {
>> > +  // TODO: type, name and size are differnent from deleted_var, but this is
>> > +  // still reported as a change rather than a deletion and an addition.
>> > +  long added_var;
>> > +  virtual long added_fn() { return 0; }
>>
>> This is by design.  If a member variable S::foo_member at a given
>> offset/ is replaced by another variable S::bar_member (foo_member and
>> bar_member have the same offset), we chose to detect that foo_member was
>> renamed into bar_member.
>>
>> So I think we can remove that TODO above.
>>
>> Would you agree?

[...]

> I think the TODO has served its purpose which was to attract attention
> (now or in the future). I'll remove it.

Thanks.  I am doing it locally here, so you don't need to send another
patch just for that.

[...]

> Here are a couple more worth thinking about:
>
> struct {
>   char padding1[16];
>   long foo;
>   char padding2[8];
> };
>
> struct {
>   char padding1[8];
>   // did foo move and get renamed?
>   long bar;
>   char padding2[16];
> };

Here is what abidiff shows for this one (I named the struct 'S'):

$ ~/git/libabigail/master/build/tools/abidiff -l test-v0.o test-v1.o 
Leaf changes summary: 1 artifact changed
Changed leaf types summary: 1 leaf type changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

'struct S at test-v0.c:1:1' changed:
  type size hasn't changed
  1 data member deletion:
    'long int S::foo', at offset 128 (in bits) at test-v0.c:3:1
  1 data member insertion:
    'long int S::bar', at offset 64 (in bits) at test-v1.c:4:1
  there are data member changes:
    type 'char[16]' of 'S::padding1' changed:
      type name changed from 'char[16]' to 'char[8]'
      array type size changed from 128 to 64
      array type subrange 1 changed length from 16 to 8
    and size changed from 128 to 64 (in bits) (by -64 bits)
    type 'char[8]' of 'S::padding2' changed:
      type name changed from 'char[8]' to 'char[16]'
      array type size changed from 64 to 128
      array type subrange 1 changed length from 8 to 16
    and offset changed from 192 to 128 (in bits) (by -64 bits), size changed from 64 to 128 (in bits) (by +64 bits)

$ 

> and
>
> struct {
>   bool flag1;
>   bool flag2;
> };
>
> struct {
>   // flag1 deleted or flag1 renamed and flag2 deleted?
>   bool flag2;
> };

And for this one, here is what abidiff shows (I renamed the struct as S
and did s/bool/char/):

$ ~/git/libabigail/master/build/tools/abidiff -l test-v0.o test-v1.o 
Leaf changes summary: 1 artifact changed
Changed leaf types summary: 1 leaf type changed
Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable

'struct S at test-v0.c:1:1' changed:
  type size changed from 16 to 8 (in bits)
  1 data member deletion:
    'bool S::flag1', at offset 0 (in bits) at test-v0.c:2:1
  there are data member changes:
    'bool S::flag2' offset changed from 8 to 0 (in bits) (by -8 bits)

$ 

Hopefully these change reports should address your (valid!) concerns.

Thanks for looking into this!

Cheers,

-- 
		Dodji

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 0/7] Mostly whitespace changes and fixes.
  2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
                   ` (7 preceding siblings ...)
  2020-03-29 17:29 ` [PATCH 0/7] Mostly whitespace changes and fixes Matthias Maennich
@ 2020-03-31 10:37 ` Dodji Seketeli
  8 siblings, 0 replies; 13+ messages in thread
From: Dodji Seketeli @ 2020-03-31 10:37 UTC (permalink / raw)
  To: Giuliano Procida; +Cc: libabigail, kernel-team, maennich

Hello Giuliano, Matthias,

Giuliano Procida <gprocida@google.com> a écrit:

[...]

> Giuliano Procida (7):
>   abidiff: Clean up new lines between sections.
>   abidiff: Remove blank line after base class diffs.
>   abidiff: Fix enum impacted interfaces blank line.
>   abidiff: Remove member function diff blank lines.
>   abidiff: Fix variable declaration formatting.
>   abidiff: Eliminate leaf mode double blank lines.
>   abidiff: Remove new lines after parameter diffs.

Great patch set, thank you!

I have applied it master.

[...]


Matthias Maennich <maennich@google.com> a écrit:

[...]

> This is all excellent work and makes the output of abidiff so much more
> consistent and nicer to read. Thanks a lot. For the whole series:
> Reviewed-by: Matthias Maennich <maennich@google.com>

Warmly seconded.

Many thanks for all these appreciated improvement!

Cheers,

-- 
		Dodji

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-03-31 10:37 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-27 14:00 [PATCH 0/7] Mostly whitespace changes and fixes Giuliano Procida
2020-03-27 14:00 ` [PATCH 1/7] abidiff: Clean up new lines between sections Giuliano Procida
2020-03-27 14:00 ` [PATCH 2/7] abidiff: Remove blank line after base class diffs Giuliano Procida
2020-03-27 14:00 ` [PATCH 3/7] abidiff: Fix enum impacted interfaces blank line Giuliano Procida
2020-03-27 14:00 ` [PATCH 4/7] abidiff: Remove member function diff blank lines Giuliano Procida
2020-03-30 14:13   ` Dodji Seketeli
2020-03-30 14:50     ` Giuliano Procida
2020-03-30 15:22       ` Dodji Seketeli
2020-03-27 14:00 ` [PATCH 5/7] abidiff: Fix variable declaration formatting Giuliano Procida
2020-03-27 14:00 ` [PATCH 6/7] abidiff: Eliminate leaf mode double blank lines Giuliano Procida
2020-03-27 14:00 ` [PATCH 7/7] abidiff: Remove new lines after parameter diffs Giuliano Procida
2020-03-29 17:29 ` [PATCH 0/7] Mostly whitespace changes and fixes Matthias Maennich
2020-03-31 10:37 ` Dodji Seketeli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).