Cygwin defines this since 1.7.8, but our wchar_t is only 16-bit while this code seems to assume 32-bit wchar_t. So, either some incorrect assumptions need to be fixed in the __STDC_ISO_10646__ code paths, or the conditionals need to also be guarded && (__SIZEOF_WCHAR_T__ == 4). Reported by SLao: http://article.gmane.org/gmane.os.cygwin.ports.general/1330 --- origsrc/glib-2.36.4/glib/gunicollate.c 2013-05-07 13:26:07.000000000 -0500 +++ src/glib-2.36.4/glib/gunicollate.c 2013-11-30 21:36:27.710188300 -0600 @@ -37,9 +37,12 @@ #include "gstrfuncs.h" #include "gtestutils.h" #include "gcharset.h" -#ifndef __STDC_ISO_10646__ +#if !defined(__STDC_ISO_10646__) || defined(G_WITH_CYGWIN) #include "gconvert.h" #endif +#ifdef G_WITH_CYGWIN +#undef __STDC_ISO_10646__ +#endif #ifdef _MSC_VER