Package: gcc
Version: 2.7.2.1-2

-- Please describe the problems with the package here

Found a small syntactical blunder in
/usr/lib/gcc-lib/i486-linux/2.7.2.1/include/float.h:

/* float.h */
#ifndef _FLOAT_H___
#define _FLOAT_H___
/* Produced by enquire version 4.3, CWI, Amsterdam */

[...]

   /* Number of base-FLT_RADIX digits in the significand of a long double */
#undef LDBL_MANT_DIG
#define LDBL_MANT_DIG 64
   /* Number of decimal digits of precision in a long double */
#undef LDBL_DIG
#define LDBL_DIG 18
   /* Difference between 1.0 and the minimum long double greater than 1.0 */
#undef LDBL_EPSILON
#ifndef __LDBL_UNION__
#define __LDBL_UNION__
union __convert_long_double {
  unsigned __convert_long_double_i[4];
  long double __convert_long_double_d;
};
#endif
#define LDBL_EPSILON (__extension__ ((union __convert_long_double) {0x0, 0x80000
000, 0x3fc0, 0x0}).__convert_long_double_d)
   /* Minimum int x such that FLT_RADIX**(x-1) is a normalised long double */
#undef LDBL_MIN_EXP
#define LDBL_MIN_EXP (-16381)
   /* Minimum normalised long double */
#undef LDBL_MIN
#define LDBL_MIN (__extension__ ((union __convert_long_double) {0x0, 0x80000000,
 0x1, 0x0}).__convert_long_double_d)
   /* Minimum int x such that 10**x is a normalised long double */
#undef LDBL_MIN_10_EXP
#define LDBL_MIN_10_EXP (-4931)
   /* Maximum int x such that FLT_RADIX**(x-1) is a representable long double */
#undef LDBL_MAX_EXP                                                            
#define LDBL_MAX_EXP 16384                                                     
   /* Maximum long double */                                                   
#undef LDBL_MAX
#define LDBL_MAX (__extension__ ((union __convert_long_double) {0xffffffff, 0xff
ffffff, 0x107ffe, 0x0}).__convert_long_double_d)
   /* Maximum int x such that 10**x is a representable long double */
#undef LDBL_MAX_10_EXP
#define LDBL_MAX_10_EXP 4932

#endif /*  _FLOAT_H___ */

When initializing the int array in the union __convert_long_double, only a
single pair of braces is used, but since initialization rules apply
recursively, a pair is needed for both the union itself and the array.
Without them, innocent programs can generate compiler warnings.

Use the following code, compiled with -Wall, to demonstrate this:

#include <stdio.h>
#include <float.h>

void main(void)
{

/*  These next two lines both generate this message:                           
 *  warning: missing braces around initializer for                             
 *  `(anonymous).__convert_long_double_i'
 */

  printf("long double minimum = %Le\n", LDBL_MIN);
  printf("long double maximum = %Le\n", LDBL_MAX);
}

This is probably something for the upstream maintainer.

-- System Information
Debian Release: 1.2
Kernel Version: Linux apocalypse 2.0.20 #1 Sat Sep 14 04:03:34 EST 1996 i486

Versions of the packages this package depends on:
libc5   Version: 5.4.13-1

-- bug report generated by the debmake bug tool

-- 
 "If a man ate a pound of pasta and a pound of        | G. Branden Robinson
  antipasto, would they cancel out, leaving him       | Purdue University
  still hungry?"    -- Scott Adams                    | [EMAIL PROTECTED]

Reply via email to