Files
RedBear-OS/local/recipes/dev/libclc/source/clang/test/Parser/MicrosoftExtensions.c
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

118 lines
5.1 KiB
C

// RUN: %clang_cc1 -triple i386-mingw32 -fsyntax-only -Wno-missing-declarations -verify -fms-extensions %s
__stdcall int func0(void);
int __stdcall func(void);
typedef int (__cdecl *tptr)(void);
void (*__fastcall fastpfunc)(void);
extern __declspec(dllimport) void __stdcall VarR4FromDec(void);
__declspec(deprecated) __declspec(deprecated) char * __cdecl ltoa( long _Val, char * _DstBuf, int _Radix);
__declspec(safebuffers) __declspec(noalias) __declspec(restrict) void * __cdecl xxx(void *_Memory);
typedef __w64 unsigned long ULONG_PTR, *PULONG_PTR;
void * __ptr64 PtrToPtr64(const void *p) {
return((void * __ptr64) (unsigned __int64) (ULONG_PTR)p );
}
void * __ptr32 PtrToPtr32(const void *p) {
return((void * __ptr32) (unsigned __int32) (ULONG_PTR)p );
}
/* Both inline and __forceinline is OK. */
inline void __forceinline pr8264(void) {}
__forceinline void inline pr8264_1(void) {}
void inline __forceinline pr8264_2(void) {}
void __forceinline inline pr8264_3(void) {}
/* But duplicate __forceinline causes warning. */
void __forceinline __forceinline pr8264_4(void) { /* expected-warning{{duplicate '__forceinline' declaration specifier}} */
}
_inline int foo99(void) { return 99; }
void test_ms_alignof_alias(void) {
unsigned int s = _alignof(int);
s = __builtin_alignof(int);
}
/* Charify extension. */
#define FOO(x) #@x
char x = FOO(a);
#define HASHAT #@
#define MISSING_ARG(x) #@
/* expected-error@-1 {{'#@' is not followed by a macro parameter}} */
typedef enum E { e1 };
enum __declspec(deprecated) E2 { i, j, k }; /* expected-note {{'E2' has been explicitly marked deprecated here}} */
__declspec(deprecated) enum E3 { a, b, c } e; /* expected-note {{'e' has been explicitly marked deprecated here}} */
void deprecated_enum_test(void) {
/* Test to make sure the deprecated warning follows the right thing */
enum E2 e1; /* expected-warning {{'E2' is deprecated}} */
enum E3 e2; /* No warning expected, the deprecation follows the variable */
enum E3 e3 = e; /* expected-warning {{'e' is deprecated}} */
}
/* Microsoft attribute tests */
[returnvalue:SA_Post( attr=1)]
int foo1([SA_Post(attr=1)] void *param);
[unbalanced(attribute) /* expected-note {{to match this '['}} */
void f(void); /* expected-error {{expected ']'}} */
void ms_intrinsics(int a) {
__noop();
__assume(a);
__debugbreak();
}
struct __declspec(frobble) S1 {}; /* expected-warning {{__declspec attribute 'frobble' is not supported}} */
struct __declspec(12) S2 {}; /* expected-error {{__declspec attributes must be an identifier or string literal}} */
struct __declspec("testing") S3 {}; /* expected-warning {{__declspec attribute '"testing"' is not supported}} */
/* declspecs with arguments cannot have an empty argument list, even if the
arguments are optional. */
__declspec(deprecated()) void dep_func_test(void); /* expected-error {{parentheses must be omitted if 'deprecated' attribute's argument list is empty}} */
__declspec(deprecated) void dep_func_test2(void);
__declspec(deprecated("")) void dep_func_test3(void);
/* Ensure multiple declspec attributes are supported */
struct __declspec(align(8) deprecated) S4 {};
/* But multiple declspecs must still be legal */
struct __declspec(deprecated frobble "testing") S5 {}; /* expected-warning {{__declspec attribute 'frobble' is not supported}} expected-warning {{__declspec attribute '"testing"' is not supported}} */
struct __declspec(unknown(12) deprecated) S6 {}; /* expected-warning {{__declspec attribute 'unknown' is not supported}}*/
int * __sptr psp;
int * __uptr pup;
/* Either ordering is acceptable */
int * __ptr32 __sptr psp32;
int * __ptr32 __uptr pup32;
int * __sptr __ptr64 psp64;
int * __uptr __ptr64 pup64;
/* Legal to have nested pointer attributes */
int * __sptr * __ptr32 ppsp32;
// Ignored type qualifiers after comma in declarator lists
typedef int ignored_quals_dummy1, const volatile __ptr32 __ptr64 __w64 __unaligned __sptr __uptr ignored_quals1; // expected-warning {{qualifiers after comma in declarator list are ignored}}
typedef void(*ignored_quals_dummy2)(void), __fastcall ignored_quals2; // expected-warning {{qualifiers after comma in declarator list are ignored}}
typedef void(*ignored_quals_dummy3)(void), __stdcall ignored_quals3; // expected-warning {{qualifiers after comma in declarator list are ignored}}
typedef void(*ignored_quals_dummy4)(void), __thiscall ignored_quals4; // expected-warning {{qualifiers after comma in declarator list are ignored}}
typedef void(*ignored_quals_dummy5)(void), __cdecl ignored_quals5; // expected-warning {{qualifiers after comma in declarator list are ignored}}
typedef void(*ignored_quals_dummy6)(void), __vectorcall ignored_quals6; // expected-warning {{qualifiers after comma in declarator list are ignored}}
__declspec(align(16)) struct align_before_key1 {};
__declspec(align(16)) struct align_before_key2 {} align_before_key2_var;
__declspec(align(16)) struct align_before_key3 {} *align_before_key3_var;
_Static_assert(__alignof(struct align_before_key1) == 16, "");
_Static_assert(__alignof(struct align_before_key2) == 16, "");
_Static_assert(__alignof(struct align_before_key3) == 16, "");
void PR28782(int i) {
foo:
int n;
switch (i) {
case 0:
int m;
}
}