================
@@ -0,0 +1,54 @@
+// RUN: %clang_cc1 -fsycl-is-device -fsyntax-only -verify %s
+
+// Semantic tests for sycl_external attribute
+
+[[clang::sycl_external]] // expected-error {{'sycl_external' can only be 
applied to functions with external linkage}}
+static void func1() {}
+
+namespace {
+  [[clang::sycl_external]] // expected-error {{'sycl_external' can only be 
applied to functions with external linkage}}
+  void func2() {}
+
+  struct UnnX {};
+}
+
+[[clang::sycl_external]] // expected-error {{'sycl_external' can only be 
applied to functions with external linkage}}
+  void func4(UnnX) {}
+
+// FIXME: The first declaration of a function is required to have the 
attribute.
+// The attribute may be optionally present on subsequent declarations
+int foo(int c);
+
+[[clang::sycl_external]] void foo();
+
+class C {
+  [[clang::sycl_external]] void member();
+};
+
+[[clang::sycl_external]] int main() // expected-error {{'sycl_external' cannot 
be applied to main function}}
+{
+    return 0;
+}
+
+class D {
+  [[clang::sycl_external]] void del() = delete; // expected-error 
{{'sycl_external' cannot be applied to explicitly deleted functions}}
+};
----------------
tahonermann wrote:

This is good to test an explicitly deleted function. We should also test 
defaulted functions that get defined as deleted. The following example should 
be accepted.
```
struct NonCopyable {
  ~NonCopyable() = delete;
  [[clang::sycl_export]] NonCopyable(const NonCopyable&) = default;
};
```

https://github.com/llvm/llvm-project/pull/140282
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to