<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Compiler Collection (GCC) Internals: gcov Testing</title>

<meta name="description" content="GNU Compiler Collection (GCC) Internals: gcov Testing">
<meta name="keywords" content="GNU Compiler Collection (GCC) Internals: gcov Testing">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Testsuites.html#Testsuites" rel="up" title="Testsuites">
<link href="profopt-Testing.html#profopt-Testing" rel="next" title="profopt Testing">
<link href="LTO-Testing.html#LTO-Testing" rel="prev" title="LTO Testing">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="gcov-Testing"></a>
<div class="header">
<p>
Next: <a href="profopt-Testing.html#profopt-Testing" accesskey="n" rel="next">profopt Testing</a>, Previous: <a href="LTO-Testing.html#LTO-Testing" accesskey="p" rel="prev">LTO Testing</a>, Up: <a href="Testsuites.html#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Support-for-testing-gcov"></a>
<h3 class="section">7.7 Support for testing <code>gcov</code></h3>

<p>Language-independent support for testing <code>gcov</code>, and for checking
that branch profiling produces expected values, is provided by the
expect file <samp>lib/gcov.exp</samp>.  <code>gcov</code> tests also rely on procedures
in <samp>lib/gcc-dg.exp</samp> to compile and run the test program.  A typical
<code>gcov</code> test contains the following DejaGnu commands within comments:
</p>
<div class="smallexample">
<pre class="smallexample">{ dg-options &quot;-fprofile-arcs -ftest-coverage&quot; }
{ dg-do run { target native } }
{ dg-final { run-gcov sourcefile } }
</pre></div>

<p>Checks of <code>gcov</code> output can include line counts, branch percentages,
and call return percentages.  All of these checks are requested via
commands that appear in comments in the test&rsquo;s source file.
Commands to check line counts are processed by default.
Commands to check branch percentages and call return percentages are
processed if the <code>run-gcov</code> command has arguments <code>branches</code>
or <code>calls</code>, respectively.  For example, the following specifies
checking both, as well as passing <samp>-b</samp> to <code>gcov</code>:
</p>
<div class="smallexample">
<pre class="smallexample">{ dg-final { run-gcov branches calls { -b sourcefile } } }
</pre></div>

<p>A line count command appears within a comment on the source line
that is expected to get the specified count and has the form
<code>count(<var>cnt</var>)</code>.  A test should only check line counts for
lines that will get the same count for any architecture.
</p>
<p>Commands to check branch percentages (<code>branch</code>) and call
return percentages (<code>returns</code>) are very similar to each other.
A beginning command appears on or before the first of a range of
lines that will report the percentage, and the ending command
follows that range of lines.  The beginning command can include a
list of percentages, all of which are expected to be found within
the range.  A range is terminated by the next command of the same
kind.  A command <code>branch(end)</code> or <code>returns(end)</code> marks
the end of a range without starting a new one.  For example:
</p>
<div class="smallexample">
<pre class="smallexample">if (i &gt; 10 &amp;&amp; j &gt; i &amp;&amp; j &lt; 20)  /* <span class="roman">branch(27 50 75)</span> */
                                /* <span class="roman">branch(end)</span> */
  foo (i, j);
</pre></div>

<p>For a call return percentage, the value specified is the
percentage of calls reported to return.  For a branch percentage,
the value is either the expected percentage or 100 minus that
value, since the direction of a branch can differ depending on the
target or the optimization level.
</p>
<p>Not all branches and calls need to be checked.  A test should not
check for branches that might be optimized away or replaced with
predicated instructions.  Don&rsquo;t check for calls inserted by the
compiler or ones that might be inlined or optimized away.
</p>
<p>A single test can check for combinations of line counts, branch
percentages, and call return percentages.  The command to check a
line count must appear on the line that will report that count, but
commands to check branch percentages and call return percentages can
bracket the lines that report them.
</p>
<hr>
<div class="header">
<p>
Next: <a href="profopt-Testing.html#profopt-Testing" accesskey="n" rel="next">profopt Testing</a>, Previous: <a href="LTO-Testing.html#LTO-Testing" accesskey="p" rel="prev">LTO Testing</a>, Up: <a href="Testsuites.html#Testsuites" accesskey="u" rel="up">Testsuites</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
