@@ -7123,6 +7123,13 @@ ProcessDeclAttribute(Sema &S, Scope *scope, Decl *D, const ParsedAttr &AL,
7123
7123
}
7124
7124
}
7125
7125
7126
+ static bool isKernelDecl (Decl *D) {
7127
+ const FunctionType *FnTy = D->getFunctionType ();
7128
+ return D->hasAttr <OpenCLKernelAttr>() ||
7129
+ (FnTy && FnTy->getCallConv () == CallingConv::CC_AMDGPUKernelCall) ||
7130
+ D->hasAttr <CUDAGlobalAttr>() || D->getAttr <NVPTXKernelAttr>();
7131
+ }
7132
+
7126
7133
void Sema::ProcessDeclAttributeList (
7127
7134
Scope *S, Decl *D, const ParsedAttributesView &AttrList,
7128
7135
const ProcessDeclAttributeOptions &Options) {
@@ -7163,24 +7170,25 @@ void Sema::ProcessDeclAttributeList(
7163
7170
} else if (const auto *A = D->getAttr <OpenCLIntelReqdSubGroupSizeAttr>()) {
7164
7171
Diag (D->getLocation (), diag::err_opencl_kernel_attr) << A;
7165
7172
D->setInvalidDecl ();
7166
- } else if (!D->hasAttr <CUDAGlobalAttr>()) {
7167
- if (const auto *A = D->getAttr <AMDGPUFlatWorkGroupSizeAttr>()) {
7168
- Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7169
- << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7170
- D->setInvalidDecl ();
7171
- } else if (const auto *A = D->getAttr <AMDGPUWavesPerEUAttr>()) {
7172
- Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7173
- << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7174
- D->setInvalidDecl ();
7175
- } else if (const auto *A = D->getAttr <AMDGPUNumSGPRAttr>()) {
7176
- Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7177
- << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7178
- D->setInvalidDecl ();
7179
- } else if (const auto *A = D->getAttr <AMDGPUNumVGPRAttr>()) {
7180
- Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7181
- << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7182
- D->setInvalidDecl ();
7183
- }
7173
+ }
7174
+ }
7175
+ if (!isKernelDecl (D)) {
7176
+ if (const auto *A = D->getAttr <AMDGPUFlatWorkGroupSizeAttr>()) {
7177
+ Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7178
+ << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7179
+ D->setInvalidDecl ();
7180
+ } else if (const auto *A = D->getAttr <AMDGPUWavesPerEUAttr>()) {
7181
+ Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7182
+ << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7183
+ D->setInvalidDecl ();
7184
+ } else if (const auto *A = D->getAttr <AMDGPUNumSGPRAttr>()) {
7185
+ Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7186
+ << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7187
+ D->setInvalidDecl ();
7188
+ } else if (const auto *A = D->getAttr <AMDGPUNumVGPRAttr>()) {
7189
+ Diag (D->getLocation (), diag::err_attribute_wrong_decl_type)
7190
+ << A << A->isRegularKeywordAttribute () << ExpectedKernelFunction;
7191
+ D->setInvalidDecl ();
7184
7192
}
7185
7193
}
7186
7194
0 commit comments