#include <stdio.h>
int main()
{
short a[2];
a[0]=0x1111;
a[1]=0x1111;
*(int *)a = 0x22222222; /* violation of aliasing rules */
printf("%x %x\n", a[0], a[1]);
return 0;
}
以这个代码为例,我们知道它破坏了aliasing规则,下面是我gcc编译的表现:
gcc --version: 4.6.3
1)不加参数,输出2222 2222 这个一点都不意外
2)-O2, 输出2222 2222 这个就不太对了,按理说*(int *)a = 0x22222222; 这句不是应该被优化掉,输出1111 1111吗?
gcc -Q --help=optimizers -O2 的输出来看,-fstrict-aliasing是enabled的,编译时加-Wstrict-aliasing或-Wall也没有任何warning,请问这是怎么回事I
int main()
{
short a[2];
a[0]=0x1111;
a[1]=0x1111;
*(int *)a = 0x22222222; /* violation of aliasing rules */
printf("%x %x\n", a[0], a[1]);
return 0;
}
以这个代码为例,我们知道它破坏了aliasing规则,下面是我gcc编译的表现:
gcc --version: 4.6.3
1)不加参数,输出2222 2222 这个一点都不意外
2)-O2, 输出2222 2222 这个就不太对了,按理说*(int *)a = 0x22222222; 这句不是应该被优化掉,输出1111 1111吗?
gcc -Q --help=optimizers -O2 的输出来看,-fstrict-aliasing是enabled的,编译时加-Wstrict-aliasing或-Wall也没有任何warning,请问这是怎么回事I