Fix compilation errors with libstdc++v3 for AVR target and allow --enable-libstdcxx

Jonathan Wakely jwakely@redhat.com
Thu Dec 15 11:15:00 GMT 2016


On 14/12/16 18:38 -0300, Felipe Magno de Almeida wrote:
>Hello Jonathan,
>
>Sorry for the delay, I was in mid-vacation.
>
>Comments are inline.
>
>On Tue, Dec 6, 2016 at 3:45 PM, Jonathan Wakely <jwakely@redhat.com> wrote:
>> On 16/09/16 02:53 -0300, Felipe Magno de Almeida wrote:
>>>
>
>[snip]
>
>>> I've tried both approaches. Templates were causing problems of not
>>> defined instantations because they were being used as ints too
>>> in other _M_extract functions through a tmp integer. And typedef's
>>> caused the same problem of having to use a tmp value of the right
>>> type but for example _M_extract_wday_or_month could not have the
>>> same type (in AVR they do) and I'd have to use a temporary anyway
>>> then.
>>>
>>> This was the least intrusive way.
>>
>>
>> Did you consider something like this?
>
>I have, but I did not like how it could run code that is not very explicit
>in case of exceptions, possibly assigning from a non-initialized variable,

OK, but that assignment from a possibly-uninitialized variable was
also present in your original patch.

>causing, theoretically UB. Besides, __mem was already used for
>tm_mom, so it seemed best to just mimic for the rest.

Yes, but now we have that overhead of extra reads and writes for every
function, not just that one.

>I have another patch attached which fixes the problem you mentioned
>and the same problem with the tm_wday in a different switch-case.
>I've removed all initializations of __mem, the same way that tm_mon
>already did not initialize it, because the value is not actually used at
>all in extract_num and variants.

Doesn't this now mean that if an error happens in the _M_extract_xxx
function we set tm.tm_xxx to garbage?

The existing tm.tm_mon case handles that correctly, by checking for an
error first.

>I have ran the test and nothing on locale failed, I've ran again with the fixes,
>and there are also no errors on locale. Testing with x86_64.

Good, thanks for testing it.



More information about the Libstdc++ mailing list