SYCLomatic icon indicating copy to clipboard operation
SYCLomatic copied to clipboard

Migration of cudaGetErrorString incorrect when used in macro

Open Ruyk opened this issue 1 year ago • 2 comments

Describe the bug

The CUDA function "cudaGetErrorString", which converts a CUDA error code onto a user-readable error string, is incorrectly translated by syclomatic when used as parameter on a macro. Syclomatic translates the name of the function with a string, but the expectation is to keep the function name at that point so that it can be used in nested macros.

To reproduce

The code below:

#include <cstdio>
#include <cuda_runtime.h>

#define CHECK_CUDA_FUNCTION(errNo, errFunc) \
        errFunc(errNo)

#define CHECK_CUDA(errNo) \
        CHECK_CUDA_FUNCTION(errNo, cudaGetErrorString)


int main() {
        printf("%s \n", CHECK_CUDA(cudaSuccess));
};

is incorrectly converted to

#include <sycl/sycl.hpp>
#include <dpct/dpct.hpp>
#include <cstdio>

#define CHECK_CUDA_FUNCTION(errNo, errFunc) \
        errFunc(errNo)

#define CHECK_CUDA(errNo) CHECK_CUDA_FUNCTION(errNo, "<Placeholder string>")

int main() {
        /*
        DPCT1009:0: SYCL uses exceptions to report errors and does not use the
        error codes. The call was replaced by a placeholder string. You need to
        rewrite this code.
        */
        printf("%s \n", CHECK_CUDA(0));
};

Environment

No response

Additional context

No response

Ruyk avatar May 07 '24 15:05 Ruyk

@Ruyk We will introduce a new helper function to map cudaGetErrorString, and implement the migration logic in SYCLomatic. @intwanghao will implement this PR later on.

tomflinda avatar May 08 '24 02:05 tomflinda

https://github.com/intel/llvm/pull/15719

joeatodd avatar Oct 16 '24 10:10 joeatodd