]> granicus.if.org Git - postgresql/commitdiff
Work around rounding misbehavior exposed by buildfarm.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 25 Oct 2010 05:13:22 +0000 (01:13 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
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)
                        {