aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-10-25 01:13:22 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2010-10-25 01:13:22 -0400
commit4ba61a487e39eaf859cd9face9520b30127e6a91 (patch)
tree476fc11be298a5f0a0ab772f290464377ef00409
parent2d01ec0708d571eef926f3f5795aa73759df5d9a (diff)
downloadpostgresql-4ba61a487e39eaf859cd9face9520b30127e6a91.tar.gz
postgresql-4ba61a487e39eaf859cd9face9520b30127e6a91.zip
Work around rounding misbehavior exposed by buildfarm.
-rw-r--r--src/backend/catalog/pg_enum.c10
1 files changed, 10 insertions, 0 deletions
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)
{