This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
bug in gcc-3.3 [long double comparison is broken]
- From: Paul dot Zimmermann at loria dot fr (Paul Zimmermann)
- To: gcc-bugs at gcc dot gnu dot org
- Cc: tg at swox dot com, Vincent dot Lefevre at loria dot fr, user42 at zip dot com dot au
- Date: Mon, 13 Oct 2003 14:38:44 +0200
- Subject: bug in gcc-3.3 [long double comparison is broken]
* the exact version of GCC, system type, options given when GCC was configured/built:
% gcc -v
Reading specs from /opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/specs
Configured with: /opt/build/gcc-3.3/configure --enable-nls --with-included-gettext --enable-shared --enable-threads --with-local-prefix=/opt/TWWfsw/gcc33 --prefix=/opt/TWWfsw/gcc33
Thread model: single
gcc version 3.3 (TWW)
* the complete command line that triggers the bug;
gcc -O1 bug.c (or higher optimization level)
* the compiler output (error messages, warnings, etc.);
No output.
* the preprocessed file (*.i*) that triggers the bug:
# 1 "bug.c"
# 1 "<built-in>"
# 1 "<command line>"
# 1 "bug.c"
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 1 3 4
# 14 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdarg.h" 1 3 4
# 43 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdarg.h" 3 4
typedef __builtin_va_list __gnuc_va_list;
# 15 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
# 62 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
# 1 "/usr/include/standards.h" 1 3 4
# 63 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
# 90 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
typedef unsigned long size_t;
# 106 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
typedef long fpos_t;
# 146 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
# 1 "/usr/include/sys/seek.h" 1 3 4
# 147 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
typedef struct {
int _cnt;
unsigned int _flag2;
unsigned char *_ptr;
unsigned char *_base;
int _bufsiz;
short _flag;
short _file;
char *__newbase;
void *_lock;
unsigned char *_bufendp;
} FILE;
extern FILE _iob[];
# 178 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
extern size_t fread (void *, size_t, size_t, FILE *);
extern size_t fwrite (const void *, size_t, size_t, FILE *);
extern int _flsbuf (int, FILE *);
extern int _filbuf (FILE *);
extern int ferror (FILE *);
extern int feof (FILE *);
extern void clearerr (FILE *);
extern int putchar (int);
extern int getchar (void);
extern int putc (int, FILE *);
extern int getc (FILE *);
extern int remove (const char *);
extern int rename (const char *, const char *);
extern FILE *tmpfile (void);
extern char *tmpnam (char *);
extern int fclose (FILE *);
extern int fflush (FILE *);
extern FILE *fopen (const char *, const char *);
extern FILE *freopen (const char *, const char *, FILE *);
extern void setbuf (FILE *, char *);
extern int setvbuf (FILE *, char *, int, size_t);
extern int fprintf (FILE *, const char *, ...);
extern int fscanf (FILE *, const char *, ...);
extern int printf (const char *, ...);
extern int scanf (const char *, ...);
extern int sprintf (char *, const char *, ...);
extern int sscanf (const char *, const char *, ...);
extern int snprintf (char *, size_t, const char *, ...);
# 221 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/va_list.h" 1 3 4
# 10 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/va_list.h" 3 4
typedef __gnuc_va_list va_list;
# 222 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
extern int vfprintf (FILE *, const char *, __gnuc_va_list);
extern int vprintf (const char *, __gnuc_va_list);
extern int vsprintf (char *, const char *, __gnuc_va_list);
extern int vsnprintf (char *, size_t, const char*, __gnuc_va_list);
# 242 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
extern int fgetc (FILE *);
extern char *fgets (char *, int, FILE *);
extern int fputc (int, FILE *);
extern int fputs (const char *, FILE *);
extern char *gets (char *);
extern int puts (const char *);
extern int ungetc (int, FILE *);
extern int fseek (FILE *, long, int);
# 273 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
extern int fsetpos (FILE *, const fpos_t *);
extern int fgetpos (FILE *, fpos_t *);
extern long ftell (FILE *);
extern void rewind (FILE *);
extern void perror (const char *);
# 435 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 1 3 4
# 84 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef long int ptrdiff_t;
# 116 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef unsigned int wchar_t;
# 126 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef unsigned int wctype_t;
# 135 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
# 1 "/usr/include/time_t.h" 1 3 4
# 34 "/usr/include/time_t.h" 3 4
typedef int time_t;
# 136 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 2 3 4
typedef int clock_t;
# 157 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef long ssize_t;
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
typedef volatile unsigned char vuchar_t;
typedef volatile unsigned short vushort_t;
typedef volatile unsigned int vuint_t;
typedef volatile unsigned long vulong_t;
typedef struct { long r[1]; } *physadr_t;
typedef struct label_t {
long val[10];
} label_t;
# 251 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef int level_t;
typedef int daddr_t;
typedef long daddr64_t;
typedef char * caddr_t;
typedef long * qaddr_t;
typedef char * addr_t;
typedef uint_t ino_t;
typedef short cnt_t;
typedef int dev_t;
typedef int chan_t;
typedef long off_t;
typedef long t_scalar_t;
typedef unsigned long t_uscalar_t;
# 285 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef unsigned long rlim_t;
typedef int paddr_t;
typedef ushort_t nlink_t;
typedef int key_t;
typedef uint_t mode_t;
typedef uint_t uid_t;
typedef uint_t gid_t;
typedef void * mid_t;
typedef int pid_t;
typedef union cpid {
struct {
unsigned int pid:19;
unsigned int nodeid:8;
unsigned int seqnum:4;
unsigned int signbit:1;
} cluster_fields;
pid_t ipid;
} cpid_t;
typedef char slab_t[12];
typedef ulong_t shmatt_t;
typedef ulong_t msgqnum_t;
typedef ulong_t msglen_t;
typedef unsigned int wint_t;
# 354 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef unsigned long sigset_t;
# 371 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef struct __pthread_attr_t {
long __valid;
char* __name;
unsigned long __arg;
unsigned long __reserved[19];
} pthread_attr_t;
typedef struct __pthread_mutexattr_t {
long __valid;
unsigned long __reserved[15];
} pthread_mutexattr_t;
typedef struct __pthread_condattr_t {
long __valid;
unsigned long __reserved[13];
} pthread_condattr_t;
typedef struct __pthread_rwlockattr_t {
long __valid;
unsigned long __reserved[15];
} pthread_rwlockattr_t;
# 421 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef struct __pthread_t {
void* __reserved1;
void* __reserved2;
unsigned short __size;
unsigned char __version;
unsigned char __reserved3;
unsigned char __external;
unsigned char __reserved4[2];
unsigned char __creator;
unsigned long __sequence;
unsigned long __reserved5[2];
void* __per_kt_area;
void* __stack_base;
void* __stack_reserve;
void* __stack_yellow;
void* __stack_guard;
unsigned long __stack_size;
void** __tsd_values;
unsigned long __tsd_count;
unsigned int __reserved6;
unsigned int __reserved7;
unsigned int __thread_flags;
int __thd_errno;
void* __stack_hiwater;
} *pthread_t, pthreadTeb_t;
typedef struct __pthread_mutex_t {
unsigned int __lock;
unsigned int __valid;
char* __name;
unsigned int __arg;
unsigned int __depth;
unsigned long __sequence;
unsigned long __owner;
void* __block;
} pthread_mutex_t;
typedef struct __pthread_cond_t {
unsigned int __state;
unsigned int __valid;
char* __name;
unsigned int __arg;
unsigned int __reserved1;
unsigned long __sequence;
void* __block;
} pthread_cond_t;
typedef struct __pthread_rwlock_t {
unsigned int __valid;
unsigned int __flags;
char* __name;
unsigned int __arg;
unsigned int __readers;
unsigned int __rwaits;
unsigned int __wwaits;
unsigned long __sequence;
unsigned long __wrid;
void* __block;
unsigned long __reserved1;
} pthread_rwlock_t;
typedef unsigned int pthread_key_t;
typedef struct __pthread_once_t {
long __state;
long __reserved[10];
} pthread_once_t;
# 497 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef long timer_t;
# 523 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef void (*sig_t) (int,void (*)(int));
typedef unsigned int cpuid_t;
enum { CPU_NONE=(-1) };
# 543 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef pid_t id_t;
typedef unsigned int useconds_t;
# 557 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
typedef uint_t major_t;
typedef uint_t minor_t;
typedef uint_t devs_t;
typedef uint_t unit_t;
# 580 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 3 4
# 1 "/usr/include/mach/machine/vm_types.h" 1 3 4
# 67 "/usr/include/mach/machine/vm_types.h" 3 4
typedef unsigned long vm_offset_t;
typedef unsigned long vm_size_t;
# 581 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 2 3 4
typedef uchar_t uchar;
typedef ushort_t ushort;
typedef uint_t uint;
typedef ulong_t ulong;
typedef physadr_t physadr;
typedef uchar_t u_char;
typedef ushort_t u_short;
typedef uint_t u_int;
typedef ulong_t u_long;
typedef vuchar_t vu_char;
typedef vushort_t vu_short;
typedef vuint_t vu_int;
typedef vulong_t vu_long;
typedef struct _quad { int val[2]; } quad;
typedef long swblk_t;
typedef u_long fixpt_t;
# 1 "/usr/include/sys/select.h" 1 3 4
# 50 "/usr/include/sys/select.h" 3 4
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 1 3 4
# 51 "/usr/include/sys/select.h" 2 3 4
# 164 "/usr/include/sys/select.h" 3 4
typedef int fd_mask;
# 187 "/usr/include/sys/select.h" 3 4
typedef struct fd_set {
fd_mask fds_bits[((((unsigned)4096)+(((sizeof(fd_mask) * 8))-1))/((sizeof(fd_mask) * 8)))];
} fd_set;
# 240 "/usr/include/sys/select.h" 3 4
extern void bzero (void *, size_t);
struct timeval;
int select (int, fd_set *, fd_set *, fd_set *, struct timeval *);
# 612 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/types.h" 2 3 4
typedef unsigned char sa_family_t;
typedef unsigned int in_addr_t;
typedef unsigned short in_port_t;
# 436 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
# 453 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
extern int fileno (FILE *);
extern FILE *fdopen (int, const char *);
# 474 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
extern char *_Ecuserid (char *);
# 493 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
# 1 "/usr/include/getopt.h" 1 3 4
# 43 "/usr/include/getopt.h" 3 4
extern int getopt (int, char * const [], const char *);
extern char *optarg;
extern int optind;
extern int optopt;
extern int opterr;
# 494 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
extern char *ctermid (char *);
extern int getw (FILE *);
extern int pclose (FILE *);
extern int putw (int, FILE*);
extern FILE *popen (const char *, const char *);
extern char *tempnam (const char*, const char*);
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 1 3 4
# 86 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 3 4
# 1 "/usr/include/machine/machlimits.h" 1 3 4
# 87 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 2 3 4
# 152 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 3 4
# 1 "/usr/include/sys/syslimits.h" 1 3 4
# 153 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 2 3 4
# 249 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 3 4
# 1 "/usr/include/machine/machtime.h" 1 3 4
# 250 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 2 3 4
# 267 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 3 4
# 1 "/usr/include/sys/rt_limits.h" 1 3 4
# 268 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/sys/limits.h" 2 3 4
# 511 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 2 3 4
# 541 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdio.h" 3 4
extern void setbuffer (FILE *, char*, int);
extern void setlinebuf (FILE *);
# 2 "bug.c" 2
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 1 3 4
# 129 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
typedef struct
div_t
{
int quot;
int rem; } div_t;
typedef struct
ldiv_t
{
long int quot;
long int rem; } ldiv_t;
# 160 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern int __getmbcurmax (void);
extern int mblen (const char *, size_t);
extern size_t mbstowcs (wchar_t *, const char *, size_t);
extern int mbtowc (wchar_t *, const char *, size_t);
extern size_t wcstombs (char *, const wchar_t *, size_t);
extern int wctomb (char *, wchar_t);
extern int rpmatch (const char *);
extern void *valloc (size_t );
extern double atof (const char *);
extern int atoi (const char *);
extern long int atol (const char *);
extern double strtod (const char *, char **);
extern float strtof (const char *, char **);
extern long int strtol (const char *, char **, int );
extern long double strtold (const char *, char **);
extern unsigned long int strtoul (const char *, char **, int );
extern int rand (void);
extern void srand (unsigned int );
extern void *calloc (size_t , size_t );
extern void free (void *);
extern void *malloc (size_t );
extern void *realloc (void *, size_t );
# 207 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern long a64l (const char *);
extern char * l64a (long);
extern int ttyslot (void);
extern char *ptsname (int);
# 234 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern void abort (void);
extern int atexit (void (*)(void));
extern void exit (int );
extern char *getenv (const char *);
extern int system (const char *);
extern void *bsearch (const void *, const void *, size_t , size_t , int(*)(const void *, const void *));
extern void qsort (void *, size_t , size_t ,int(*)(const void *, const void *));
extern int abs (int );
extern div_t div (int , int );
extern long int labs (long int );
extern ldiv_t ldiv (long int , long int );
# 266 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern int _Prand_r (unsigned int *);
# 300 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern double drand48 (void);
extern double erand48 (unsigned short []);
extern long jrand48 (unsigned short []);
extern void lcong48 (unsigned short []);
extern long lrand48 (void);
extern long mrand48 (void);
extern long nrand48 (unsigned short []);
extern unsigned short *seed48 (unsigned short []);
extern void srand48 (long);
extern int putenv (const char *);
extern void setkey (const char *);
# 341 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern char *initstate (unsigned int, char *, size_t);
extern char *setstate (const char *);
extern int grantpt (int);
extern int getsubopt (char **, char *const *, char **);
extern int random (void);
extern int srandom (unsigned int);
extern char *realpath (const char *, char *);
extern int unlockpt (int);
# 367 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
extern int clearenv (void);
extern char *getpass (const char *);
extern char *mktemp (char *);
extern int mkstemp (char *);
# 387 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/stdlib.h" 3 4
char *ecvt (double, int, int *, int *);
char *fcvt (double, int, int *, int *);
char *gcvt (double, int, char *);
# 3 "bug.c" 2
# 1 "/opt/TWWfsw/gcc33/lib/gcc-lib/alphaev56-dec-osf5.1/3.3/include/float.h" 1 3 4
# 4 "bug.c" 2
int
main ()
{
long double d;
d = 1.0; while (d < 1.18973149535723176508575932662800702e+4932L / 2.0) d += d;
printf ("d=%1.30Le\n", d);
if (d == (long double) 0.0)
printf ("d equals 0.0\n");
}
Paul Zimmermann