Compare commits

..

2 commits

Author SHA1 Message Date
e70cc9212b Merge pull request 'fix vendored libdeflate _rotr* macros vs mingw stdlib.h' (#1) from fix/mingw-rotr64-stdlib-collision into master
Reviewed-on: #1
2026-05-27 04:28:36 +02:00
Crafter Build CI
021ced683d 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.
2026-05-27 02:23:53 +00:00

View file

@ -203,7 +203,19 @@ typedef char __v64qi __attribute__((__vector_size__(64)));
/*
* Setup rotation macros similar to MSVS intrinsics.
* 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
#define _rotr16(x,n) ((x>>n) + (x<<(16-n)))
#endif