[c++] don't expand &a.b to pointer arithmetic

Andreas Schwab schwab@suse.de
Tue Aug 31 19:17:00 GMT 2004


"Giovanni Bajo" <rasky@develer.com> writes:

> Andreas Schwab wrote:
>
>>>         * class.c (build_base_path): Use build_address directly.
>>>         * typeck.c (build_unary_op): Don't lower &a.b to pointer
>>>         arithmetic directly.
>>>         * typeck2.c (store_init_value): Don't assume !TREE_CONSTANT
>>>         means !initializer_constant_valid_p.
>> 
>> This causes this expression
>> 
>> # define _SC_GR0_OFFSET \
>> (((char *) &((struct sigcontext *) 0)->sc_gr[0]) - (char *) 0)
>> 
>> to no longer being an integral constant expression, which breaks building
>> the java library on ia64-linux.
>
> Correct, that is *not* an integral constant expression in C++. Try with:
>
> #define _SC_GR0_OFFSET   __builtin_offsetof(struct sigcontext, sc_gr[0])

I understand that, but that's not what glibc is currently using.  We need
to fixinclude it.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE Linux AG, Maxfeldstraße 5, 90409 Nürnberg, Germany
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



More information about the Gcc-patches mailing list