cb424d7448
verify-patch-sanity.py validates every active recipe .patch has internally- consistent hunk line counts — catching the 'malformed patch at line N' failure at commit/CI/preflight time instead of hours into a cook. This cycle hit that class three times (qtwaylandscanner, sddm, xwayland), each only discovered when cookbook tried to apply the patch. Running it across the repo found 29 latent malformed patches (validated against GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22'). They were harmless only because they sit in vendored recipes (baked, not re- applied) — but would fail on any version-bump re-derivation. --fix recounts the hunk headers (body untouched) and repaired all 29. Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test (test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats (empty placeholders, bare-@@ git hunks).
119 lines
4.8 KiB
C++
119 lines
4.8 KiB
C++
// RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++17 -fsyntax-only -fsycl-is-device -verify %s
|
|
// RUN: %clang_cc1 -triple x86_64-linux-gnu -std=c++20 -fsyntax-only -fsycl-is-device -verify %s
|
|
|
|
// These tests validate that the kernel name type argument provided to the
|
|
// sycl_kernel_entry_point attribute meets the requirements of a SYCL kernel
|
|
// name as described in section 5.2, "Naming of kernels", of the SYCL 2020
|
|
// specification.
|
|
|
|
struct S1;
|
|
// expected-warning@+3 {{redundant 'sycl_kernel_entry_point' attribute}}
|
|
// expected-note@+1 {{previous attribute is here}}
|
|
[[clang::sycl_kernel_entry_point(S1),
|
|
clang::sycl_kernel_entry_point(S1)]]
|
|
void ok1();
|
|
|
|
// expected-error@+1 {{'int' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(int)]] void bad2();
|
|
|
|
// expected-error@+1 {{'int ()' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(int())]] void bad3();
|
|
|
|
// expected-error@+1 {{'int (*)()' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(int(*)())]] void bad4();
|
|
|
|
// expected-error@+1 {{'int (&)()' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(int(&)())]] void bad5();
|
|
|
|
// expected-error@+1 {{'decltype(nullptr)' (aka 'std::nullptr_t') is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(decltype(nullptr))]] void bad6();
|
|
|
|
union U7; // #U7-decl
|
|
// expected-error@+2 {{'U7' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
// expected-note@#U7-decl {{'U7' declared here}}
|
|
[[clang::sycl_kernel_entry_point(U7)]] void bad7();
|
|
|
|
enum E8 {}; // #E8-decl
|
|
// expected-error@+2 {{'E8' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
// expected-note@#E8-decl {{'E8' declared here}}
|
|
[[clang::sycl_kernel_entry_point(E8)]] void bad8();
|
|
|
|
enum E9 : int; // #E9-decl
|
|
// expected-error@+2 {{'E9' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
// expected-note@#E9-decl {{'E9' declared here}}
|
|
[[clang::sycl_kernel_entry_point(E9)]] void bad9();
|
|
|
|
struct B10 {
|
|
struct MS;
|
|
};
|
|
// FIXME-expected-error@+1 {{'sycl_kernel_entry_point' attribute argument must be a forward declarable class type}}
|
|
[[clang::sycl_kernel_entry_point(B10::MS)]] void bad10();
|
|
|
|
struct B11 {
|
|
struct MS;
|
|
};
|
|
// FIXME-expected-error@+3 {{'sycl_kernel_entry_point' attribute argument must be a forward declarable class type}}
|
|
template<typename T>
|
|
[[clang::sycl_kernel_entry_point(typename T::MS)]] void bad11() {}
|
|
template void bad11<B11>();
|
|
|
|
template<typename T>
|
|
[[clang::sycl_kernel_entry_point(T)]] void bad12();
|
|
void f12() {
|
|
// FIXME-expected-error@+2 {{'sycl_kernel_entry_point' attribute argument must be a forward declarable class type}}
|
|
struct LS;
|
|
bad12<LS>();
|
|
}
|
|
|
|
struct B13_1;
|
|
struct B13_2;
|
|
// expected-error@+3 {{'sycl_kernel_entry_point' kernel name argument does not match prior declaration: 'B13_2' vs 'B13_1'}}
|
|
// expected-note@+1 {{'bad13' declared here}}
|
|
[[clang::sycl_kernel_entry_point(B13_1)]] void bad13();
|
|
[[clang::sycl_kernel_entry_point(B13_2)]] void bad13() {}
|
|
|
|
struct B14_1;
|
|
struct B14_2;
|
|
// expected-error@+3 {{'sycl_kernel_entry_point' kernel name argument does not match prior declaration: 'B14_2' vs 'B14_1'}}
|
|
// expected-note@+1 {{previous attribute is here}}
|
|
[[clang::sycl_kernel_entry_point(B14_1),
|
|
clang::sycl_kernel_entry_point(B14_2)]]
|
|
void bad14();
|
|
|
|
struct B15;
|
|
// expected-error@+3 {{'sycl_kernel_entry_point' kernel name argument conflicts with a previous declaration}}
|
|
// expected-note@+1 {{previous declaration is here}}
|
|
[[clang::sycl_kernel_entry_point(B15)]] void bad15_1();
|
|
[[clang::sycl_kernel_entry_point(B15)]] void bad15_2();
|
|
|
|
struct B16_1;
|
|
struct B16_2;
|
|
// expected-error@+4 {{'sycl_kernel_entry_point' kernel name argument does not match prior declaration: 'B16_2' vs 'B16_1'}}
|
|
// expected-note@+1 {{'bad16' declared here}}
|
|
[[clang::sycl_kernel_entry_point(B16_1)]] void bad16();
|
|
void bad16(); // The attribute from the previous declaration is inherited.
|
|
[[clang::sycl_kernel_entry_point(B16_2)]] void bad16();
|
|
|
|
template<int>
|
|
struct B17 {
|
|
// expected-error@+1 {{'int' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(int)]]
|
|
static void bad17();
|
|
};
|
|
|
|
template<int>
|
|
struct B18 {
|
|
// expected-error@+1 {{'int' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(int)]]
|
|
friend void bad18() {}
|
|
};
|
|
|
|
template<typename KNT>
|
|
struct B19 {
|
|
// expected-error@+1 {{'int' is not a valid SYCL kernel name type; a non-union class type is required}}
|
|
[[clang::sycl_kernel_entry_point(KNT)]]
|
|
friend void bad19() {}
|
|
};
|
|
// expected-note@+1 {{in instantiation of template class 'B19<int>' requested here}}
|
|
B19<int> b19;
|