Hi Marcin,<br><br>+ // Check if type is a C++ class with non-trivial destructor.<br>+ const RecordType* RT = QT.getTypePtr()->getAs<RecordType>();<br>+ if (!RT || cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor())<br>
+ return Scope;<br><br>RecordType is not necessarily CXXRecordType. cast<CXXRecordDecl> would cause crashes. We could do something like this:<br><br> if (const RecordType *RT = QT->getAs<RecordType>())<br>
if (CXXRecordDecl *ClassDecl = dyn_cast<CXXRecordDecl>(RT->getDecl()))<br> if (!ClassDecl->hasTrivialDestructor()) {<br> // Add the variable to scope<br> Scope = createOrReuseLocalScope(Scope);<br>
Scope->addVar(VD);<br> ScopePos = Scope->begin();<br> }<br> return Scope;<br><br><div class="gmail_quote">2010/9/28 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;"><div>Patch adds implicit destructors generation for objects with automatic storage duration. Patch is rather big, but it contains all cases (that I thought of), as it will be easier to review as a whole IMO. While commiting I can divide it to smaller chuncks.</div>
<div><br></div><div>I've added some test cases. They can be later used to create regresion tests.</div><div><br></div>Please approve for commit. <div><br></div><font color="#888888"><div>Marcin</div>
</font></blockquote></div><br>