我試圖確定是什麼導致SunCC 5.11-5.13與../lnk/g3mangler.cc, line 825
(來自SunCC 5.13的消息)一起死亡。這是編譯過程中的樣子。該機器是第四代Core i5,因此它具有與宏對應的功能。使用`-std = XXX`時,導致g3mangler.cc中SunCC崩潰的原因是什麼?
/opt/solarisstudio12.4/bin/CC -DDEBUG -g3 -O0 -std=c++03 -D__SSE2__ -D__SSE3__ -D__SSSE3__
-D__SSE4_1__ -D__SSE4_2__ -D__AES__ -D__PCLMUL__ -D__RDRND__ -D__AVX__ -xarch=avx
-m64 -native -KPIC -template=no%extdef -w -erroff=wvarhidemem -erroff=voidretw -c gcm.cpp
>> Assertion: (../lnk/g3mangler.cc, line 825)
while processing gcm.cpp at line 408.
我知道有-std=c++03
上所有的編譯器,以及-std=c++11
在新的編譯器的問題表面。如果我省略-std=XXX
,那麼問題就會消失。告訴用戶他們不能使用C++ 03或C++ 11是不可行的。
這裏是gcm.cpp:408
。由於努力隔離,它現在基本上被評論了。事實上,刪除所有的代碼,並留下一個空函數證人它,太:
MAYBE_INLINE void GCM_Base::ReverseHashBufferIfNeeded()
{
#if BOOL_AESNI_INTRINSICS_AVAILABLE
// if (HasCLMUL())
{
// __m128i &x = *(__m128i *)(void *)HashBuffer();
// x = _mm_shuffle_epi8(x, s_clmulConstants[1]);
}
#elif BOOL_ARM_CRYPTO_INTRINSICS_AVAILABLE
if (HasPMULL())
{
if (GetNativeByteOrder() != BIG_ENDIAN_ORDER)
{
const uint8x16_t x = vrev64q_u8(vld1q_u8(HashBuffer()));
vst1q_u8(HashBuffer(), (uint8x16_t)vcombine_u64(vget_high_u64((uint64x2_t)x), vget_low_u64((uint64x2_t)x)));
}
}
#endif
}
MAYBE_INLINE
是我用來打開和關閉編譯器切換inline
宏。
我可以在網上找到的唯一報告來自我們的錯誤跟蹤器。因爲我已經耗盡了函數中的所有代碼,所以我沒有想法。
當使用-std=XXX
時,導致SunCC編譯器崩潰的原因是g3mangler.cc
?我們如何解決它?