0

Clang 3.7 の emmintrin.h ヘッダーがエラーをスローするため、NSS の freebl ライブラリは (Firefox の一部として) 適切にビルドできません。このフラグを使用しても、このヘッダーを呼び出すソース ファイルは失敗します。

14:08.94 d:/gecko-dev-release/security/nss/lib/freebl/intel-gcm-wrap.c(123,78) :
  error(clang): passing 'int' to parameter of incompatible type '__m128i' (vecto
r of 2 'long long' values)
14:08.94     _mm_storeu_si128((__m128i*)gcm->CTR, _mm_shuffle_epi8(_mm_add_epi32
(ONE, _mm_shuffle_epi8(_mm_loadu_si128((__m128i*)gcm->CTR), BSWAP_MASK)), BSWAP_
MASK));
14:08.94
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
14:08.94 c:\Program Files\LLVM\bin\..\lib\clang\3.7.0\include\emmintrin.h(630,36
) :  note(clang): passing argument to parameter '__b' here
14:08.94 _mm_add_epi32(__m128i __a, __m128i __b)
14:08.94                                    ^
14:08.94 1 error generated.
14:08.96 intel-gcm-wrap.c
14:08.99 d:/gecko-dev-release/security/nss/lib/freebl/intel-gcm-wrap.c(123) : er
ror C2164: '_mm_shuffle_epi8' : intrinsic function not declared
14:08.99 d:/gecko-dev-release/security/nss/lib/freebl/intel-gcm-wrap.c(123) : er
ror C2284: '_mm_shuffle_epi8': illegal argument to intrinsic function, parameter
 1
14:08.99 d:/gecko-dev-release/security/nss/lib/freebl/intel-gcm-wrap.c(123) : er
ror C2284: '_mm_shuffle_epi8': illegal argument to intrinsic function, parameter
 2
14:08.99 d:/gecko-dev-release/security/nss/lib/freebl/intel-gcm-wrap.c(123) : er
ror C2440: 'function' : cannot convert from '' to '__m128i'
14:08.99 clang-cl.exe: error: clang frontend command failed with exit code 2 (us
e -v to see invocation)
14:09.00 ../../coreconf/rules.mk:384: recipe for target 'd:/gecko-dev-release/ob
jdir/security/nss/lib/freebl/intel-gcm-wrap.obj' failed
14:09.00 mozmake.EXE[7]: *** [d:/gecko-dev-release/objdir/security/nss/lib/freeb
l/intel-gcm-wrap.obj] Error 2
14:09.00 Makefile:568: recipe for target 'libs' failed
14:09.00 mozmake.EXE[6]: *** [libs] Error 2
14:09.00 Makefile:468: recipe for target 'libs-nss/lib/freebl' failed
14:09.00 mozmake.EXE[5]: *** [libs-nss/lib/freebl] Error 2
14:09.00 mozmake.EXE[5]: *** Waiting for unfinished jobs....
14:11.30 d:/gecko-dev-release/config/recurse.mk:74: recipe for target 'config/ex
ternal/nss/target' failed
14:11.30 mozmake.EXE[4]: *** [config/external/nss/target] Error 2
14:11.30 d:/gecko-dev-release/config/recurse.mk:36: recipe for target 'compile'
failed
14:11.30 mozmake.EXE[3]: *** [compile] Error 2
14:11.30 d:/gecko-dev-release/config/rules.mk:541: recipe for target 'default' f
ailed
14:11.30 mozmake.EXE[2]: *** [default] Error 2
14:11.30 d:/gecko-dev-release/client.mk:400: recipe for target 'realbuild' faile
d
14:11.30 mozmake.EXE[1]: *** [realbuild] Error 2
14:11.31 client.mk:171: recipe for target 'build' failed
14:11.31 mozmake.EXE: *** [build] Error 2
14:11.36 0 compiler warnings present.

ここでソース ディレクトリを参照できます。

4

1 に答える 1

0

clang internals manualによると:

__extension__: この拡張の式形式により、評価可能な部分式が整数定数式として受け入れられます。

clang が持っている現在の定義を_mm_suffle_epi32見ると、これが上記で「整数定数式」として説明されていることが明らかになります。

その関数のようなマクロの履歴を調べると、 「引数の型を正しくチェックするようにベクトル マクロを修正する」__extension__ためにキーワードを使用するように変更されたようで、その後、その変更は時間の経過とともに事実上ロールバックされました。現在の定義。

要約すると、これは Clang ライブラリ エラーのようです。_mm_shuffle_epi32地球上で最も文書化された機能ではありませんが、私が見つけた調査では、__mm128i. おそらく、引数の型を正しくチェックしたい場合は、これをマクロではなく [inlined?] 関数として宣言する必要がありますか?

さまざまな IRC チャネルでこれについて議論しようとしたとき、誰も応答しなかったので... コメントするには長すぎるので、あなたの質問への回答としてこれをここに載せると思いました。

于 2015-07-04T03:48:07.650 に答える