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