Work around rounding misbehavior exposed by buildfarm.
authorTom Lane <[email protected]>
Mon, 25 Oct 2010 05:13:22 +0000 (01:13 -0400)
committerTom Lane <[email protected]>
Mon, 25 Oct 2010 05:13:22 +0000 (01:13 -0400)
src/backend/catalog/pg_enum.c

index 0c384def7b60e17a0c0dc03bce0fc83d23d9389e..5f3a5415cec11a5b0b7e0d8a2d67da04cd7cfe01 100644 (file)
@@ -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)
            {