From: Artem Belevich Date: Tue, 16 May 2023 19:30:22 +0000 (-0700) Subject: [CUDA] Relax restrictions on GPU-side variadic functions X-Git-Tag: upstream/17.0.6~8093 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a825f3754b3ca1591068cf99bc224af30a311e63;p=platform%2Fupstream%2Fllvm.git [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 --- diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 37b0b9c..eae5ebd 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))