This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Puzzled!


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|.





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]