This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [Patch] Improve the old fix for 11095
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.