2016-09-12 10 views
1

Я пытаюсь определить, что вызывает SunCC 5.11 - 5.13, умереть с ../lnk/g3mangler.cc, line 825 (сообщение от SunCC 5.13). Вот как это выглядит во время компиляции. Машина представляет собой 4-й ядро ​​Core i5, поэтому в нем есть функции, которые соответствуют макросам.Что приводит к сбою SunCC в g3mangler.cc при использовании `-std = XXX`?

/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 включения и выключения для компилятора.

Единственные отчеты, которые я могу найти в Интернете, - это наш трекер ошибок. У меня нет идей, так как я исчерпал весь код в функции.

Что вызывает сбой компилятора SunCC в g3mangler.cc при использовании -std=XXX? Как мы можем обойти это?

ответ

1

Из моего опыта на старых форумах Sun неудавшееся утверждение в одном из компонентов Solaris Studio всегда считается ошибкой компилятора.

Возможно, вам будет лучше подано сообщение о вашей проблеме до the Oracle forum for Solaris Studio.

Вы также можете попробовать разные варианты: -compat= и -std=. В частности, для вас может работать -std=sun03 (но он не будет создавать исполняемые файлы, совместимые с GNU C++).

 Смежные вопросы

  • Нет связанных вопросов^_^