| /// Tests that va_list layout matches the host target's getBuiltinVaListKind(). |
| |
| // RUN: %clang_cc1 -triple spirv64-unknown-unknown -aux-triple x86_64-unknown-linux-gnu \ |
| // RUN: -fsycl-is-device -emit-llvm -o - %s | FileCheck --check-prefix=LINUX %s |
| // RUN: %clang_cc1 -triple spirv64-unknown-unknown -aux-triple x86_64-pc-windows-msvc \ |
| // RUN: -fsycl-is-device -emit-llvm -o - %s | FileCheck --check-prefix=WINDOWS %s |
| |
| [[clang::sycl_external]] 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; |
| } |
| |
| // LINUX: define {{.*}} i32 @_Z1fiz(i32 noundef %n, ...) {{.*}} { |
| // LINUX: %ap1 = alloca [1 x %struct.__va_list_tag], align 8 |
| // LINUX: %ap2 = alloca [1 x %struct.__va_list_tag], align 8 |
| |
| // WINDOWS: define {{.*}} i32 @_Z1fiz(i32 noundef %n, ...) {{.*}} { |
| // WINDOWS: %ap1 = alloca ptr addrspace(4), align 8 |
| // WINDOWS: %ap2 = alloca ptr addrspace(4), align 8 |