[devel] странная проблема с gcc?

Dmitry V. Levin ldv на altlinux.org
Вт Май 21 00:13:25 MSK 2024


On Mon, May 20, 2024 at 11:37:50PM +0300, Vladislav Zavjalov wrote:
> Всем привет!
> 
> Локализовал какую-то странную проблему в C коде,
> не понимаю, это проблема с моим пониманием С или с компилятором.
> 
> Код ниже: число печатается кусочками по два байта.
> Это перестает работать при компиляции с -O2 или -O3.

Это -fstrict-aliasing, который включён в -O2.

$ gcc -Wall -O2 -Wstrict-aliasing=2 a.c && ./a.out
a.c: In function 'main':
a.c:9:33: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
    9 |     printf("%#x\n", ((uint16_t*)&v1)[i]);
      |                                 ^~~
a.c:6:12: warning: 'v1' is used uninitialized [-Wuninitialized]
    6 |   uint32_t v1 = 0x12345678;
      |            ^~

-- 
ldv


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