[PATCH] D118837: Methods visited for a special class must have an identifier.
Zahira Ammarguellat via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Feb 2 12:03:48 PST 2022
zahiraam created this revision.
zahiraam added reviewers: erichkeane, Fznamznon.
zahiraam requested review of this revision.
Herald added a project: clang.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D118837
Files:
clang/lib/Sema/SemaDecl.cpp
clang/test/SemaSYCL/special-class-attribute.cpp
Index: clang/test/SemaSYCL/special-class-attribute.cpp
===================================================================
--- clang/test/SemaSYCL/special-class-attribute.cpp
+++ clang/test/SemaSYCL/special-class-attribute.cpp
@@ -30,6 +30,14 @@
void __init(){}
};
+struct __attribute__((sycl_special_class)) struct6 {
+ struct6();
+ bool operator==(const struct6 &);
+ struct6 &operator()();
+ ~struct6();
+ void __init(){}
+};
+
// Must have one and only one __init method defined
class __attribute__((sycl_special_class)) class6 { // expected-error {{types with 'sycl_special_class' attribute must have one and only one '__init' method defined}}
class6() {}
@@ -47,6 +55,14 @@
struct __attribute__((sycl_special_class)) struct3;
struct struct3 {}; // expected-error {{types with 'sycl_special_class' attribute must have one and only one '__init' method defined}}
+// expected-error at +1{{'sycl_special_class' attribute must have one and only one '__init' method defined}}
+struct __attribute__((sycl_special_class)) struct7 {
+ struct7();
+ bool operator==(const struct7 &);
+ struct7 &operator()();
+ ~struct7();
+};
+
// Only classes
[[clang::sycl_special_class]] int var1 = 0; // expected-warning {{'sycl_special_class' attribute only applies to classes}}
__attribute__((sycl_special_class)) int var2 = 0; // expected-warning {{'sycl_special_class' attribute only applies to classes}}
Index: clang/lib/Sema/SemaDecl.cpp
===================================================================
--- clang/lib/Sema/SemaDecl.cpp
+++ clang/lib/Sema/SemaDecl.cpp
@@ -9193,7 +9193,7 @@
}
if ((Parent->isClass() || Parent->isStruct()) &&
Parent->hasAttr<SYCLSpecialClassAttr>() &&
- NewFD->getKind() == Decl::Kind::CXXMethod &&
+ NewFD->getKind() == Decl::Kind::CXXMethod && NewFD->getIdentifier() &&
NewFD->getName() == "__init" && D.isFunctionDefinition()) {
if (auto *Def = Parent->getDefinition())
Def->setInitMethod(true);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118837.405382.patch
Type: text/x-patch
Size: 2026 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220202/fd911207/attachment.bin>
More information about the cfe-commits
mailing list