DPCT1122
目次
DPCT1122#
メッセージ#
テンプレート宣言で ‘<元のタイプ>’ が ‘<移行以後のタイプ>’ に移行されます。テンプレート関数またはクラスの再定義が発生する可能性があります。コードを調整してください。
詳細な説明#
sycl::long4 のような SYCL* ベクトルタイプは、SYCL* 2020 ベクトル・タイプのセクション 4.12.2 で ‘using <type><elems> = vec<<storage-type>, <elems>>’ によって定義されていますが、sycl::longlong4 は定義されていません。移行では、‘long4’ と ‘longlong4’ の両方が sycl::long4 に移行され、これによりテンプレート関数またはクラスの再定義が発生する可能性があります。
修正方法の提案#
例えば、以下のオリジナル CUDA* コードについて考えてみます。
1 template <typename T> struct C { T a; };
2 template <> struct C<longlong4> { longlong4 a; };
3 template <> struct C<long4> { long4 a; };
このコードは、以下の SYCL* コードに移行されます。
1 template <typename T> struct C { T a; };
2 /*
3 DPCT1122:0: 'longlong4' is migrated to 'sycl::long4' in the template
4 declaration; it may cause template function or class redefinition; please adjust
5 the code.
6 */
7 template <> struct C<sycl::long4> { sycl::long4 a; };
8 template <> struct C<sycl::long4> { sycl::long4 a; };
上記は次のように書き換える必要があります。
1 template <typename T> struct C { T a; };
2 template <> struct C<sycl::long4> { sycl::long4 a; };