<p dir="ltr"><br>
On 10 May 2014 17:03, "Nico Weber" <<a href="mailto:thakis@chromium.org">thakis@chromium.org</a>> wrote:<br>
><br>
> On Sat, May 10, 2014 at 4:12 PM, Richard Smith <<a href="mailto:richard@metafoo.co.uk">richard@metafoo.co.uk</a>> wrote:<br>
>><br>
>><br>
>> On 10 May 2014 12:32, "Nico Weber" <<a href="mailto:nicolasweber@gmx.de">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">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">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;<br>
>><br>
>> Doesn't Params point to an array? Looks like this will still leak the second and subsequent default arguments.<br>
><br>
> 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?</p>
<p dir="ltr">You're only deleting the tokens for the first parameter</p>
<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">cfe-commits@cs.uiuc.edu</a><br>
>> > <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
>><br>
>><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">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
>><br>
><br>
</p>