DPCT1077#

メッセージ#

<macro name> が標準の SYCL* タイプを再定義しているため、競合が発生する可能性があります。

詳細な説明#

インテル® DPC++ 互換性ツールは、コードが標準の SYCL* タイプを再定義していることを検出しました。インクルードされている SYCL* ヘッダーファイルで競合が発生する可能性があります。

修正方法の提案#

標準の SYCL* タイプと競合しないようにマクロの名前を変更します。

例えば、以下のオリジナル CUDA* コードについて考えてみます。

1  // test.h 
2  inline void bar(cudaDeviceAttr attr) { 
3   ...
4  } 
5 
6  // test.cu 
7  #define int2 int32_t 
8  #include "test.h" 
9 
10 void foo() { 
11  int2 a; 
12  ... 
13 }

このコードは、以下の SYCL* コードに移行されます。

1  // test.h 
2  #include <sycl/sycl.hpp> 
3  #include <dpct/dpct.hpp> 
4 
5  inline void bar(int attr) { 
6   ... 
7  } 
8 
9  // test.dp.cpp 
10 /* 
11 DPCT1077:0: 'int2' redefines a standard SYCL type, which may cause conflicts.
12 */ 
13 #define int2 int32_t 
14 #include "test.h" 
15 
16 void foo() { 
17  int2 a; 
18  ... 
19 }

このコードは次のように書き換えられます。

1  // test.h 
2  #include <sycl/sycl.hpp> 
3  #include <dpct/dpct.hpp> 
4 
5  inline void bar(int attr) { 
6   ... 
7  } 
8 
9  // test.dp.cpp 
10 #include "test.h" 
11 
12 void foo() { 
13  int32_t a; 
14  ... 
15 }