The testcase is failing to instrument part of the source because of a platform bug in the ordering of static DTORs. It seems unlikely that this is generically fixable in the toolchain (and given that it's likely to be a dynamic loader change would not be expected to be applied retrospectively to OS versions that are out of support). To avoid the testsuite noise, xfail the count lines that don't match (we can adjust the xfails as/when the upstream bug is fixed).
dejagnu xfails do not seem to work when embedded in a line like: ~Test (void) { .... /* count(1) { xfail ... } */ } the closing brace seems to confuse the parser. The solution is to exapnd the text onto three lines. as an aside, *not part of the applied patch*: FWIW, I think we should consider that if the correct operation of the coverage depends on CTOR priority there’s no point in setting it to the default when the target doesn’t support CTOR priorities - we might as well leave it as desired and at least that will DTRT within a single TU or under LTO. tested on x86-64-darwin16, x86_64-pc-linuc-gnu, applied to mainline thanks Iain 2019-07-25 Iain Sandoe <i...@sandoe.co.uk> PR gcov-profile/91087 * g++.dg/gcov/pr16855.C: Xfail the count lines for the DTORs and the "final" line for the failure summaries. Adjust source layout so that dejagnu xfail expressions work. diff --git a/gcc/testsuite/g++.dg/gcov/pr16855.C b/gcc/testsuite/g++.dg/gcov/pr16855.C index d7aa8a4f72..a68b05cb57 100644 --- a/gcc/testsuite/g++.dg/gcov/pr16855.C +++ b/gcc/testsuite/g++.dg/gcov/pr16855.C @@ -1,6 +1,8 @@ /* { dg-options "-fprofile-arcs -ftest-coverage" } */ /* { dg-do run { target native } } */ +/* See PR91087 for information on Darwin xfails. */ + #include <stdlib.h> #include <stdio.h> @@ -18,7 +20,9 @@ class Test { public: Test (void) { fprintf (stderr, "In Test::Test\n"); /* count(1) */ } - ~Test (void) { fprintf (stderr, "In Test::~Test\n"); /* count(1) */ } + ~Test (void) { + fprintf (stderr, "In Test::~Test\n"); /* count(1) { xfail *-*-darwin* } */ + } } T1; void @@ -42,7 +46,7 @@ static void __attribute__ ((constructor)) ctor_default () static void __attribute__ ((destructor)) dtor_default () { - fprintf (stderr, "in destructor(())\n"); /* count(1) */ + fprintf (stderr, "in destructor(())\n"); /* count(1) { xfail *-*-darwin* } */ } -/* { dg-final { run-gcov branches { -b pr16855.C } } } */ +/* { dg-final { run-gcov branches { -b pr16855.C } { xfail *-*-darwin* } } } */