[Tinycc-devel] Please support coo.h

shinichiro.h shinichiro.hamaji@gmail.com
Sat Jun 12 14:30:00 GMT 2010


Hi,

> i have pushed the patch on "mob"
> Coo: initial last member of union
> Please change my name of patch: U-YUAN\Administrator -> yuanbin

This change broke #include <math.h> on my Debian Linux.

% ~/wrk/tinycc/tcc math.c
In file included from math.c:1:
In file included from /usr/include/math.h:34:
/usr/include/bits/huge_val.h:52: error: '}' expected (got ",")

Here is the code in question:

typedef union { unsigned char __c[8]; double __d; } __huge_val_t;

# if __BYTE_ORDER == __BIG_ENDIAN
#  define __HUGE_VAL_bytes	{ 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
# endif
# if __BYTE_ORDER == __LITTLE_ENDIAN
#  define __HUGE_VAL_bytes	{ 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
# endif

static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
# define HUGE_VAL	(__huge_val.__d)

Apparently, glibc expects compilers initialize the first element of
a union. Also, it seems 6.7.8.17 of C99 standard
(http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf)
says compilers should initialize the first element?

17 Each brace-enclosed initializer list has an associated current object. When no designations are present, subobjects of the current object are initialized in order according to the type of the current object: array elements in increasing subscript order, structure members in declaration order, and the first named member of a union.127) In contrast, a designation causes the following initializer to begin initialization of the subobject described by the designator. Initialization then continues forward in order, beginning with the next subobject after that described by the designator.128)

So, we may want to revert this change maybe? Otherwise, the mob branch
is quite unusable :(

see also: http://gcc.gnu.org/ml/gcc/2010-06/msg00434.html

Thanks,



More information about the Gcc mailing list