aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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)
{