[Patch] Improve the old fix for 11095

Paolo Carlini pcarlini@unitus.it
Fri Oct 10 16:15:00 GMT 2003


Benjamin Kosnik wrote:

>This use of __builtin_alloca is wrong... 
>
> 	      if (__w > __len)
>  		{
>! 		  __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
>! 							       * __w));
>! 		  __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, 
>  						 &__c, __w, __len, false);
>  		  __len = __w;
>  		}
>! 	      __out._M_write(__cs, __len);
>
>
>__cs is only valid in the scope of the if block, but is used outside of
>it (in __out._M_write(__cs, __len).
>
Benjamin, I'm not sure to understand what you mean... To my best knowledge,
memory allocated with __builtin_alloca, or plain 'alloca' for that matter,
is freed at the end of the /function/ not at the end of the block! The glibc
info pages are very clear about that!

And, anyway, memory allocated with __builtin_alloca is already used outside
the nearest enclosing scope in /many/ places in locale_facets.tcc.

If, on the other hand, you are sure that __builtin_alloca behaves 
/differently/
than alloca, please let me know asap.

Paolo.



More information about the Libstdc++ mailing list