Work around rounding misbehavior exposed by buildfarm.

This commit is contained in:
Tom Lane 2010-10-25 01:13:22 -04:00
parent 2d01ec0708
commit 4ba61a487e
1 changed files with 10 additions and 0 deletions

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