Что вызывает сбой 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? Как мы можем обойти это?


person jww    schedule 12.09.2016    source источник


Ответы (1)


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

Скорее всего, вам будет лучше опубликовать свой вопрос на форуме Oracle для Студия Солярис.

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

person Andrew Henle    schedule 13.09.2016