2017-09-08 21 views
1

IBMのXL Cコンパイラを使用してAIXで作業しています。私はコンパイルエラーをキャッチしており、どのように処理するのかわかりません:パラメータタイプがこのリンケージタイプの関数に無効です

$ xlc -g3 -O0 -qarch=pwr8 -qaltivec fips197-p8.c -o fips197-p8.exe 
"fips197-p8.c", line 59.16: 1506-754 (W) The parameter type is not valid for a function of this linkage type. 

関連ソースコードを以下に示します。完全なソースコードはfips197-p8.cです。ソースコードは、Power 8 __cipher__vcipherlastのテストドライバです。これは、メインといくつかのCの機能があります。効果的には、Power 8 AESの最小完全動作例です。

$ cat -n fips197-p8.c 
... 

11 #if defined(__xlc__) || defined(__xlC__) 
12 // #include <builtins.h> 
13 #include <altivec.h> 
14 typedef vector unsigned char uint8x16_p8; 
15 typedef vector unsigned int uint64x2_p8; 
16 #else 
17 #include <altivec.h> 
18 typedef vector unsigned char uint8x16_p8; 
19 typedef vector unsigned long long uint64x2_p8; 
20 #endif 
... 

52 uint8x16_p8 Load8x16(const uint8_t src[16]) 
53 { 
54 #if defined(__xlc__) || defined(__xlC__) 
55   /* IBM XL C/C++ compiler */ 
56 # if defined(__LITTLE_ENDIAN__) 
57   return vec_xl_be(0, src); 
58 # else 
59   return vec_xl(0, src); 
60 # endif 
61 #else 
62   /* GCC, Clang, etc */ 
63 
64 #endif 
65 } 

コンパイラのバージョンを以下に示します。私たちは、コンパイラをコントロールしていないので、これは我々が持っているものです。

$ xlc -qversion 
IBM XL C/C++ for AIX, V13.1.3 (5725-C72, 5765-J07) 
Version: 13.01.0003.0000 

vec_xlはリトルエンディアンで結構です。ビッグエンディアンのためにvec_xlが私たちにトラブルを与えています。

問題は何ですか?どのように修正できますか?

+1

AIX + IBM?あなたは私の同情を持っています –

+0

しかし、これはAIXなしでは再現するのが難しいです。 IBMは特に役に立ちません。 –

+0

: "関数結果の要素の順序は、-qaltivec = beが有効な場合のビッグエンディアンです。それ以外の場合はリトルエンディアンです。"あなたは '= be'を設定していませんでしたが、それは問題ではありませんか? –

答えて

2

私は、この暗黙のことがあると思っていました。(このOP31のコメントで確認されました)& "このパラメータタイプはこのリンケージタイプの関数には有効ではありません。メッセージ(Googleの最初の試合はこの質問です!)は、修飾子号になる可能性があります。

あなたの契約は、オプション&、現在のエンディアンを与えられた、ということも可能である

uint8x16_p8 Load8x16(const uint8_t src[16]) 

あるので、コンパイラ/プロトタイプはvec_xl_besrcとして非constパラメータを期待していることと考えています。

のでconstが契約に違反渡す(それはあなたをnotifuする見つけることができるxlc素敵な方法です)だから、

すべての発信者に対して一定の制約を落とす危険性と

uint8x16_p8 Load8x16(uint8_t src[16]) 

のいずれかに変更( )

constを非constキャストでドロップします(プロトタイプにconstがない場合と同じですが、データは実際には関数内で変更されていません)。

vec_xl_be(0,(uint8_t*)src); 
+0

ありがとうございます。私は[IV91684:ベクトル組み込み型VEC_CMPGEとVEC_CMPLE用のパラメータ型エラー](https://www-01.ibm.com/support/docview.wss?uid=swg1IV91684)も発見しました。私はそれがホットフィックスの約だと思います。私はドットを接続するのに十分なXL C/C++コンパイラでは動作しません。 – jww

+0

良い見つける。しかし、それは "同じ症状の異なる原因"のようなものだと私には思われます。これは 'gcc'が私たちを非常によく扱うことを思い出させます:) –

+0

この問題を起こしていただき、ありがとうございます。コンパイラはconst引数を非constインターフェイスに渡すかもしれない悪い状況を保存しようとしていますが、エラーメッセージを改善することができます。 – trudeaun

関連する問題