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).
112 lines
2.9 KiB
C
112 lines
2.9 KiB
C
// RUN: %clang_cc1 -Wno-pointer-to-int-cast -fsyntax-only -verify %s
|
|
// PR3459
|
|
struct bar {
|
|
char n[1];
|
|
};
|
|
|
|
struct foo {
|
|
char name[(int)&((struct bar *)0)->n]; // expected-warning {{folded to constant}}
|
|
char name2[(int)&((struct bar *)0)->n - 1]; // expected-error {{array size is negative}}
|
|
};
|
|
|
|
// PR3430
|
|
struct s {
|
|
struct st {
|
|
int v;
|
|
} *ts;
|
|
};
|
|
|
|
struct st;
|
|
|
|
int foo(void) {
|
|
struct st *f;
|
|
return f->v + f[0].v;
|
|
}
|
|
|
|
// PR3642, PR3671
|
|
struct pppoe_tag {
|
|
short tag_type;
|
|
char tag_data[];
|
|
};
|
|
struct datatag {
|
|
struct pppoe_tag hdr; //expected-warning{{field 'hdr' with variable sized type 'struct pppoe_tag' not at the end of a struct or class is a GNU extension}}
|
|
char data;
|
|
};
|
|
|
|
|
|
// PR4092
|
|
struct s0 {
|
|
char a; // expected-note {{previous declaration is here}}
|
|
char a; // expected-error {{duplicate member 'a'}}
|
|
};
|
|
|
|
struct s0 f0(void) {}
|
|
|
|
// This previously triggered an assertion failure.
|
|
struct x0 {
|
|
unsigned int x1;
|
|
};
|
|
|
|
static struct test1 { // expected-warning {{'static' ignored on this declaration}}
|
|
int x;
|
|
};
|
|
const struct test2 { // expected-warning {{'const' ignored on this declaration}}
|
|
int x;
|
|
};
|
|
inline struct test3 { // expected-error {{'inline' can only appear on functions}}
|
|
int x;
|
|
};
|
|
|
|
struct hiding_1 {};
|
|
struct hiding_2 {};
|
|
void test_hiding(void) {
|
|
struct hiding_1 *hiding_1(void);
|
|
extern struct hiding_2 *hiding_2;
|
|
struct hiding_1 *p = hiding_1();
|
|
struct hiding_2 *q = hiding_2;
|
|
}
|
|
|
|
struct PreserveAttributes {};
|
|
typedef struct __attribute__((noreturn)) PreserveAttributes PreserveAttributes_t; // expected-warning {{'noreturn' attribute only applies to functions and methods}}
|
|
|
|
// PR46255
|
|
struct FlexibleArrayMem {
|
|
int a;
|
|
int b[];
|
|
};
|
|
|
|
struct FollowedByNamed {
|
|
struct FlexibleArrayMem a; // expected-warning {{field 'a' with variable sized type 'struct FlexibleArrayMem' not at the end of a struct or class is a GNU extension}}
|
|
int i;
|
|
};
|
|
|
|
struct FollowedByUnNamed {
|
|
struct FlexibleArrayMem a; // expected-warning {{field 'a' with variable sized type 'struct FlexibleArrayMem' not at the end of a struct or class is a GNU extension}}
|
|
struct {
|
|
int i;
|
|
};
|
|
};
|
|
|
|
struct InAnonymous {
|
|
struct { // expected-warning-re {{field '' with variable sized type 'struct InAnonymous::(anonymous at {{.+}})' not at the end of a struct or class is a GNU extension}}
|
|
|
|
struct FlexibleArrayMem a;
|
|
};
|
|
int i;
|
|
};
|
|
struct InAnonymousFollowedByAnon {
|
|
struct { // expected-warning-re {{field '' with variable sized type 'struct InAnonymousFollowedByAnon::(anonymous at {{.+}})' not at the end of a struct or class is a GNU extension}}
|
|
|
|
struct FlexibleArrayMem a;
|
|
};
|
|
struct {
|
|
int i;
|
|
};
|
|
};
|
|
|
|
// This is the behavior in C++ as well, so making sure we reproduce it here.
|
|
struct InAnonymousFollowedByEmpty {
|
|
struct FlexibleArrayMem a; // expected-warning {{field 'a' with variable sized type 'struct FlexibleArrayMem' not at the end of a struct or class is a GNU extension}}
|
|
struct {};
|
|
};
|