问题描述
如果我使用 -O2 -Wall
(或 -O3
)将此代码编译到 gcc 7.1
#include <stdio.h>
int main (void)
{
char array [4] = {0x11,0x22,0x33,0x44};
unsigned int u32 = *(unsigned int*)array; // intentionally invoking strict aliasing UB here
printf("%x\n",u32);
return 0;
}
然后我得到有关未定义行为的诊断:
警告:取消引用类型双关指针会破坏严格别名规则[-Wstrict-aliasing]
这仅在启用优化时发生。
在 7.2 中,此警告消失并一直禁用至今。 7.2 中发生了什么使警告消失?与 gcc 一样,更改完全没有记录 - https://gcc.gnu.org/gcc-7/changes.html 没有说明对严格别名的更改。编译与否 -fstrict-aliasing
似乎也无关紧要。
7.2 中的行为是有意更改还是这是一个错误?是否有任何已知的错误报告?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)