[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