[Bug middle-end/34992] compiler produces wrong code when optimizing

roebel at ircam dot fr gcc-bugzilla@gcc.gnu.org
Mon Jan 28 02:10:00 GMT 2008



------- Comment #6 from roebel at ircam dot fr  2008-01-28 00:14 -------
Andrew,

while -ffloat-store fixes the problem, this solution is obviously not
acceptable. Moreover, here the problem is not that I compare floats 
using <= the problem is that std::set<double>::insert(double) compares
set elements using std::less<double> which in this case just does not work. 

Now using std::less<double> for a set does not seem not carefull
to me, be cause this is the default. So the default is nonsense ?

I fixed the problem by means of using  std::set<double,dless>
with dless being

struct dless{
  typedef double first_argument_type;
  typedef double second_argument_type;
  typedef bool result_type;
  volatile double d1;
  volatile double d2;
  bool operator()(double in1, double in2) {
    d1 = in1;
    d2 = in2;
    return d1 < d2;
  }
};

which proves that the problem is in the std::less operator
and not in my code. In fact this even means that 
std::less<double> and std::greater<double> and all 
their company is useless because you can never be sure what they 
are comparing. So many of the functions of the std::library
may fail!! Am I wrong, here ? 


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34992



More information about the Gcc-bugs mailing list