[PATCH] aliasing warning in ctype.h
Jakub Jelinek
jakub@redhat.com
Thu Mar 20 23:52:00 GMT 2003
On Fri, Mar 21, 2003 at 10:40:57AM +1100, Ian Wienand wrote:
> --- include/ctype.h.orig 2003-03-21 10:28:48.000000000 +1100
> +++ include/ctype.h 2003-03-21 10:27:40.000000000 +1100
> @@ -25,31 +25,28 @@
> CTYPE_EXTERN_INLINE const uint16_t ** __attribute__ ((const))
> __ctype_b_loc (void)
> {
> - const uint16_t **tablep =
> - (const uint16_t **) __libc_tsd_address (CTYPE_B);
> + void **tablep = __libc_tsd_address (CTYPE_B);
> if (__builtin_expect (*tablep == NULL, 0))
> - *tablep = (const uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128;
> - return tablep;
> + *tablep = ((void *)(_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) + 128));
> + return ((const uint16_t **)tablep);
> }
This is wrong, although you shut up a warning, you actually create
code which (unlike original) does the illegal type punning
(and thus the compiler might/will miscompile it).
Jakub
More information about the Libc-alpha
mailing list