summaryrefslogtreecommitdiffstats
path: root/docs
diff options
context:
space:
mode:
authorVedant Kumar <vsk@apple.com>2016-09-19 01:42:38 +0000
committerVedant Kumar <vsk@apple.com>2016-09-19 01:42:38 +0000
commitc338f66d3913e676ef253e1e8f924935ed99f00e (patch)
treeb4a286fc84947bce3a966d8cfdc8de1a14636391 /docs
parentbff491fabcf672233d3be64df13968c3287cdd53 (diff)
[docs] Touch up the code coverage doc
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281881 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r--docs/SourceBasedCodeCoverage.rst38
1 files changed, 29 insertions, 9 deletions
diff --git a/docs/SourceBasedCodeCoverage.rst b/docs/SourceBasedCodeCoverage.rst
index 8c4ab8d0ae..f2f3f82e43 100644
--- a/docs/SourceBasedCodeCoverage.rst
+++ b/docs/SourceBasedCodeCoverage.rst
@@ -125,24 +125,24 @@ region counts (even in macro expansions):
.. code-block:: none
- 20| 1|#define BAR(x) ((x) || (x))
+ 1| 20|#define BAR(x) ((x) || (x))
^20 ^2
2| 2|template <typename T> void foo(T x) {
- 22| 3| for (unsigned I = 0; I < 10; ++I) { BAR(I); }
+ 3| 22| for (unsigned I = 0; I < 10; ++I) { BAR(I); }
^22 ^20 ^20^20
- 2| 4|}
+ 4| 2|}
------------------
| void foo<int>(int):
- | 1| 2|template <typename T> void foo(T x) {
- | 11| 3| for (unsigned I = 0; I < 10; ++I) { BAR(I); }
+ | 2| 1|template <typename T> void foo(T x) {
+ | 3| 11| for (unsigned I = 0; I < 10; ++I) { BAR(I); }
| ^11 ^10 ^10^10
- | 1| 4|}
+ | 4| 1|}
------------------
| void foo<float>(int):
- | 1| 2|template <typename T> void foo(T x) {
- | 11| 3| for (unsigned I = 0; I < 10; ++I) { BAR(I); }
+ | 2| 1|template <typename T> void foo(T x) {
+ | 3| 11| for (unsigned I = 0; I < 10; ++I) { BAR(I); }
| ^11 ^10 ^10^10
- | 1| 4|}
+ | 4| 1|}
------------------
It's possible to generate a file-level summary of coverage statistics (instead
@@ -177,6 +177,26 @@ A few final notes:
% llvm-profdata merge -sparse foo1.profraw foo2.profdata -o foo3.profdata
+Interpreting reports
+====================
+
+There are four statistics tracked in a coverage summary:
+
+* Function coverage is the percentage of functions which have been executed at
+ least once. A function is treated as having been executed if any of its
+ instantiations are executed.
+
+* Instantiation coverage is the percentage of function instantiations which
+ have been executed at least once.
+
+* Line coverage is the percentage of code lines which have been executed at
+ least once.
+
+* Region coverage is the percentage of code regions which have been executed at
+ least once. A code region may span multiple lines (e.g a large function with
+ no control flow). However, it's also possible for a single line to contain
+ multiple code regions (e.g some short-circuited logic).
+
Format compatibility guarantees
===============================