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).
121 lines
6.0 KiB
C++
121 lines
6.0 KiB
C++
// RUN: %clang_cc1 -triple s390x-ibm-zos %s -fsyntax-only -fzos-extensions -verify
|
|
// RUN: %clang_cc1 -triple s390x-ibm-zos %s -fsyntax-only -verify
|
|
|
|
struct A {
|
|
int a;
|
|
short b;
|
|
float q;
|
|
double z;
|
|
};
|
|
|
|
union B {
|
|
int a;
|
|
short b;
|
|
float q;
|
|
double z;
|
|
};
|
|
|
|
class C {
|
|
int a;
|
|
short b;
|
|
float q;
|
|
double z;
|
|
};
|
|
|
|
// ************************
|
|
// INCORRECT DECLARATION
|
|
// ************************
|
|
int * __ptr64 p64; // expected-error {{expected ';' after top level declarator}}
|
|
int *wrong_var3 __ptr32; // expected-error {{expected ';' after top level declarator}} expected-warning {{declaration does not declare anything}}
|
|
|
|
// **************************
|
|
// INCORRECT USAGES OF PTR32
|
|
// **************************
|
|
struct D {
|
|
int __ptr32 *a; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
};
|
|
|
|
union E {
|
|
int __ptr32 *b; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
};
|
|
|
|
char __ptr32 *a; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
signed char __ptr32 *b; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
unsigned char __ptr32 *c; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 *d; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
signed int __ptr32 *e; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
unsigned int __ptr32 *f; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
short int __ptr32 *g; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
signed short int __ptr32 *h; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
unsigned short int __ptr32 *i; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
long int __ptr32 *j; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
signed long int __ptr32 *k; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
unsigned long int __ptr32 *l; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
long long int __ptr32 *m; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
signed long long int __ptr32 *n; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
unsigned long long int __ptr32 *o; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
float __ptr32 *p; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
double __ptr32 *q; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 **r; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 *__ptr32 *s; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 *__ptr32 *__ptr32 t; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 *__ptr32 *__ptr32 *__ptr32 u; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 __ptr32 **v_i; // expected-error {{'__ptr32' attribute only applies to pointer arguments}} expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int __ptr32 __ptr32 __ptr32 w_i; // expected-error {{'__ptr32' attribute only applies to pointer arguments}} expected-error {{'__ptr32' attribute only applies to pointer arguments}} expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
|
|
__ptr32 int wrong_var; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
|
|
struct A __ptr32 *c1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
struct A __ptr32 **e1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
struct A __ptr32 *__ptr32 *f1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
struct A __ptr32 *__ptr32 *__ptr32 g1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
union B __ptr32 *d1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
union B __ptr32 **h1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
union B __ptr32 * __ptr32 *i1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
union B __ptr32 * __ptr32 * __ptr32 j1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
|
|
C __ptr32 **k1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
C __ptr32 * __ptr32 *l1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
C __ptr32 * __ptr32 * __ptr32 m1; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
|
|
struct D n1;
|
|
union E o1;
|
|
|
|
int incorrect_func() {
|
|
int __ptr32 = 1; // expected-error {{expected unqualified-id}}
|
|
return __ptr32; // expected-error {{expected expression}}
|
|
}
|
|
|
|
typedef int __ptr32; // expected-warning {{typedef requires a name}}
|
|
int incorrect_func2() {
|
|
return 1;
|
|
}
|
|
|
|
typedef int __ptr32 *v; // expected-error {{'__ptr32' attribute only applies to pointer arguments}}
|
|
int incorrect_func3() {
|
|
v v1;
|
|
return 0;
|
|
}
|
|
|
|
int *__ptr32 a_ptr; //expected-note {{previous definition is here}}
|
|
int *a_ptr; // expected-error {{redefinition of 'a_ptr' with a different type: 'int *' vs 'int * __ptr32'}}
|
|
|
|
// *******************************************************
|
|
// FUNCTION OVERLOADING BETWEEN PTR32 AND REGULAR POINTERS
|
|
// *******************************************************
|
|
void func(int * __ptr32 p32) {} // expected-note {{previous definition is here}}
|
|
void func(int *p64) {} // expected-error {{redefinition of 'func'}}
|
|
|
|
// Overloads between ptr32 and other non-pointer types are permissible
|
|
void func1(int *__ptr32 p32) {}
|
|
void func1(int p64) {}
|
|
|
|
// ******
|
|
// MISC
|
|
// ******
|
|
void func2() {
|
|
char * __ptr32 v = ((char * __ptr32 *)1028)[0];
|
|
char *v1 = ((char ** __ptr32 *)1028)[0][1];
|
|
}
|
|
|