[clang] [SYCL][SPIR-V] Implement fix for Windows/MSVC SPIR-V device target support (PR #208196)

Tom Honermann via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 10 15:55:37 PDT 2026


================
@@ -0,0 +1,15 @@
+/// Tests that preprocessing succeeds with different getBuiltinVaListKind() delegations.
+
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown -aux-triple x86_64-unknown-linux-gnu \
+// RUN:   -fsycl-is-device -E -dM %s | FileCheck --check-prefix=LINUX %s
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown -aux-triple x86_64-pc-windows-msvc \
+// RUN:   -fsycl-is-device -E -dM %s | FileCheck --check-prefix=WIN %s
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown -aux-triple aarch64-unknown-linux-gnu \
+// RUN:   -fsycl-is-device -E -dM %s | FileCheck --check-prefix=AARCH64 %s
+// RUN: %clang_cc1 -triple spirv64-unknown-unknown \
+// RUN:   -fsycl-is-device -E -dM %s | FileCheck --check-prefix=NOHOST %s
+
+// LINUX: #define __SPIRV64__ 1
+// WIN: #define __SPIRV64__ 1
+// AARCH64: #define __SPIRV64__ 1
+// NOHOST: #define __SPIRV64__ 1
----------------
tahonermann wrote:

Here is a simple test that exercises the stdarg builtins.
```
int f(int n, ...) {
  __builtin_va_list ap1, ap2;
  __builtin_va_start(ap1, n);
  int v = __builtin_va_arg(ap1, int);
  __builtin_va_copy(ap2, ap1);
  __builtin_va_end(ap1);
  __builtin_va_end(ap2);
  return v;
}
int g() {
  return f(0, 1);
}
```

The LLVM IR can then be checked for the following (with suitable elisions).
```
CHECK-LINUX:  define dso_local noundef i32 @_Z1fiz(i32 noundef %n, ...) #0 {
CHECK-LINUX:    %ap1 = alloca [1 x %struct.__va_list_tag], align 16
CHECK-LINUX:    %ap2 = alloca [1 x %struct.__va_list_tag], align 16
CHECK-WINDOWS:define dso_local noundef i32 @"?f@@YAHHZZ"(i32 noundef %n, ...) #0 {
CHECK-WINDOWS:  %ap1 = alloca ptr, align 8
CHECK-WINDOWS:  %ap2 = alloca ptr, align 8

```

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


More information about the cfe-commits mailing list