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>