У меня есть следующий код:Почему для этого кода не генерируются строгие сглаживания?
struct A
{
short b;
};
struct B
{
double a;
};
void foo (struct B* src)
{
struct B* b = src;
struct A* a = (struct A*)src;
b->a = sin(rand());
if(a->b == rand())
{
printf("Where are you strict aliasing warnings?\n");
}
}
Я компиляции кода с помощью следующей командной строки:
gcc -c -std=c99 -Wstrict-aliasing=2 -Wall -fstrict-aliasing -O3 foo.c
Я использую GCC 4.5.0. Я ожидал, что компилятор опубликует предупреждение:
warning: dereferencing type-punned pointer will break strict-aliasing rules
Но это никогда не было. Я могу получить предупреждение для печати в других случаях, но мне интересно, почему, в этом случае, это не так. Не является ли это очевидным примером нарушения правил строгого сглаживания?
'... -Wstrict-aliasing = 1 ...' вызывает предупреждение – pmg