2016-09-12 93 views
1

我試圖確定是什麼導致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?我們如何解決它?

回答

1

根據我在舊的Sun論壇上的經驗,其中一個Solaris Studio組件失敗的說法是總是被視爲編譯器錯誤。

將您的問題發佈到the Oracle forum for Solaris Studio可能會更好。

您也可以嘗試不同的-compat=-std=選項。特別是,-std=sun03可能適用於您(但它不會生成兼容GNU C++的二進制文件)。

相關問題