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)
{