Visible to Intel only — GUID: GUID-87EA0577-B6D6-4B01-846F-6556C1E0205A
Visible to Intel only — GUID: GUID-87EA0577-B6D6-4B01-846F-6556C1E0205A
DPCT1000
Message
Error handling if-stmt was detected but could not be rewritten.
Detailed Help
This warning is generated when Intel® DPC++ Compatibility Tool detects more complex error handling than it considers safe to remove.
The CUDA* API returns error codes that are consumed by the program logic. SYCL* uses exceptions to report errors and does not return the error code.
When the error handling logic in the original code is simple (for example, a print error message and exit), the code is removed in the resulting Data Parallel C++ (DPC++) application. The expectation is that SYCL throws an exception, which is handled with the printing of an exception message and exiting (the exception handler is generated automatically by Intel® DPC++ Compatibility Tool).
Suggestions to Fix
Review the error handling if- statement and try to rewrite it to use an exception handler instead.
For example, this original CUDA code:
void check_err(cudaError_t err, float **f) { if (err != cudaSuccess) { log_error(); } } void foo() { float *f; cudaError_t err = cudaMalloc(&f, 4); check_err(err, &f); }
results in the following migrated SYCL code:
void check_err(int err, float **f) { /* DPCT1000:1: Error handling if-stmt was detected but could not be rewritten. */ if (err != 0) { /* DPCT1001:0: The statement could not be removed. */ log_error(); } } void foo() float *f; ... int err = (f = (float *)sycl::malloc_device(4, dpct::get_default_queue()), 0); check_err(err, &f); }
which is rewritten to:
void foo() float *f; try { f = (float *)sycl::malloc_device(4, dpct::get_default_queue()); } catch (sycl::exception const &e) { log_error(); } }