Skip to content

Migration of cudaGetErrorString incorrect when used in macro #1950

@Ruyk

Description

@Ruyk

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions