[clang] [clang] Ensure we don't process OpenCL kernels as CUDA kernels (PR #163859)
Nick Sarnie via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 23 09:12:09 PDT 2025
https://github.com/sarnex updated https://github.com/llvm/llvm-project/pull/163859
>From d75ca9397236946d25642fe186e7092bd74e5e45 Mon Sep 17 00:00:00 2001
From: "Sarnie, Nick" <nick.sarnie at intel.com>
Date: Thu, 16 Oct 2025 13:40:28 -0700
Subject: [PATCH 1/2] [clang] Ensure we don't process OpenCL kernels as CUDA
kernels
Signed-off-by: Sarnie, Nick <nick.sarnie at intel.com>
---
clang/lib/Sema/SemaDeclAttr.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index e6f8748db7644..6978299734ece 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5206,7 +5206,8 @@ static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
static void handleDeviceKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
const auto *FD = dyn_cast_or_null<FunctionDecl>(D);
bool IsFunctionTemplate = FD && FD->getDescribedFunctionTemplate();
- if (S.getASTContext().getTargetInfo().getTriple().isNVPTX()) {
+ if (S.getASTContext().getTargetInfo().getTriple().isNVPTX() &&
+ !DeviceKernelAttr::isOpenCLSpelling(AL)) {
handleGlobalAttr(S, D, AL);
} else {
// OpenCL C++ will throw a more specific error.
>From 158e676969f7b49d2716038f8aac3f49d2e81650 Mon Sep 17 00:00:00 2001
From: "Sarnie, Nick" <nick.sarnie at intel.com>
Date: Tue, 21 Oct 2025 15:24:36 -0700
Subject: [PATCH 2/2] swap order
Signed-off-by: Sarnie, Nick <nick.sarnie at intel.com>
---
clang/lib/Sema/SemaDeclAttr.cpp | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 6978299734ece..db7f6839a3326 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -5205,17 +5205,17 @@ static void handleCallConvAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
static void handleDeviceKernelAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
const auto *FD = dyn_cast_or_null<FunctionDecl>(D);
- bool IsFunctionTemplate = FD && FD->getDescribedFunctionTemplate();
- if (S.getASTContext().getTargetInfo().getTriple().isNVPTX() &&
- !DeviceKernelAttr::isOpenCLSpelling(AL)) {
- handleGlobalAttr(S, D, AL);
- } else {
+ if (DeviceKernelAttr::isOpenCLSpelling(AL) ||
+ !S.getASTContext().getTargetInfo().getTriple().isNVPTX()) {
+ bool IsFunctionTemplate = FD && FD->getDescribedFunctionTemplate();
// OpenCL C++ will throw a more specific error.
if (!S.getLangOpts().OpenCLCPlusPlus && (!FD || IsFunctionTemplate)) {
S.Diag(AL.getLoc(), diag::err_attribute_wrong_decl_type_str)
<< AL << AL.isRegularKeywordAttribute() << "functions";
}
handleSimpleAttribute<DeviceKernelAttr>(S, D, AL);
+ } else {
+ handleGlobalAttr(S, D, AL);
}
// Make sure we validate the CC with the target
// and warn/error if necessary.
More information about the cfe-commits
mailing list