为什么 gcc 13 不显示正确的二进制表示形式?

Lun*_*din 7 c gcc compiler-bug pointer-conversion c23

在这里回答问题时,我做了以下例子:

#include <stdio.h>
#include <math.h>

int main (void) 
{
  float_t a = -248.75;
  printf("%f\n", a);

  unsigned char* ptr = (unsigned char*)&a;
  for(size_t i=0; i<sizeof(a); i++)
  {
    printf("%.2X ", ptr[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

在版本 13 之前的 gcc 以及 clang 的所有版本上,这给出了预期的输出(x86 小端):

-248.750000
00 C0 78 C3 
Run Code Online (Sandbox Code Playgroud)

然而,当使用 gcc 13.1 编译时,我得到无意义的输出:

-248.750000
00 00 00 00 
Run Code Online (Sandbox Code Playgroud)

进一步检查发现,罪魁祸首就是这个选项-std=c2x。如果我删除它,程序将按预期运行。

使用的编译器选项:-std=c2x -pedantic-errors -Wall -Wextra -O3 -lm. https://godbolt.org/z/4qbo74eEW

这是 gcc 中的已知错误吗?

ema*_*uts 3

现在这被归档为 GCC bug,参见。https://gcc.gnu.org/PR111884

v11 和 v12 似乎对我有用。

编辑:此错误现已在 v13.3+ 中修复