This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/33248] New: The execution gives wrong results when compiled with mingw32-gcc 3.4.2
- From: "alduc1 at free dot fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 30 Aug 2007 12:12:15 -0000
- Subject: [Bug c/33248] New: The execution gives wrong results when compiled with mingw32-gcc 3.4.2
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
source file :
/*
* The execution gives wrong results when compiled with mingw32-gcc 3.4.2
* (MinGW-5.1.3)
* (no problem with previous mingw32-gcc 3.2.3 / MinGW-3.1.0)
*
* KO when REAL = float
* OK when REAL = double
*
* Expected results are : tab[0] = 123 and tab[1] = -123
*
* If instead of
*
* *p++ = (REAL) floor((double) *p + 0.5);
* *p++ = (REAL) floor((double) *p + 0.5);
*
* code is
*
* *p = (REAL) floor((double) *p + 0.5);
* p++;
* *p = (REAL) floor((double) *p + 0.5);
* p++;
*
* the execution is OK.
*/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#define REAL float /* comment for use 'double' */
#ifndef REAL
#define REAL double
#endif
int main()
{
REAL tab[2],*p;
tab[0] = 123.456;
tab[1] = -123.456;
p = &tab[0];
*p++ = (REAL) floor((double) *p + 0.5);
*p++ = (REAL) floor((double) *p + 0.5);
fprintf(stdout,">>> tab[0] = %f, tab[1] = %f\n",
(double) tab[0],(double) tab[1]);
return 0;
}
--
Summary: The execution gives wrong results when compiled with
mingw32-gcc 3.4.2
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: alduc1 at free dot fr
GCC build triplet: mingw32-gcc 3.4.2 / MinGW-5.1.3
GCC host triplet: xp sp1
GCC target triplet: win32
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33248