================
@@ -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 {
----------------
tahonermann wrote:

That branching is exactly my concern; it doesn't make sense to assume OpenCL 
semantics are intended for a non-OpenCL spelling and a non-NVPTX target. The 
branch that calls `handleGlobalAttr()` should be entered for a CUDA/HIP 
spelling regardless of the target. Note that this branching structure was 
introduced by commit 3b9ebe92011b033523217a9b9a2f03f4c8c37aab.

Actually, why is `handleDeviceKernelAttr()` trying to call `handleGlobalAttr()` 
at all? `handleDeviceKernelAttr()` is only called for `AT_DeviceKernel`. 
`handleGlobalAttr()` handles `AT_CUDAGlobal` and `CUDAGlobalAttr` remains 
separate from `DeviceKernelAttr`.

The more I look at the residual effects of the merge of device kernel 
attributes, the more I think it was not a well motivated or positive change.

https://github.com/llvm/llvm-project/pull/163859
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to