Hi Marcin,<br><br>I suggest we fix the CFGElement part of design in the first patches, and leave the CFG building processes later. Attached is my patch based on your proposal. The differences are:<br><br>- I made two pointers explicit in the CFGElement since they are simpler and as I calculated before they won't take too much memory, and we can optimize them any time later.<br>
<br>- I added dtors for temporaries. This is truly needed as we don't want to reason about it every time we need it.<br><br>What do you think?<br><br><div class="gmail_quote">2010/9/3 Marcin Świderski <span dir="ltr"><<a href="mailto:marcin.sfider@gmail.com">marcin.sfider@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi<div><br></div><div>I'm sending a patch with implementation of C++</div><div>- initializers from constructor initialization list,</div>
<div>- implicit destructors for objects with automatic storage duration.</div><div>
<br></div><div>For destructors I've taken care of:</div><div>- block local scopes,</div><div>- if/switch/for/while/do local scopes (in case there's no block),</div><div>- if/switch/for/while condition variables,</div>

<div>- catch exception variable,</div><div>- temporaries bound to const reference.</div><div><br></div><div>Is there something that I've missed?</div><div><br></div><div>As it have been suggested I've created hierarchy of CFGElements. Currently there're two unused types for implicit destructor calls in destructor. I've did not revert ability of CFGElement to cast/dyn_cast to Stmt, because it would lead to situation when cast<Stmt>(SomeCFGElement) would return null. I did however add method for downcasting CFGElement object to object of its implemntation class (returned by value, not pointer) with returning invalid object on invalid cast.</div>

<div><br></div><div>I did not add CFGElement for destructors of temporary objects. After giving it some thought I came to a conclusion that it shouldn't be covered by CFG, because it clearly needs path-sensitiveness.</div>

<div><br></div><div>Cheers</div><div>Marcin</div>
</blockquote></div><br>