【问题标题】:What causes SunCC crash in g3mangler.cc when using `-std=XXX`?使用 `-std=XXX` 时导致 g3mangler.cc 中 SunCC 崩溃的原因是什么?
【发布时间】:2016-09-12 01:19:47
【问题描述】:

我正在尝试确定是什么导致 SunCC 5.11 - 5.13 以 ../lnk/g3mangler.cc, line 825 死机(来自 SunCC 5.13 的消息)。这是编译期间的样子。该机器是第四代Core i5,因此它具有对应于宏的功能。

/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 时,g3mangler.cc 中的 SunCC 编译器崩溃的原因是什么?我们如何解决它?

【问题讨论】:

    标签: solaris sunstudio solaris-studio suncc


    【解决方案1】:

    根据我在旧 Sun 论坛上的经验,Solaris Studio 组件之一中的失败断言总是被认为是编译器错误。

    将您的问题发布到the Oracle forum for Solaris Studio 可能会更好。

    您还可以尝试不同的-compat=-std= 选项。特别是,-std=sun03 可能对您有用(但它不会生成与 GNU C++ 兼容的二进制文件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      相关资源
      最近更新 更多