Files
RedBear-OS/local/recipes/dev/libclc/source/clang/test/SemaOpenCLCXX/address-space-references.clcpp
T
vasilito cb424d7448 build: static patch-sanity linter (shift-left the malformed-patch class)
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).
2026-08-01 05:13:02 +03:00

41 lines
2.0 KiB
Plaintext

// RUN: %clang_cc1 %s -triple spir-unknown-unknown -pedantic -verify -fsyntax-only
__global const int& f(__global float &ref) {
return ref; // expected-error{{reference of type 'const __global int &' cannot bind to a temporary object because of address space mismatch}}
}
int bar(const __global unsigned int &i); // expected-note{{passing argument to parameter 'i' here}}
//FIXME: With the overload below the call should be resolved
// successfully. However, current overload resolution logic
// can't detect this case and therefore fails.
int bar(const unsigned int &i);
typedef short short2 __attribute__((ext_vector_type(2)));
class C {
public:
void gen(const short2 &);
void glob(__global const short2 &); //expected-note{{passing argument to parameter here}}
void nested_list(const short2 (&)[2]);
};
void foo() {
bar(1); // expected-error{{binding reference of type 'const __global unsigned int' to value of type 'int' changes address space}}
C c;
c.gen({1, 2});
c.glob({1, 2}); //expected-error{{binding reference of type 'const __global short2' (vector of 2 'short' values) to value of type 'void' changes address space}}
c.nested_list({{1, 2}, {3, 4}});
}
// Test addr space conversion with nested pointers
extern void nestptr(int *&); // expected-note {{candidate function not viable: no known conversion from '__global int *__private' to '__generic int *__generic &__private' for 1st argument}}
extern void nestptr_const(int * const &); // expected-note {{candidate function not viable: cannot pass pointer to address space '__constant' as a pointer to address space '__generic' in 1st argument}}
int test_nestptr(__global int *glob, __constant int *cons, int* gen) {
nestptr(glob); // expected-error{{no matching function for call to 'nestptr'}}
// Addr space conversion first occurs on a temporary.
nestptr_const(glob);
// No legal conversion between disjoint addr spaces.
nestptr_const(cons); // expected-error{{no matching function for call to 'nestptr_const'}}
return *(*cons ? glob : gen);
}