Intel® DPC++ Compatibility Tool Developer Guide and Reference
A newer version of this document is available. Customers should click here to go to the newest version.
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();
  }
}