fix vendored libdeflate _rotr* macros colliding with mingw stdlib.h
compiler_gcc.h defined _rotl/_rotr/_rotl64/_rotr64 as macros before mingw's <stdlib.h> got a chance to declare them as functions. Any translation unit that did `#include "lib_common.h"` (which transitively pulls in compiler_gcc.h) and later included <stdlib.h> — utils.c does exactly this — would have the mingw function declarations textually substituted by the macros, producing a syntax error. Force <stdlib.h> in from compiler_gcc.h on mingw so the function declarations are parsed before the macro names get shadowed. The later #include in utils.c becomes a no-op via the header guard, and call sites still resolve to the macros below (so the generated code is unchanged on every other compiler/target). This unblocks the Crafter.Build CI's x86_64-w64-mingw32 cross-compile, which has been failing for a while when building Crafter.Asset → gdeflate → libdeflate as a dep.
This commit is contained in:
parent
765cf33069
commit
021ced683d
1 changed files with 12 additions and 0 deletions
|
|
@ -203,7 +203,19 @@ typedef char __v64qi __attribute__((__vector_size__(64)));
|
||||||
/*
|
/*
|
||||||
* Setup rotation macros similar to MSVS intrinsics.
|
* Setup rotation macros similar to MSVS intrinsics.
|
||||||
* These should recognized by compilers.
|
* These should recognized by compilers.
|
||||||
|
*
|
||||||
|
* mingw's <stdlib.h> declares _rotl/_rotr/_rotl64/_rotr64 as functions, so
|
||||||
|
* a translation unit that pulls compiler_gcc.h in first (libdeflate's own
|
||||||
|
* utils.c does exactly that) and then includes <stdlib.h> would see the
|
||||||
|
* function declarations mangled by these macros. Force <stdlib.h> in here
|
||||||
|
* on mingw so the declarations get parsed before the macro names get
|
||||||
|
* shadowed; the header guard makes the later #include a no-op and call
|
||||||
|
* sites still resolve to the macros below.
|
||||||
*/
|
*/
|
||||||
|
#if defined(__MINGW32__) || defined(__MINGW64__)
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _rotr16
|
#ifndef _rotr16
|
||||||
#define _rotr16(x,n) ((x>>n) + (x<<(16-n)))
|
#define _rotr16(x,n) ((x>>n) + (x<<(16-n)))
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue