DPCT1034

メッセージ

移行した API はここで、エラーコードを返さないため、ラムダでは 0 が返されます。このコードを書き換える必要があります。

詳細な説明

通常、これはオリジナル・アプリケーションで API 呼び出しがエラーコードを返し、それがプログラムロジックで使用されるために起こります。

SYCL* は例外によりエラーを報告するため、エラーコードを返しません。

インテル® DPC++ 互換性ツールは、プログラムロジックが期待するリターンコードが新しい API で返されない場合、ラムダ式の最後に return 0; 文を挿入します。このような場所はすべてコードで確認する必要があります。

DPCT1003 に似ています。

修正方法の提案

DPC++ アプリケーションで次の操作を行います。

  • エラーコードを使用するコードが不要な場合、そのコードと return 0; 文を削除します。

  • エラーコードを使用するコードが必要な場合、そのコードを例外処理コードに置き換えて、例外ハンドラーで独自のロジックを使用します。

DPCT1003 に似ています。

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


1 void foo() { 
2 CUdevice device; 
3 CUresult status = cuDeviceComputeCapability(&result0, &result1, device); 
4 }

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


1 void foo() { 
2 /* 
3 DPCT1034:0: Migrated API does not return an error code. 0 is returned in the 
4 lambda. You may need to rewrite this code. 
5 */ 
6 int status = [&]() { 
7 result0 = dpct::dev_mgr::instance().get_device(device).get_major_version(); 
8 result1 = dpct::dev_mgr::instance().get_device(device).get_minor_version(); 
9 return 0; 
10 }(); 
11 }

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


1 void foo() { 
2 try { 
3 result0 = dpct::dev_mgr::instance().get_device(device).get_major_version(); 
4 result1 = dpct::dev_mgr::instance().get_device(device).get_minor_version(); 
5 } catch(...){ 
6    ... 
7 } 
8 }