From fb9468754537893024940f968173b3e52ec75bb9 Mon Sep 17 00:00:00 2001 From: Elizabeth Andrews Date: Mon, 3 Nov 2025 15:16:50 -0800 Subject: [PATCH 1/2] [SYCL][Clang] Add sentinel value to kernel_args_sizes Add sentinel value to compiler generated array kernel_args_sizes in integration header to avoid warnings about empty arrays. This array is used to hold the number of elements in each kernel. This PR changes the type to int to add a sentinel value of -1. --- clang/lib/Sema/SemaSYCL.cpp | 6 +++++- clang/test/CodeGenSYCL/int-header-empty-signatures.cpp | 2 +- clang/test/CodeGenSYCL/integration_header.cpp | 2 +- clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp | 2 +- clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp | 2 +- clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp | 2 +- clang/test/CodeGenSYCL/union-kernel-param-ih.cpp | 2 +- clang/test/CodeGenSYCL/wrapped-accessor.cpp | 2 +- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/clang/lib/Sema/SemaSYCL.cpp b/clang/lib/Sema/SemaSYCL.cpp index 996aca877350c..f0245685bcaa7 100644 --- a/clang/lib/Sema/SemaSYCL.cpp +++ b/clang/lib/Sema/SemaSYCL.cpp @@ -7052,11 +7052,15 @@ void SYCLIntegrationHeader::emit(raw_ostream &O) { O << " \"\",\n"; O << "};\n\n"; - O << "static constexpr unsigned kernel_args_sizes[] = {"; + O << "static constexpr int kernel_args_sizes[] = {"; for (unsigned I = 0; I < KernelDescs.size(); I++) { O << KernelDescs[I].Params.size() << ", "; } + // Add a sentinel to avoid warning if the collection is empty + // (similar to what we do for kernel_signatures below). + O << "-1, \n"; O << "};\n\n"; + O << "// array representing signatures of all kernels defined in the\n"; O << "// corresponding source\n"; O << "static constexpr\n"; diff --git a/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp b/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp index d1b54648f2645..c8e59f4bdabe5 100644 --- a/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp +++ b/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp @@ -10,7 +10,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {0, -1 // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/integration_header.cpp b/clang/test/CodeGenSYCL/integration_header.cpp index df700e1b66c02..c38fe19c12c51 100644 --- a/clang/test/CodeGenSYCL/integration_header.cpp +++ b/clang/test/CodeGenSYCL/integration_header.cpp @@ -25,7 +25,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; // -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {5, 3, 2, 8, 3, 0, -1, // // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp b/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp index c5948f48519f1..6a83926755221 100644 --- a/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp +++ b/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp @@ -18,7 +18,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {2, -1, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp b/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp index a7a115f394be8..5aac1c3a57bfe 100644 --- a/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp +++ b/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp @@ -18,7 +18,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {2, -1, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp b/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp index 1c55478122b2c..0de39925dabec 100644 --- a/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp +++ b/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp @@ -19,7 +19,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {1, 1, 1, -1, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp b/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp index ab9359a95ce6f..23478123b0d8a 100644 --- a/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp +++ b/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp @@ -18,7 +18,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {1, -1, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/wrapped-accessor.cpp b/clang/test/CodeGenSYCL/wrapped-accessor.cpp index a45d285ba4ce5..348627f0960f2 100644 --- a/clang/test/CodeGenSYCL/wrapped-accessor.cpp +++ b/clang/test/CodeGenSYCL/wrapped-accessor.cpp @@ -15,7 +15,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr unsigned kernel_args_sizes[] = { +// CHECK: static constexpr int kernel_args_sizes[] = {1, -1, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { From e1e1c74b02e40138f8eaed2edd2a0dc66d55bdb9 Mon Sep 17 00:00:00 2001 From: Elizabeth Andrews Date: Wed, 5 Nov 2025 13:56:38 -0800 Subject: [PATCH 2/2] Change sentinel value to 0 to avoid type change and ABI break --- clang/lib/Sema/SemaSYCL.cpp | 4 ++-- clang/test/CodeGenSYCL/int-header-empty-signatures.cpp | 2 +- clang/test/CodeGenSYCL/integration_header.cpp | 2 +- clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp | 2 +- clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp | 2 +- clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp | 2 +- clang/test/CodeGenSYCL/union-kernel-param-ih.cpp | 2 +- clang/test/CodeGenSYCL/wrapped-accessor.cpp | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/clang/lib/Sema/SemaSYCL.cpp b/clang/lib/Sema/SemaSYCL.cpp index f0245685bcaa7..8a792c93ccf40 100644 --- a/clang/lib/Sema/SemaSYCL.cpp +++ b/clang/lib/Sema/SemaSYCL.cpp @@ -7052,13 +7052,13 @@ void SYCLIntegrationHeader::emit(raw_ostream &O) { O << " \"\",\n"; O << "};\n\n"; - O << "static constexpr int kernel_args_sizes[] = {"; + O << "static constexpr unsigned kernel_args_sizes[] = {"; for (unsigned I = 0; I < KernelDescs.size(); I++) { O << KernelDescs[I].Params.size() << ", "; } // Add a sentinel to avoid warning if the collection is empty // (similar to what we do for kernel_signatures below). - O << "-1, \n"; + O << "0, \n"; O << "};\n\n"; O << "// array representing signatures of all kernels defined in the\n"; diff --git a/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp b/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp index c8e59f4bdabe5..c7d5c4f00932e 100644 --- a/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp +++ b/clang/test/CodeGenSYCL/int-header-empty-signatures.cpp @@ -10,7 +10,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr int kernel_args_sizes[] = {0, -1 +// CHECK: static constexpr unsigned kernel_args_sizes[] = {0, 0 // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/integration_header.cpp b/clang/test/CodeGenSYCL/integration_header.cpp index c38fe19c12c51..e25242484fded 100644 --- a/clang/test/CodeGenSYCL/integration_header.cpp +++ b/clang/test/CodeGenSYCL/integration_header.cpp @@ -25,7 +25,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; // -// CHECK: static constexpr int kernel_args_sizes[] = {5, 3, 2, 8, 3, 0, -1, +// CHECK: static constexpr unsigned kernel_args_sizes[] = {5, 3, 2, 8, 3, 0, 0, // // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp b/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp index 6a83926755221..d16db098e2c81 100644 --- a/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp +++ b/clang/test/CodeGenSYCL/kernel-param-acc-array-ih.cpp @@ -18,7 +18,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr int kernel_args_sizes[] = {2, -1, +// CHECK: static constexpr unsigned kernel_args_sizes[] = {2, 0, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp b/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp index 5aac1c3a57bfe..3000dbd643ed8 100644 --- a/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp +++ b/clang/test/CodeGenSYCL/kernel-param-member-acc-array-ih.cpp @@ -18,7 +18,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr int kernel_args_sizes[] = {2, -1, +// CHECK: static constexpr unsigned kernel_args_sizes[] = {2, 0, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp b/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp index 0de39925dabec..dcfff6dea330e 100644 --- a/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp +++ b/clang/test/CodeGenSYCL/kernel-param-pod-array-ih.cpp @@ -19,7 +19,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr int kernel_args_sizes[] = {1, 1, 1, -1, +// CHECK: static constexpr unsigned kernel_args_sizes[] = {1, 1, 1, 0, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp b/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp index 23478123b0d8a..77f8ceaef8359 100644 --- a/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp +++ b/clang/test/CodeGenSYCL/union-kernel-param-ih.cpp @@ -18,7 +18,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr int kernel_args_sizes[] = {1, -1, +// CHECK: static constexpr unsigned kernel_args_sizes[] = {1, 0, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = { diff --git a/clang/test/CodeGenSYCL/wrapped-accessor.cpp b/clang/test/CodeGenSYCL/wrapped-accessor.cpp index 348627f0960f2..612e812bc93a1 100644 --- a/clang/test/CodeGenSYCL/wrapped-accessor.cpp +++ b/clang/test/CodeGenSYCL/wrapped-accessor.cpp @@ -15,7 +15,7 @@ // CHECK-NEXT: "" // CHECK-NEXT: }; -// CHECK: static constexpr int kernel_args_sizes[] = {1, -1, +// CHECK: static constexpr unsigned kernel_args_sizes[] = {1, 0, // CHECK: static constexpr // CHECK-NEXT: const kernel_param_desc_t kernel_signatures[] = {