This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/11394] New: optimization leads to broken double comparison
- From: "gccbug at chiefrocker dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Jul 2003 18:29:50 -0000
- Subject: [Bug optimization/11394] New: optimization leads to broken double comparison
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11394
Summary: optimization leads to broken double comparison
Product: gcc
Version: 3.2.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: gccbug at chiefrocker dot net
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
The following test program tests inequality of two doubles, then equality.
The bug is that both will hold if
- compiled with optimization (-O1 is enough)
- first, an int was shifted into the ostream
----------------------------------------------
#include <iostream>
#include <cmath>
int main()
{
double dist1 = std::sqrt((2.0 - 6)*(2.0 - 6) + (2.0 - 1)*(2.0 - 1));
double dist2 = std::sqrt((5.0 - 6)*(5.0 - 6) + (5.0 - 1)*(5.0 - 1));
if(dist1 != dist2)
{
std::cerr << 1 // outputting any int here makes the bug show up
<< ((dist1 == dist2) ? "compiler broken\n" : "");
}
}
----------------------------------------------
Executing
g++ -Wall -O1 double_comparison.cxx -o double_comparison &&
./double_comparison
gives:
1compiler broken
The bug was verified with 3.2.3 and 3.2, too. On 2.95.3, it does not show up.
We tried to strip the program down as far as we could, hopefully you can shed light
on this.