From f485db429a26666a8468c1ec1227d6bd64a45682 Mon Sep 17 00:00:00 2001 From: unknown <konstantin@mysql.com> Date: Thu, 31 Mar 2005 03:44:51 +0400 Subject: [PATCH] A fix for Bug#9443 "mysql_client_test fails on linux and some solaris platforms": yet another issue with floating pointer comparisons. The fix uses the workaround with volatiles. sql/item_cmpfunc.cc: A fix for the failing mysql_client_test on some Intel platforms when compiled with optimization. We don't use -ffloat-store compileation as it may slow all floating point operations. --- sql/item_cmpfunc.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 690da1be18..8498ab4800 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -393,10 +393,16 @@ int Arg_comparator::compare_e_binary_string() int Arg_comparator::compare_real() { - double val1= (*a)->val(); + /* + Fix yet another manifestation of Bug#2338. 'Volatile' will instruct + gcc to flush double values out of 80-bit Intel FPU registers before + performing the comparison. + */ + volatile double val1, val2; + val1= (*a)->val(); if (!(*a)->null_value) { - double val2= (*b)->val(); + val2= (*b)->val(); if (!(*b)->null_value) { owner->null_value= 0; -- 2.30.9