<div class="gmail_quote">W dniu 3 września 2010 06:39 użytkownik Ted Kremenek <span dir="ltr"><<a href="mailto:kremenek@apple.com">kremenek@apple.com</a>></span> napisał:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Marcin,<br>
<br>
Thanks again for doing this.  I will try and take a look at this in detail in the next 24 hours and come back with feedback.  As I mentioned to Zhongxing and Jordy in a private email, we should hold off and committing any of these changes until LLVM branches tomorrow for the 2.8 release.<br>

<br>
I have one question/comment inline (below).<br>
<div><div></div><div class="h5"><br>
On Sep 2, 2010, at 3:29 PM, Marcin Świderski <<a href="mailto:marcin.sfider@gmail.com">marcin.sfider@gmail.com</a>> wrote:<br>
<br>
> Hi<br>
><br>
> I'm sending a patch with implementation of C++<br>
> - initializers from constructor initialization list,<br>
> - implicit destructors for objects with automatic storage duration.<br>
><br>
> For destructors I've taken care of:<br>
> - block local scopes,<br>
> - if/switch/for/while/do local scopes (in case there's no block),<br>
> - if/switch/for/while condition variables,<br>
> - catch exception variable,<br>
> - temporaries bound to const reference.<br>
><br>
> Is there something that I've missed?<br>
><br>
> 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.<br>

><br>
> 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.<br>
<br>
</div></div>How is this path-sensitive?  The compiler has to generate destructors calls at the IR level without doing any path-sensitive analysis at all (and actually no flow-sensitive analysis either).<br><br></blockquote>
<div>If we would want to model destructors of temporaries directly in CFG we would have to generate blocks structure mirroring that generated for full expression. That is because of expressions with control flow (&&, ||, ?:). But what do we need this for?</div>
<div>- If we want to know of all destructors that can be called at the and of full expression, we can look at CXXExprWithTemporaries in AST.</div><div>- If we want to know exactly what destructors will be called at the end of full expression we can build stack of all temporaries seen on some specific path.</div>
<div>Direct modeling this in CFG won't be easier to use by a client in any of this cases IMO.</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
><br>
> Cheers<br>
> Marcin<br>
> <cfg-init-dtor.patch><br>
</blockquote></div><br>