From: Tom Lane Date: Mon, 25 Oct 2010 05:13:22 +0000 (-0400) Subject: Work around rounding misbehavior exposed by buildfarm. X-Git-Tag: REL9_1_ALPHA2~34 X-Git-Url: http://git.postgresql.org/gitweb/?a=commitdiff_plain;h=4ba61a487e39eaf859cd9face9520b30127e6a91;p=postgresql.git Work around rounding misbehavior exposed by buildfarm. --- diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c index 0c384def7b6..5f3a5415cec 100644 --- a/src/backend/catalog/pg_enum.c +++ b/src/backend/catalog/pg_enum.c @@ -287,6 +287,16 @@ restart: other_nbr_en = (Form_pg_enum) GETSTRUCT(existing[other_nbr_index]); newelemorder = (nbr_en->enumsortorder + other_nbr_en->enumsortorder) / 2; + + /* + * On some machines, newelemorder may be in a register that's + * wider than float4. We need to force it to be rounded to + * float4 precision before making the following comparisons, + * or we'll get wrong results. (Such behavior violates the C + * standard, but fixing the compilers is out of our reach.) + */ + newelemorder = DatumGetFloat4(Float4GetDatum(newelemorder)); + if (newelemorder == nbr_en->enumsortorder || newelemorder == other_nbr_en->enumsortorder) {