<div dir="ltr">Btw, I see a similar problem with the ReachableCode analysis:<div>lib/Analysis/ReachableCode.cpp:61 static bool isDeadReturn(...)</div><div>seems to rely on the invariant:</div><div>"A new block may only be started if there is control flow"</div>
<div>Is the analyzer actually trying to enforce this invariant?</div><div><br></div><div>Thanks!</div><div>/Manuel</div><div><br><div><br></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, May 3, 2014 at 5:38 PM, Manuel Klimek <span dir="ltr"><<a href="mailto:klimek@google.com" target="_blank">klimek@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Heya,<div><br></div><div>I am currently playing around with how the CFG looks in the face of temporary destructors; one interesting tidbit is that temporary destructors insert CFG blocks in places where one might not have expected them - for example, before the call to an arbitrary destructor at the end of a full expression.</div>

<div><br></div><div>Now the consumed analysis kills it state unconditionally at the end of each block:</div><div><a href="http://reviews.llvm.org/diffusion/L/browse/cfe/trunk/lib/Analysis/Consumed.cpp;207914$1400" target="_blank">http://reviews.llvm.org/diffusion/L/browse/cfe/trunk/lib/Analysis/Consumed.cpp;207914$1400</a><br>

</div><div>This leads to missed warnings when we leave a CFG block in the middle of an expression, and in general feels very brittle regarding future changes to the CFG's layout.</div><div><br></div><div>I was wondering whether there are already mechanisms in the CFG to deal with issues like this (I'd have expected a consumed analysis to work on the scope of a variable instead of arbitrary block boundaries - for example, could we use REGISTER_MAP_WITH_PROGRAMSTATE?).</div>

<div><br></div><div>Thoughts?</div><span class="HOEnZb"><font color="#888888"><div>/Manuel</div><div><br></div></font></span></div>
</blockquote></div><br></div>