[sisyphus] Странности при переходе объединении двух целых в вещественное на x86_64

Serge Ryabchun sr на osdn.org.ua
Пт Авг 7 16:59:08 MSD 2009


Это не повод собирать не верный код:

[sr на sr 6]$ gcc-4.3 -Wall -O2 f2.c
f2.c: In function 'main':
f2.c:10: warning: dereferencing type-punned pointer will break
strict-aliasing rules
[sr на sr 6]$ ./a.out
TEST 00: 0.000000
[sr на sr 6]$
[sr на sr 6]$ gcc-4.4 -Wall -O2 f2.c
f2.c: In function 'main':
f2.c:10: warning: dereferencing type-punned pointer will break
strict-aliasing rules
[sr на sr 6]$ ./a.out
TEST 00: 3.140000

2009/8/7 Alexey Rusakov <ktirf на altlinux.org>:
> В Птн, 07/08/2009 в 12:02 +0300, Roman Savochenko пишет:
>> Kirill A. Shutemov wrote:
>> > 2009/8/7 Roman Savochenko <rom_as на diyaorg.dp.ua>:
>> >
>> >> Kirill A. Shutemov wrote:
>> >>
>> >>>>> И во всех трёх вариантах нарушили strict aliasing. Используйте union.
>> >>>>>
>> >>>>  ним работает, но это не решение, поскольку приведенные мною обороты
>> >>>> распространены и я не уверен что подобных проблем нет в других частях
>> >>>> моей,
>> >>>> в общем-то не маленькой, программы.
>> >>>>
>> >>>>
>> >>> Есть повод исправить код.
>> >>>
>> >>>
>> >> Я не считаю его ошибочным.
>> >>
>> > Strict aliasing rule -- часть стандарта C99. Если вы хотите писать
>> > быстрый переносимый
>> > код, то вам стоит следовать этому правилу.
>> >
>> Ничего про стандартность тут
>> http://en.wikipedia.org/wiki/Aliasing_(computing) не увидил. А про то
>> что существуют конфликты с оптимизаторами там есть.
> Смотрите внимательнее:
> "...the ISO standard for the C programming language (including its newer
> C99 edition) specifies that it is illegal (with some exceptions) for
> pointers of different types to reference the same memory location."
>
> --
>  Alexey "Ktirf" Rusakov
>  GNOME Project
>  ALT Linux Team
>
> _______________________________________________
> Sisyphus mailing list
> Sisyphus на lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/sisyphus
>



-- 
Рябчун Сергей <serge.ryabchun на gmail.com>


Подробная информация о списке рассылки Sisyphus