<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, May 10, 2014 at 4:12 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><p dir="ltr"><br>
On 10 May 2014 12:32, "Nico Weber" <<a href="mailto:nicolasweber@gmx.de" target="_blank">nicolasweber@gmx.de</a>> wrote:<br>
><br>
> Author: nico<br>
> Date: Sat May 10 14:23:28 2014<br>
> New Revision: 208481<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=208481&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=208481&view=rev</a><br>
> Log:<br>
> Don't leak default arg tokens on invalid destructors or conversion functions.<br>
><br>
> Fixes PR19689, and possibly the last leak in clang (PR19521). PR19689 contains<br>
> a few suggestions on how to make the default argument token code a bit more<br>
> solid, these changes can possibly be landed in follow-ups.<br>
><br>
> Modified:<br>
>     cfe/trunk/include/clang/Sema/DeclSpec.h<br>
><br>
> Modified: cfe/trunk/include/clang/Sema/DeclSpec.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DeclSpec.h?rev=208481&r1=208480&r2=208481&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DeclSpec.h?rev=208481&r1=208480&r2=208481&view=diff</a><br>


> ==============================================================================<br>
> --- cfe/trunk/include/clang/Sema/DeclSpec.h (original)<br>
> +++ cfe/trunk/include/clang/Sema/DeclSpec.h Sat May 10 14:23:28 2014<br>
> @@ -1231,6 +1231,10 @@ struct DeclaratorChunk {<br>
>      ///<br>
>      /// This is used in various places for error recovery.<br>
>      void freeParams() {<br>
> +      if (Params) {<br>
> +        delete Params->DefaultArgTokens;<br>
> +        Params->DefaultArgTokens = nullptr;</p>
</div><p dir="ltr">Doesn't Params point to an array? Looks like this will still leak the second and subsequent default arguments.</p></blockquote><div>I believe it points to a CachedTokens, which is a typedef for a SmallVector<Token, 4> – so I think it might be correct as-is?<br>
</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5">
<p dir="ltr">> +      }<br>
>        if (DeleteParams) {<br>
>          delete[] Params;<br>
>          DeleteParams = false;<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</p>
</div></div><br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>