https://bugs.winehq.org/show_bug.cgi?id=51926
--- Comment #4 from studiosg@giustetti.net --- Thanks for the feedback Zebediah,
I added a couple of #pragma directives to your example and can confirm that the problem only arises when building release 6.20.
In your test and in wine <= 6.19 definitions are expanded as follows: Your Test / wine 6.19 The value of WIFEXITED(status): ((((__extension__ (((union { __typeof(status) __in; int __i; }) { .__in = (status) }).__i))) & 0x7f) == 0) The value of __WAIT_INT (status): (__extension__ (((union { __typeof(status) __in; int __i; }) { .__in = (status) }).__i))
While in Wine 6.20 they are expanded in: The value of WIFEXITED(status): ((((__extension__ (((union { __typeof(status) ; int __i; }) { . = (status) }).__i))) & 0x7f) == 0) The value of __WAIT_INT (status): (__extension__ (((union { __typeof(status) ; int __i; }) { . = (status) }).__i))
Please note the missing "__in"s. As far as I can tell, both "__in"s are replaced by an empty string (Lenght 0) resulting in a wrong definition and a syntax error.
Adding line of code: #undef __in before the "start_server" function definition solves the problem for loader.c, but the very same error arises again later on when compiling process.c.
__in is defined in "include/sal.h", line 347: #define __in This presented no problem before Wine 6.20. As far as I can tell the header is included where it should not, but I wasn't able to determine where so far.