错误:无法使用向量无符号long long [2]来初始化向量unsigned long long [2]

时间:2016-07-17 01:45:00

标签: c++ swap intrinsics sunstudio

我们正在Sun Studio 12.3下进行测试。我们正在捕获12.4及更高版本中不存在的编译器错误。它在12.1及更早版本中不存在,但那是因为编译器has trouble with AES instructions。它也不存在于Clang,GCC,ICPC和VC ++等其他编译器中。错误是:

/opt/solarisstudio12.3/bin/CC -DDEBUG -g3 -xO0 -D__SSE2__ -D__SSE3__ -D__SSSE3__ \
-D__SSE4_1__ -D__SSE4_2__ -D__AES__ -D__PCLMUL__ -D__RDRND__ -D__RDSEED__ -D__AVX__ \
-D__AVX2__ -D__BMI__ -D__BMI2__  -native -m64 -KPIC -template=no%extdef -c rijndael.cpp

"/opt/solarisstudio12.3/prod/include/CC/Cstd/algorithm", line 283: Error: Cannot use vector unsigned long long[2] to initialize vector unsigned long long[2].
"rijndael.cpp", line 277:     Where: While instantiating "std::swap<vector unsigned long long[2]>(unsigned long long(&)[2], unsigned long long(&)[2])".
"rijndael.cpp", line 277:     Where: Instantiated from non-template code.
1 Error(s) detected.
gmake: *** [rijndael.o] Error 2
gmake: *** Waiting for unfinished jobs....
ERROR: failed to make cryptest.exe

有问题的代码是:

std::swap(*(__m128i*)(rk), *(__m128i*)(rk+4*m_rounds));

我有几个问题:

  • 编译器有什么问题?
  • 清除错误的最佳方法是什么?

我不得不问第二个问题,因为我不确定SunCC和__m128i类型,因为我可以使用raw memcpy,尝试编写我自己的交换,或者甚至在没有解除引用的情况下尝试iter_swap

0 个答案:

没有答案