[clang] [clang][Sema][CUDA,SPIRV] Instantiating function templates duplicates GPU attrs (PR #218582)
Oliver Hunt via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 25 12:08:58 PDT 2026
================
@@ -5465,15 +5465,19 @@ static void handleGlobalAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
if (FD->isInlineSpecified() && !S.getLangOpts().CUDAIsDevice)
S.Diag(FD->getBeginLoc(), diag::warn_kern_is_inline) << FD;
- if (AL.getKind() == ParsedAttr::AT_DeviceKernel)
- D->addAttr(::new (S.Context) DeviceKernelAttr(S.Context, AL));
- else
+ // ***REVIEWER***: the existing code clearly expects either DeviceKernel or
+ // Global, and no others, but this does not appear to be made explicit?
+ if (AL.getKind() == ParsedAttr::AT_DeviceKernel) {
+ if (!D->hasAttr<DeviceKernelAttr>())
+ D->addAttr(::new (S.Context) DeviceKernelAttr(S.Context, AL));
+ } else if (!D->hasAttr<CUDAGlobalAttr>())
D->addAttr(::new (S.Context) CUDAGlobalAttr(S.Context, AL));
+
----------------
ojhunt wrote:
Fixed as part of change to a switch
https://github.com/llvm/llvm-project/pull/218582
More information about the cfe-commits
mailing list