From: David Rowley Date: Wed, 25 Nov 2020 03:33:43 +0000 (+1300) Subject: Stop gap fix for __attribute__((cold)) compiler bug in MinGW 8.1 X-Git-Tag: REL_14_BETA1~1217 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=687f6163447514c23b44a981540987013529a9ec;p=thirdparty%2Fpostgresql.git Stop gap fix for __attribute__((cold)) compiler bug in MinGW 8.1 The buildfarm animal walleye, running MinGW 8.1 has been having problems ever since 697e1d02f and 913ec71d6 went in. This appears to be a bug in assembler which was fixed in a later version. For now, in order to get that animal running green again, let's just define pg_attribute_cold and pg_attribute_hot to be empty macros on that compiler. Hopefully, we can get the support of the owner of the animal to upgrade to a less buggy compiler and revert this at a later date. Discussion: https://postgr.es/m/286560.1606233316@sss.pgh.pa.us --- diff --git a/src/include/c.h b/src/include/c.h index 3d047490078..b21e4074dd6 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -200,6 +200,21 @@ #define pg_noinline #endif +/* + * For now, just define pg_attribute_cold and pg_attribute_hot to be empty + * macros on minGW 8.1. There appears to be a compiler bug that results in + * compilation failure. At this time, we still have at least one buildfarm + * animal running that compiler, so this should make that green again. It's + * likely this compiler is not popular enough to warrant keeping this code + * around forever, so let's just remove it once the last buildfarm animal + * upgrades. + */ +#if defined(__MINGW64__) && __GNUC__ == 8 && __GNUC_MINOR__ == 1 + +#define pg_attribute_cold +#define pg_attribute_hot + +#else /* * Marking certain functions as "hot" or "cold" can be useful to assist the * compiler in arranging the assembly code in a more efficient way. @@ -216,6 +231,8 @@ #define pg_attribute_hot #endif +#endif /* defined(__MINGW64__) && __GNUC__ == 8 && + * __GNUC_MINOR__ == 1 */ /* * Mark a point as unreachable in a portable fashion. This should preferably * be something that the compiler understands, to aid code generation.