声明__m256无法访问其成员后

After declaring a __m256 fail to access its members

本文关键字:成员 访问 m256 声明      更新时间:2023-10-16

当我尝试使用 icpc 编译时,它显示"表达式必须具有类类型"。对此感到困惑。请帮忙。

int main()
{
__m256d temp;
temp.m256d_f64[0] = 1;
return 0;
}       

我可以在我这边重现这个问题。在英特尔编译器附带的 immintrin.h 中,我们对__m256d有以下定义:

typedef struct _MMINTRIN_TYPE(32) __m256d {
double m256d_f64[4];
} __m256d;

在上面的定义中,结构名称和别名是相同的,这混淆了当前的编译器。英特尔编译器似乎无法将 typedef 名称识别为可以用较小的测试用例证明的类:

$ cat test1.cc
typedef struct __m256d {
double m256d_f64[4];
} m256d;
int main()
{
__m256d temp;
temp.m256d_f64[0] = 1;
return 0;
}
$ icpc test1.cc –c

当我更改 typedef 并实例化 temp 时,如下所示(使用 typedefed 名称而不是结构名称(,ICC 失败,但 GCC 工作:

$ cat test1.cc
typedef struct m256d {
double m256d_f64[4];
} __m256d;
int main()
{
__m256d temp;
temp.m256d_f64[0] = 1;
return 0;
}
$ icpc test1.cc -c
test1.cc(8): error: expression must have class type
temp.m256d_f64[0] = 1;
^
compilation aborted for test1.cc (code 2)
$ g++ test1.cc -c

我已向英特尔的编译器工程团队报告了此问题。