Puzzled!

Paolo Carlini pcarlini@unitus.it
Thu Dec 5 11:12:00 GMT 2002


Hi everyone,

a couple of days ago, in the WEB site of a vendor, I
have found the following list of defects which supposedly
affected glibc2.2.5... I wonder how many of them are real
and/or still affect glibc2.3.1

Perhaps someone among the glibc developers may reassure me?

Thanks, Paolo.

//////////


        Glibc V2.2.5 C Library


          C95

This version of Glibc supports the C95 standard with no failures, and 
partially supports the optional math tests. The math functions are all 
declared, but the accuracy of these optional functions is not always 
good. The following list of math functions failed to pass our accuracy 
tests: |acosf asinf|, |atanf|, 
|atan2f|,|coshf|,|expf|,|logf|,|log10f|,|powf|,|sinhf|,|tanhf|,|ceill|,|fabsl|,|floorl|,|fmodl|,|frexpl|,|frexpl|,|ldexpl|,|modfl|,|acosl|,|asinl|,|atanl|,|atan2l|,|tanl|,|coshl|,|expl|,|logl|,|log10l|,|powl|,|sinhl|, 
and |tanhl|.


          C++

The same issues that were found during the C95 testing are also present 
when compiling the tests as C++ code, plus the following.

    * The |islpha|, |isalnum|,
      |iscntrl|,|isdigit|,|islower|,|isprint|,|ispunct|,|isspace|,|isupper|,
      and |isxdigit| functions in |ctype.h| are defend as macros.
    * The macro |LC_MESSAGE| is not defined in |locale.h|.
    * The overloads for |abs(double)| and |pow(double, int)| in |math.h|
      are not declared.
    * The type |va_list| is not defined in |stdarg.h|.
    * Not all the signatures called for by the C++ Standard for
      |memchr|,|strchr|,|strpbrk|,|strchr|, and |strstr| are declared in
      |string.h|.
    * Not all the signatures called for by the C++ Standard for
      |wmemchr|,|wcspbrk|,|wcschr|,|wcsrchr|, and |wcsstr| are declared
      in |wchar.h|.
    * The |float| and the |long double| versions of |ceil|, |fabs|,
      |floor|,
      |fmod|,|frexp|,|ldexp|,|modf|,|acos|,|asin|,|atan|,|atan2|,|cos|,|sin|,|tan|,|cosh|,|exp|,|log|,|log10|,|sinh|,|sqrt|,
      and |tanh| functions are not declared in |math.h|.
    * The |long int| overloads of the functions |abs| and |div| are not
      defined in |stdlib.h|.


          C99

C99 support is far less consistent. (Setting the GCC command line switch 
to indicate that the language is C99 does not set the macro 
|__STDC_VERSION__| to the correct value for C99 -- it remains set to 
|199409L|.) The macros |INT/N/_C| can cause compile time failures if 
certain valid parameters are passed as the /value/. Segmentation faults 
can occur at runtime it certain valid parameters are passed to some of 
the required math functions. Here is a more detailed listing of faults.

    * The macro |math_errhandling| is not defined in |math.h|
    * |_Exit| is not declared in |stdlib|.
    * The |hh| specifier for |d|, |i|,|o|,|u|,|x|, or |X| conversion
      specifier does not convert the value to a |signed| or |unsigned|
      char before printing. This applies to both the wide and narrow
      versions of the input/output functions.
    * If |L""| is passed as the format parameter to |vwprintf| a
      negative value is returned, indicating an error occurred.
    * |fsetpos| and |fgetpos| do not work on a stream that has had wide
      characters written to the stream.
    * The |SCN| macros for unsigned integers that correspond to the |X|
      specifier for |fscanf| in |inttypes.h| are not implemented.
    * The math functions |fmal|, |remquol|,
      |remquof|,|remquo|,|fma|,|creall|,|cimagl|,|crealf|,|cimagf|,|cmplx|,
      and |csqrt| failed accuracy tests.
    * The functions |modff| and |frexpf| cause a segmentation fault.
      Several sets of valid parameters were used.
    * The |INT/N/_C(value)| macros defined in |stdint.h| cause a
      compile-time error when the parameter /value/ is
      |INT_LEAST64_MAX|,|UINT_LEAST8_MAX|,|UINT_LEAST16_MAX|,|UINT_LEAST32_MAX|,|INTMAX_MAX|,
      or a similar type parameter. The implementation is appending a
      suffix to the name, generating an undeclared variable.
    * The type generic macros |carg|, |cimag|, |creal|, and |fabs| fail
      to expand to the appropriate type. Argument types |float|,
      |double|, and |long double| were tested.
    * The type generic macro |ilogb| does not expand to an |int| with
      the parameters of |double| or |long double|.
    * The type generic macros |llrint| and |llround| do not expand to a
      |long long| with the parameters of |float| and |long double|.
    * The type generic macros |lrint| and |lround| do not expand to a
      |long| with the parameters of |double| and |long double|.






More information about the Libc-alpha mailing list