git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/8] Support coverage testing with GCC/gcov

From
Thomas Rast <trast@student.ethz.ch>
Date
Feb 15, 2009, 22:25 UTC
Message-ID
<fb1e427bf56f5061634bc57fe6837f75e36c6cb2.1234736374.git.trast@student.ethz.ch>
In-Reply-To
<cover.1234736374.git.trast@student.ethz.ch>

With gcc's --coverage option, we can perform automatic coverage data collection for the test suite.

Add a new Makefile target 'coverage' that scraps all previous coverage results, recompiles git with the required compiler/linker flags (in addition to any flags you specify manually), then runs the test suite and compiles a report.

The compilation must be done with all optimizations disabled, since inlined functions (and for line-by-line coverage, also optimized branches/loops) break coverage tracking.

The tests are run serially (with -j1). The coverage code should theoretically allow concurrent access to its data files, but the author saw random test failures. Obviously this could be improved.

The report currently consists of a list of functions that were never executed during the tests, which is written to 'coverage-untested-functions'. Once this list becomes reasonably short, we would also want to look at branches that were never taken.

Currently only toplevel *.c files are considered. It would be nice to at least include xdiff, but --coverage did not save data to subdirectories on the system used to write this (gcc 4.3.2).

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
 Makefile |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index b040a96..1c514a9 100644
--- a/Makefile
+++ b/Makefile
@@ -1640,3 +1640,26 @@ check-docs::
 check-builtins::
 	./check-builtins.sh
 
+### Test suite coverage testing
+#
+.PHONY: coverage coverage-clean coverage-build coverage-report
+
+coverage:
+	$(MAKE) coverage-build
+	$(MAKE) coverage-report
+
+coverage-clean:
+	rm -f *.gcda *.gcno
+
+COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs
+COVERAGE_LDFLAGS = $(CFLAGS)  -O0 -lgcov
+
+coverage-build: coverage-clean
+	$(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" \
+		-j1 all test
+
+coverage-report:
+	gcov -b *.c
+	grep '^function.*called 0 ' *.c.gcov \
+		| sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \
+		| tee coverage-untested-functions
-- 
1.6.2.rc0.335.g1a2b
Previous: Thomas RastNext: Matthieu Moy
Message 2 of 11 in “Support coverage testing with GCC/gcov”
  1. 0/8 Support coverage testing with GCC/gcovThomas Rast, Feb 15, 2009
  2. 1/8 Support coverage testing with GCC/gcovThomas Rast, Feb 15, 2009
  3. Matthieu MoyFeb 16, 2009
  4. Thomas RastFeb 16, 2009
  5. 2/8 Test that diff can read from stdinThomas Rast, Feb 15, 2009
  6. 3/8 Test diff --dirstat functionalityThomas Rast, Feb 15, 2009
  7. 4/8 Test log --graphThomas Rast, Feb 15, 2009
  8. 5/8 Test fsck a bit harderThomas Rast, Feb 15, 2009
  9. 6/8 Test log --decorateThomas Rast, Feb 15, 2009
  10. 7/8 Test rev-list --parents/--childrenThomas Rast, Feb 15, 2009
  11. 8/8 Test git-patch-idThomas Rast, Feb 15, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.