[clang] [clang][SYCL] Add sycl_external attribute and restrict emitting device code (PR #140282)

via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 13 12:58:07 PDT 2025


================
@@ -0,0 +1,77 @@
+// RUN: %clang_cc1 -fsycl-is-device -triple spir64-unknown-unknown -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s
+
+// This test code generation when sycl_external attribute is used
+
+// Function defined and not used - symbols emitted
+[[clang::sycl_external]] int square(int x) { return x*x; }
+// CHECK: define dso_local spir_func noundef i32 @_Z6squarei
+
+// Function defined and used - symbols emitted
+[[clang::sycl_external]] int squareUsed(int x) { return x*x; }
+// CHECK: define dso_local spir_func noundef i32 @_Z10squareUsedi
+
+// Constexpr function defined and not used - symbols emitted
+[[clang::sycl_external]] constexpr int squareInlined(int x) { return x*x; }
+// CHECK: define linkonce_odr spir_func noundef i32 @_Z13squareInlinedi
+
+// Function declared but not defined or used - no symbols emitted
+[[clang::sycl_external]] int declOnly();
+// CHECK-NOT: define {{.*}} i32 @_Z8declOnlyv
+
+
+// FIXME: Function declared and used but not defined - emit external reference
+[[clang::sycl_external]] void declUsed(int y);
+
+// Function declared with the attribute and later defined - symbols emitted
+[[clang::sycl_external]] int func1(int arg);
+int func1(int arg) { return arg; }
+// CHECK: define dso_local spir_func noundef i32 @_Z5func1i
+
+class A {
+// Defaulted special member functions - no symbols emitted
+  [[clang::sycl_external]] A& operator=(A& a) = default;
+};
+
+class B {
+  [[clang::sycl_external]] virtual void BFunc1WithAttr() { int i = 1; }
----------------
schittir wrote:

Undoing `[the change](https://github.com/llvm/llvm-project/pull/140282/commits/d1906b5c99c4a98c3a1314571898fc2fd2b689fd)` to diagnose virtual functions per conversation with @tahonermann in light of https://github.com/KhronosGroup/SYCL-Docs/issues/565; this case is currently supported downstream. 
 

https://github.com/llvm/llvm-project/pull/140282


More information about the cfe-commits mailing list