[clang] a825f37 - [CUDA] Relax restrictions on GPU-side variadic functions

Artem Belevich via cfe-commits cfe-commits at lists.llvm.org
Wed May 17 12:51:20 PDT 2023


Author: Artem Belevich
Date: 2023-05-17T12:51:01-07:00
New Revision: a825f3754b3ca1591068cf99bc224af30a311e63

URL: https://github.com/llvm/llvm-project/commit/a825f3754b3ca1591068cf99bc224af30a311e63
DIFF: https://github.com/llvm/llvm-project/commit/a825f3754b3ca1591068cf99bc224af30a311e63.diff

LOG: [CUDA] Relax restrictions on GPU-side variadic functions

Allow parsing GPU-side variadic functions when we're compiling with CUDA-9 or
newer. We still do not allow accessing variadic arguments.

CUDA-9 was the version which introduced PTX-6.0 which allows implementing
variadic functions, so older versions can't have variadics in principle.

This is required for dealing with headers in recent CUDA versions that rely on
variadic function declarations in some of the templated code in libcu++.
E.g. https://github.com/llvm/llvm-project/issues/58410

Differential Revision: https://reviews.llvm.org/D150718

Added: 
    

Modified: 
    clang/lib/Driver/ToolChains/Cuda.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
index 37b0b9c2ed05b..eae5ebdc192b2 100644
--- a/clang/lib/Driver/ToolChains/Cuda.cpp
+++ b/clang/lib/Driver/ToolChains/Cuda.cpp
@@ -800,6 +800,13 @@ void CudaToolChain::addClangTargetOptions(
     if (DriverArgs.hasFlag(options::OPT_fcuda_approx_transcendentals,
                            options::OPT_fno_cuda_approx_transcendentals, false))
       CC1Args.push_back("-fcuda-approx-transcendentals");
+
+    // Unsized function arguments used for variadics were introduced in CUDA-9.0
+    // We still do not support generating code that actually uses variadic
+    // arguments yet, but we do need to allow parsing them as recent CUDA
+    // headers rely on that. https://github.com/llvm/llvm-project/issues/58410
+    if (CudaInstallation.version() >= CudaVersion::CUDA_90)
+      CC1Args.push_back("-fcuda-allow-variadic-functions");
   }
 
   if (DriverArgs.hasArg(options::OPT_nogpulib))


        


More information about the cfe-commits mailing list