Understand control flow graph in lcov branch coverage output
<p>I am trying to improve my unit tests by inspecting my current code coverage percentage. I am using gcov and lcov to produce a HTML report of the coverage results. However, I am having problems understanding some of the output. I know that a <code>+</code> indicates that a branch was taken and a <code>-</code> that it was not taken.</p>

<pre><code>131                 :          8 :         QString toString() const
132                 :            :         {
133 [ +  - ][ +  - ]:          8 :             return ((negative &amp;&amp; !isZero()) ? "-" : "") + QString::number(sec) + "." + QString::number(nano).rightJustified(9, '0');
    [ +  - ][ +  + ]
    [ +  - ][ +  - ]
    [ +  - ][ +  - ]
            [ +  - ]
134                 :            :         }
</code></pre>

<p>Variable <code>negative</code> is of type bool as is the return value of method <code>isZero</code>. So I would expect four branches here but I don't see how the output maps to this expectation. So how is the output to be interpreted? Tooltips when hovering over the +/- signs tell me that branches 3, 6, 9, 11, 12, 14, 17, 20, 23 and 26 were taken while branches 4, 7, 10, 15, 18, 21, 24 and 27 were never taken.</p>