J'ai le code suivant:Pourquoi aucun avertissement strict-aliasing n'est généré pour ce code?
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");
}
}
Je compile le code avec la ligne de commande suivante:
gcc -c -std=c99 -Wstrict-aliasing=2 -Wall -fstrict-aliasing -O3 foo.c
J'utilise GCC 4.5.0. Je m'attendais à ce que le compilateur imprime l'avertissement:
warning: dereferencing type-punned pointer will break strict-aliasing rules
Mais ça ne l'est jamais. Je peux obtenir l'avertissement pour d'autres cas, mais je me demande pourquoi, dans ce cas, ce n'est pas le cas. N'est-ce pas un exemple évident de violation des règles strictes d'alias?
'... -W strict-aliasing = 1 ...' produit l'avertissement – pmg