Что вызывает сбой SunCC в g3mangler.cc при использовании `-std=XXX`?
Я пытаюсь определить, что является причиной смерти SunCC 5.11 - 5.13 с ../lnk/g3mangler.cc, line 825
(сообщение от SunCC 5.13). Вот как это выглядит во время компиляции. Машина является Core i5 4-го поколения, поэтому она имеет функции, которые соответствуют макросам.
/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 всегда считается ошибкой компилятора.
Скорее всего, вам лучше будет опубликовать вашу проблему на форуме Oracle для Solaris Studio.
Вы также можете попробовать разные -compat=
а также -std=
опции. Особенно, -std=sun03
может работать для вас (но он не будет производить GNU C++- совместимые двоичные файлы).