<div dir="ltr">Hi, Alan<div><br></div><div>Really very excited to receive your email and sorry to be slow replying, it has been exceptionally busy over the last few days ;(</div><div><br></div><div>Your explanation made the problem clear to me. So gcov branch coverage should be called condition coverage and clang region coverage<br></div><div>is branch coverage in fact(also known as <b style="color:rgb(39,78,19)">decision/C1</b><font color="#000000" style="">)</font>, right?</div><div><br></div><div>And llvm/clang will support all the following coverage criteria in future</div><div><ul><li>Line coverage</li><li>Function coverage</li><li>Branch coverage/region coverage</li><li>Condition coverage</li><li>Modified Condition/Decision Coverage<br></li></ul><div>If there is any misunderstanding here, please point it out.</div><div><br></div><div>Thanks,</div></div><div>Ted Xie</div><div><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Phipps, Alan <<a href="mailto:a-phipps@ti.com">a-phipps@ti.com</a>> 于2020年4月28日周二 下午10:14写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div class="gmail-m_1180875836774759463WordSection1">
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Hi Ted,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">Presently, branch coverage is not supported in clang source-based code coverage, but I am working on implementing branch condition coverage right now.  It will
 track True/False branches for each leaf-level condition, including within Boolean expressions comprised of logical operators (“&&”, “||”).  Technically, this condition-based coverage is more granular than how “branch coverage” is often defined (tracking on
 that control flow decisions allow for all regions to be hit), and is closer to the granularity that GCOV provides, but it’s anchored to the source code, won’t count “hidden branches”, and isn’t negatively impacted by optimization (although the reverse isn’t
 true: coverage instrumentation may impact optimization).<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">My work is a step closer to getting us toward Modified Condition/Decision Coverage (MC/DC).  I hope to upstream my work within the next few months, so unfortunately
 it won’t help you in the short-term.  Region coverage may be enough for what you need if you can ascertain based on the coverage that control-flow decisions have evaluated to both true and false, but I’ll let others comment here with suggestions.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)">-Alan Phipps<u></u><u></u></span></p>
<p class="MsoNormal"><a name="m_1180875836774759463__MailEndCompose"><span style="font-size:11pt;font-family:Calibri,sans-serif;color:rgb(31,73,125)"><u></u> <u></u></span></a></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Tahoma,sans-serif">From:</span></b><span style="font-size:10pt;font-family:Tahoma,sans-serif"> llvm-dev [mailto:<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>]
<b>On Behalf Of </b>LoveZhi Xie via llvm-dev<br>
<b>Sent:</b> Sunday, April 26, 2020 11:36 AM<br>
<b>To:</b> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<b>Subject:</b> [EXTERNAL] [llvm-dev] How to get branch coverage by using 'source-based code coverage'<u></u><u></u></span></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi, llvm/clang experts<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I need to get the branch coverage for some testing code. But i found gcov can't give a expected coverage which may<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">count some 'hidden branch' in (See <a href="https://stackoverflow.com/questions/42003783/lcov-gcov-branch-coverage-with-c-producing-branches-all-over-the-place" target="_blank">stackoverflow answer</a>). Instead, I turn to use clang and the 'source-based
 code coverage' feature<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">may be a right choice. But i can't find anything to describe branch coverage explicitly on the
<a href="https://clang.llvm.org/docs/SourceBasedCodeCoverage.html" target="_blank">official site</a>. <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">So how to use clang to get branch coverage by utilizing 'source-based...' feature?  And is
<b><i>region coverage </i></b>equivalent to branch coverage?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">(I tested on a simple program and region coverage seems pretty close to branch coverage)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Any help is highly appreciated<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Thanks,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Ted Xie<u></u><u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</div>

</blockquote></div>