The following shell/guile transcript showcases a minimal test-case for when a tail-call fools the code-coverage module into thinking that the line with the tail-call was not executed.
The result in the Guile transcript, $1, is an alist from line numbers (starting from zero) to execution counts. Converting the relevant coverage-data object into LCOV data via `coverage-data->lcov', as advertised in (info "(guile) Code Coverage"), then to HTML via LCOV's genhtml(1), will result in the relevant line being colored red and contribute negatively to the total line-coverage percentage. === BEGIN TRANSCRIPT === $ cat /tmp/test.scm (define (tail-call-test) (display "foo\n") (tail-call-target)) (define (tail-call-target) (display "bar\n")) $ guile GNU Guile 2.0.9.20-10454 Copyright (C) 1995-2013 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guile-user)> (begin ... (load "/tmp/test.scm") ... (call-with-values ... (lambda () ... ((@ (system vm coverage) with-code-coverage) ... ((@ (system vm vm) the-vm)) ... tail-call-test)) ... (lambda (data . values) ... ((@ (system vm coverage) line-execution-counts) data "/tmp/test.scm")))) ;;; <stdin>:0:4095: warning: possibly unbound variable `tail-call-test' foo bar $1 = ((5 . 1) (4 . 1) (2 . 0) (1 . 1) (0 . 1)) scheme@(guile-user)> === END TRANSCRIPT ===